Vorwort

Testgetriebene Entwicklung (engl. Test Driven Development, TDD) ist vermutlich die meist zitierte Praktik des Extreme Programming. Am Sinn oder Unsinn dieser Programmiertechnik scheiden sich die Geister. Während die einen TDD für unverzichtbar halten, um dauerhaft wartbare Software zu entwickeln, sehen andere darin ein umständliches, unintuitives und seinen Zweck verfehlendes Vorgehen.

Mein Ziel ist es nicht, diese Sinnfrage allgemein zu klären, sondern Entwicklern, die TDD grundsätzlich positiv gegenüberstehen, dabei zu helfen, diese Frage für sich selbst, für ihr Team und für ihren derzeitigen Kontext zu beantworten. Dazu gehören auch die Aufdeckung von Fallstricken, typischen Fehlern, notwendige Abwägungen und die Warnung vor Situationen, in denen testgetriebene Entwicklung kontraproduktiv wirken kann.

Zielpublikum

Dieses Buch ist kein Buch für den TDD-Anfänger, der nach einem einfachen Rezept für die Erstellung perfekter Software sucht. Zwar werden auch die theoretischen Grundlagen der testgetriebenen Entwicklung im Detail behandelt, dafür werden andere typische Anfängerfragen, wie etwa nach der Installation und Benutzung eines bestimmten Testframeworks, gar nicht berührt oder lediglich angerissen.

Das Buch zielt auf Leserinnen und Leser mit solidem Wissen in Programmierung, Design und Architektur, die bereit sind, in Codebeispiele auch dann einzutauchen, wenn diese nicht in ihrer Lieblingssprache verfasst wurden. Es möchte dem TDD-Anfänger die Möglichkeit geben, den Sinn hinter den Regeln zu verstehen. Der Praktiker wird erfahren, dass auch beim Einsatz testgetriebener Entwicklung unterschiedliche Ziele unterschiedliches Vorgehen erfordern. Und der erfahrene TDDler soll Intuition dafür entwickeln, wann die vorgestellten Prinzipien hilfreich sind, wann sie angepasst werden müssen und wann sie im Wege stehen.

Codebeispiele

Die meisten Beispiele sind in einer (überwiegend) typisierten Variante der JVM-Sprache Groovy verfasst. Damit wird der Quellcode deutlich knapper als beispielsweise in Java und ist dennoch für den “normalen” Programmierer gut lesbar. Ungewöhnlichere Fähigkeiten von Groovy, die über den Überblick in Anhang A hinausgehen, setze ich nur ein, wenn es für ein Thema wesentlich ist; dann selbstverständlich mit ausführlicher Erklärung.

Als Testframework kommt in den meisten Beispielen JUnit zum Einsatz; auch hier verzichte ich auf esoterische Eigenschaften. Andere Bibliotheken, z.B. für die Erzeugung von Test-Doubles, kommen bei Bedarf hinzu und werden an Ort und Stelle erklärt. Eine kompakte Einführung in JUnit findet sich in Anhang B.

Kryptographie

Alle Aufgaben und Codebeispiele stammen aus dem Gebiet der Kryptographie. Dieses Thema ist nicht nur hochaktuell und spannend, sondern auch so vielschichtig, dass sich für jeden Aspekt der testgetriebenen Entwicklung eine passende Anwendung aus dem Reich der Verschlüsselung findet.

Aber keine Angst! Das für die Beispiele nötige Wissen, wird im Buch vermittelt; die vorherige Lektüre eines Buchs über Kryptographie ist nicht notwendig, im Anschluss allerdings sehr empfohlen.

Erfahrung der langjährigen Praktiker

Im Laufe der Recherchen für dieses Buch habe ich einige “alte Hasen” der testgetriebenen Entwicklung befragt, die zum Teil schon seit mehr als 15 Jahren TDD einsetzen. Abschriften der Interviews habe ich ins Buch eingestreut - und meine Erkenntnisse aus diesen Gesprächen natürlich auch in die “normalen” Kapitel mit eingearbeitet.

Feedback und Kommentare

Ich freue mich über jedes Lob und über alle konstruktiven Kommentare - alle anderen ignoriere ich einfach. Einfach über Twitter (@johanneslink #tdddecrypted) oder per E-Mail an business@johanneslink.net.