Ich lese relativ viel, und wollte die Gelegenheit einfach mal nutzen, um ein paar Bücher vorzustellen, die mir persönlich gut gefielen. Den Anfang machen heute drei Bücher zum Thema Tests.
Tests sind bei der Entwicklung von Software unerlässlich. So selbstverständlich, wie dieser Satz klingen mag, ist dieser Grundsatz aber nicht immer eingehalten – und das nicht ohne Grund. Tests finden auf vielen verschiedenen Ebenen statt. Die unterste Ebene sind der Tests sind Unit-Tests. Diese Testen einzelne Funktionalitäten. Beim Testgetriebenen Ansatz werden die Tests geschrieben, bevor die Funktionalität entsteht. Das Resultat ist eine sehr hohe Testabdeckung und ein gutes Sicherheitsnetz für spätere Refactoring-Maßnahmen. TDD wirkt sich aber auch auf das Design der Anwendung aus: die Klassen sind loser gekoppelt, die Abhängigkeiten sind durchdachter.
Um die Anwendung auf höherer Ebene zu testen, existieren Frameworks, die Komponententests oder Fachliche Tests vereinfachen. Fit (ich verweise hier einmal frech auf FitGoodies) ist eine von vielem Möglichkeiten. Einen guten Einstieg in diese Thematik vermittelt Frank Westphal in seinem Buch „Testgetriebene Entwicklung mit JUnit und FIT„, welches meine Empfehlung für einen Schnellen Einstieg in die Thematik ist. Hier werden die wichtigsten Konzepte anschaulich und an praktischen Beispielen erklärt. Das Buch ist auf Java-Entwickler zugeschnitten, die Konzepte gelten jedoch allgemein. Auf der Verlagswebseite kann das Buch als E-Book heruntergeladen werden.
Kent Beck legt in seinem Buch „Test Driven Development, by Example“ den Fokus auf Test-First-Entwicklung und bleibt auf dieser Ebene der Unit-Tests. Er konzentriert sich dabei nicht ausschließlich auf JUnit, sondern auf die zugrundeliegenden Konzepte hinter Tests. Daher mischt er auch Programmiersprachen (er verwendet Java und Python), um Ideen möglichst passend erklären zu können. Die Beispiele helfen dabei, den Einsatz von TDD zu erlernen. Beck geht dabei gewohnt Kleinschrittig vor. Nicht unerwähnt bleiben sollen ein paar Pattern, die er vorstellt, um übliche Probleme zu behandeln. Eigentlich muss man zu Kent Beck nicht viel schreiben, der Name spricht für sich. Wer lieber ein echtes Buch in der Hand hält und sich speziell für TDD interessiert, dem sei dieses Buch als Alternative zu Westphals Werk ans Herz gelegt!
Das dritte Buch zum Thema ergänzt die Themen der ersten beiden Bücher perfekt. Hier werden einige Grundlagen vorausgesetzt, dafür werden komplexere Themeben behandelt. Das Buch „Growing Object-Oriented Software Guided by Tests“ von Steve Freeman und Nat Pryce verwendet zwar ausschließlich Java-Beispiele, die besprochenen Themen sind aber für jede andere Programmiersprache genauso gültig. Sie erklären, wie man auch komplexe Software sinnvoll testet, und stellen dazu jMock als Mocking-Framework vor. Somit kann die Interaktion zwischen Klassen simuliert werden. Ebenso schreiben sie viel über das Design von Software, und wie man Verantwortlichkeiten in Klassen sinnvoll trennt. Wichtig ist, dass nicht gefordert wird, dass alles im ersten Wurf gelingt. Vielmehr zeigen sie, wie man bestehende Ansätze schrittweise refactort. Dabei wählen sie ein praktisches Beispiel, welches keinen Lehrbuch-Character hat, sondern tatsächliche Probleme des Alltags (Threading-Probleme, Client-Server-Kommunikation) enthält, und bauen die Software über das gesamte Buch auf. Besonders gut gefallen mir viele Aussagen, die nach dem Motto „well, it depends“ einige festgefahrenen Regeln in Frage stellen. Viel Wert wird hier auch auf lesbare Tests und insbesondere auf lesbare Testausgaben gelegt. Neben jUnit und jMock werden daher auch Themen wie Hamcrest und Windowlicker angesprochen. Meiner Meinung nach ein must-read-book für jeden TDD-Entwickler .