Was ist Testgetriebene Entwicklung?

Bei der testgetriebenen Entwicklung (engl. Test-Driven Development, TDD) werden Tests dazu benutzt, um die Softwareentwicklung zu steuern. Der Ablauf dieser Programmierung ist zyklisch:

Die Tests werden typischer-, aber nicht notwendigerweise, mit dem XUnit-Framework in der gleichen Sprache wie der Produktivcode implementiert. Tests, die erfolgreich durchlaufen, werden durch einen grünen, nicht erfolgreiche durch einen roten Balken dargestellt. Man spricht daher vom "Red-Green-Refactor"-Zyklus.

Testgetriebene Entwicklung geht inkrementell vor. Jeder durchlaufene TDD-Zyklus reichert die Software um neue Fähigkeiten an - und das minutiös, denn jeder Zyklusabschnitt sollte nicht länger als ein paar Minuten dauern.

Testgetriebene Entwicklung als Designstrategie


Die Tests noch vor den Komponenten zu schreiben, die man eigentlich testen möchte, ist sehr markant für TDD. Dies wird als Test-First bezeichnet und darum ist TDD keine Test-, sondern eine Designstrategie. Denn wird der Test zuerst geschrieben, so wird die Schnittstelle der zu testenden Komponente bereits benutzt, bevor sie tatsächlich existiert. Der Entwickler bekommt frühestmöglich Feedback, ob das Design auch verwendbar sein wird.

Die Implementierung des produktiven Codes erfolgt erst, wenn ein Test vorliegt, der dies verlangt. Es soll dann genau soviel Code geschrieben werden, dass der Test erfolgreich durchläuft. Wird zuviel Produktivcode für einen Test geschrieben, dann entstehen nicht getestete Stellen, die beim Refactoring Probleme bereiten können.

Beim Refactoring werden die Tests und der Produktivcode gleichermaßen aufgeräumt. Ziel hierbei ist es, die Software einfach, redundanzfrei und verständlich zu gestalten. Diese Phase des TDD-Zyklus geht dem Zyklusanfang unmittelbar voraus: Um einen bestimmten Test zu schreiben kann es notwendig sein, zuerst ein Refactoring an den anderen Tests oder dem Produktivcode vorwegzunehmen.

Der Zyklus ist überschneidungsfrei, jede Aktivität beim testgetriebenen Entwickeln läßt sich einem Abschnitt zuordnen. Es sollten keine Tests in Phase 2 und 3 und kein Produktivcode in Phase 1 und 3 geschrieben werden. Beim Refactoring wird das Verhalten des Codes nicht verändert, also dabei weder bei den Tests (Phase 1) noch im Produktivcode (Phase 2) etwas funktional verändert.

Prinzipien, die TDD vereint, sind die kontinuierliche Designverbesserung, einfaches Design und Test-First. TDD selbst ist eine Kerntechnik von Extreme Programming und damit Teil der agilen Softwareentwicklung. Es verspricht Qualitätssoftware und eine deutliche Aufwertung der Softwarearchitektur dank evolutionärem Design.

Vorteile von TDD auf einen Blick

wartbare Qualitätssoftware:

effektive und effiziente Erstellung der Software:


Seite druckenDiese Seite ausdrucken

Im Februar findet wieder das TDD-Camp statt: eine Intensivschulung zu Test-Driven Development am eigenen Notebook. Nähere Infos erhalten Sie hier.

Unser Angebot zu TDD

Wir bieten zu TDD Schulungen und Beratung, sind auf Konferenzen und in Fachzeitschriften mit Beiträgen zu diesem Thema vertreten und vergeben Jobs an Entwickler, die TDD bereits beherrschen. Treten Sie einfach mit uns in Kontakt.

TDD-Flashfilm

In unserem 30-minütigen Flashfilm können Sie einem Entwickler live bei der testgetriebenen Entwicklung über die Schulter sehen (und ein süßer Nackmull kommt im Video auch vor).




Wie richtet man seine Architektur auf neue und sich ändernde Anforderungen aus? Mehr über flexible Architektur