Test-getriebene Entwicklung hat sich aus den vorausgehenden Tests von Extreme Programming entwickelt, setzt aber prinzipiell keine agile Vorgehensweise im Projekt voraus. Dadurch ist sie auch einsetzbar, wenn das Projekt prinzipiell konventionell durchgeführt wird, zielt aber prinzipiell nur auf die Unit-Tests ab.
Bei Test-getriebener Entwicklung wird - wie der Name schon sagt - die Entwicklung durch automatisierte Tests getrieben, indem neuer Code nur dann geschrieben wird, wenn ein automatisierter Test fehlgeschlagen hat. Außerdem wird darauf geachtet, dass duplizierter Code durch Refactoring eliminiert wird. Diese beiden einfachen Regeln erzeugen ein komplexes Verhalten von Individuen und Gruppen:
*) Die Entwickler müssen Tests schreiben, bevor sie die Implementierung schreiben. Dadurch wächst der Entwurf (und somit die Anwendung) organisch.
*) Die Entwickler müssen die Tests selbst schreiben, weil sie nicht ständig darauf warten können, dass das die Tester machen.
*) Die Entwicklungsumgebung muss rasche Antworten liefern, damit Änderungen schnell durchgeführt werden können.
*) Der Entwurf muss aus vielen hoch-kohäsiven und lose gekoppelten Komponenten bestehen, weil er dadurch leicht testbar wird.
Der Entwickler geht bei Test-getriebener Entwicklung in den folgenden drei einfachen Schritten vor:
*) Rot: Schreibe einen kleinen Test, der noch nicht funktionieren kann (und sich eventuell auch noch gar nicht übersetzen lässt).
*) Grün: Mache, dass der Test so schnell wie möglich gut geht (auch wenn du dazu Sünden begehen musst).
*) Refactoring: Eliminiere duplizierten Code, der im zweiten Schritt eingeführt wurde.
Diese Vorgehensweise hat den psychologischen Effekt, dass sich der Entwickler auf kleine Schritte fokussieren kann und das Ziel (sauberer Code, der funktioniert) nicht aus den Augen verliert. Wenn bisher durch erhöhten Stress weniger Zeit zum Testen geblieben ist, dadurch wiederum weniger getestet wurde, hat das sehr leicht zu einem Teufelskreis geführt, mit immer mehr Unsicherheit und Stress. Test-getriebene Entwicklung hingegen führt dazu, dass der Entwickler bei erhöhtem Stress einfach öfters die bereits vorliegenden automatisierten Tests durchführt. Dadurch bekommt er unmittelbar die Rückmeldung, dass ohnehin noch alles funktioniert, was den Stress reduziert und die Fehlerwahrscheinlichkeit sinken lässt.
Die ersten beiden Schritte sind mit den Farben »rot« und »grün« eingeleitet, weil die Tests typischerweise mit Hilfe eines Test-Frameworks geschrieben werden bei dem Fehler rot angezeigt werden.
Test-getriebene Entwicklung bezieht sich allerdings nur auf die Tests, die der Entwickler selbst durchführt, d.h. auf die Unit-Tests, deren Umfang eventuell weiter gesehen wird als bei rein konventioneller Vorgehensweise. Funktionale Tests durch eigene Tester bzw. Systemtests werden nicht eigens adressiert aber auch nicht ausgeschlossen.
Kent Beck zeigt dem Leser anhand eines langen Beispiels, wie er arbeitet, und gibt anschließend Patterns zum Schreiben von Tests, Code und Testframeworks.
Ein weiterer Vorteil des Buchs ist, dass man es an einem Tag lesen kann.