Testgetriebene Entwicklung – Mehr als nur Qualitätssicherung

Testen gehört in der (agilen) Softwareentwicklung dazu – keine Frage: Das Projekt ist abgeschlossen und das Ergebnis wird getestet. Dieses klassische Testverfahren birgt jedoch oftmals Gefahren.

 Getestet wird, aber in der Regel zu spät, zu selten und entsprechend zu zeit- und kostenintensiv – oder völlig planlos. Die Methode des Test Driven Development (kurz TDD) oder testgetriebener Entwicklung will diesen klassischen Problemen entgegentreten.

Comic von Dilbert das zur Thematik der testgetriebenen Entwicklung passt (I wrote a test scricpt to test Dilbert's test script)DILBERT © (2011) Scott Adams. Used By permission of UNIVERSAL UCLICK. All rights reserved.

Testdriven Development als Vorgehensmodell

TDD ist ein Vorgehensmodell für die Programmierung. Ähnlich wie sich ein Sportler seinen Bewegungsablauf bewusst macht, um immer bessere Ergebnisse zu erzielen, hilft uns in der testgetriebenen Entwicklung ein expliziter Ablauf bei der kontinuierlichen Optimierung unserer Entwicklungsarbeit. Stets das bestmögliche Ergebnis zu erreichen, wird so nicht dem Zufall überlassen, sondern ist die Konsequenz einer Methodik.

Stichwort: Test First!

Das Thema der Fehlervermeidung ist in der testgetriebenen Entwicklung eine wesentliche Stärke. Durch den Test First-Ansatz wird das klassische Testen umgedreht: Es wird nicht die fertige Implementierung am Ende des Projektes getestet – die testgetriebene Entwicklung ist im Gegenteil von Anfang an Bestandteil des Projektes.

So wird nicht nur von Anfang an die Testbarkeit eines Systems sichergestellt, sondern auch eine vollständige und automatisierte Überprüfung aller Komponenten erreicht. Regressionsfehler können damit bereits zu einem frühen Zeitpunkt erkannt und mit vergleichbar geringem Aufwand behoben werden.

Multitasking als Herausforderung

Neben diesem offensichtlichen Vorteil gibt es aber noch einen anderen, wesentlichen Aspekt in der testgetriebenen Entwicklung, den wir an einem Beispiel verdeutlichen, das nicht mit Softwareentwicklung zu tun hat:

Wenn wir für Freunde kochen, ist es immer eine große Herausforderung, alles zeitgleich fertig zu bekommen: Alle Speisen müssen gar und warm – aber hoffentlich nicht angebrannt – sein. Auch sollten wir eventuelle Sonderwünsche unserer Gäste berücksichtigt haben und beim Essen dafür sorgen, dass die Gläser nicht zu lange leer bleiben. Das alles erfordert Multitasking und höchste Aufmerksamkeit – und geht leider doch gelegentlich schief.

 


 

Auch in der Softwareentwicklung müssen wir verschiedene Aspekten gleichzeitig im Auge behalten:

Die Spezifikation

Zu Beginn unseres Softwareentwicklungsprojektes müssen wir das Ausgangsproblem genau benennen und definieren können: Welche Anforderungen möchten und müssen wir mit unserer Implementierung erfüllen? Die Frage beinhaltet, dass wir uns über Rand-, Vor- und Nachbedingungen ebenso Gedanken machen müssen wie um Grenzfälle. 

Die Implementierung

Das Problem ist definiert, nun müssen wir die richtige Lösung finden. Dabei muss gewährleistet werden, dass die bisherigen Tests weiterhin fehlerfrei durchlaufen werden.

Die Optimierung

Der Code, also das Ergebnis unseres Projektes, soll nicht nur ein einmaliges Problem lösen – er soll für den dauerhaften Einsatz optimiert sein. Er sollte den entsprechenden Entwicklungsstandards folgen und wartbar sein. Andere Entwickler, die später auf ihm aufsetzen müssen, sollten die Funktionsweise meines Codes verstehen und ihn ggf. leicht erweitern bzw. an ihn anknüpfen können.

Multitasking durch Methodik

Mehrere Dinge parallel optimal zu erledigen, ist auch in der Programmierung schwierig. In der testgetriebenen Entwicklung hilft uns der TDD-Zyklus dabei, die oben genannten Aspekte in getrennten Phasen anzugehen und unsere Aufmerksamkeit so genau einer Aufgabe widmen zu können – und am Ende unseres Projektes ein rundes Ergebnis zu erzielen.

Wir sehen, die Qualitätssicherung ist ein wichtiger Punkt beim Einsatz von TDD: Durch das kontinuierliche Testing von Anfang an, entsteht ein konstanter Arbeitsfluss, durch den wir regelmäßig einen lauffähigen Stand unserer Software vorliegen haben – und genau wissen, wo wir in der Entwicklung stehen, welche Meilensteine noch bewältigt und welche Probleme noch gelöst werden müssen.

Die Qualitätssicherung findet also nicht halbherzig am Ende der Entwicklung statt, sondern wird im laufenden Prozess sichergestellt.

Doch TDD bietet noch mehr: Durch das von Anfang an testbare System und die so entstehende Möglichkeit, Fehler frühzeitig zu erkennen und beheben zu können, werden Nachhaltigkeit und Kosteneffizienz in der Produktentwicklung gesichert.

Als Entwickler können wir uns außerdem immer auf die aktuellen Themen fokussieren, ohne alle Nebenschauplätze im Auge haben zu müssen. Durch die testgetriebene Entwicklung wird also nicht nur das Ergebnis, sondern auch unsere eigene Entwicklungsarbeit optimiert.

Du willst mehr über agile Themen erfahren?

Schau dich in unserem Agile-Blog um!

Über Christian Fischer

Christian Fischer ist Agile Software Craftsman bei der itemis AG und unterstützt als Coach für Agile Methoden und Prozesse Teams und Organisationen auf ihrem Weg zu einer effizienteren Produktentwicklung. Daneben ist er iSQI zertifizierter Trainer für Agile Test Driven Development und regelmäßig Sprecher auf Konferenzen sowie Autor von Fachartikeln.