Idee

Ein vor dem Code geschriebener Test verwandelt einen Teil der Spezifikation in eine überprüfbare Vorgabe

Info

Ursprünglich auf Französisch verfasst. Von KI übersetzt — der Sinn wurde bewahrt, nicht der Stil.

Hauptgedanke

Zuerst den Test und dann den Code zu schreiben, kehrt die übliche Reihenfolge um, aber der Nutzen liegt nicht in der Reihenfolge. Der Test beschreibt das Was — das ist das erwartete Verhalten, das muss wahr bleiben. Der Code beschreibt das Wie. Der Test ist also ein Stück Spezifikation, geschrieben in einer Sprache, die die Maschine auswerten kann.

Was das ändert, zeigt sich über die Zeit. Der Code wird refaktoriert werden, er wird auf neue Daten treffen, andere Funktionalitäten werden um ihn herum entstehen. Das erwartete Verhalten dagegen ist an einem anderen Ort festgehalten als im Gedächtnis dessen, der es implementiert hat: Wird es gebrochen, schlägt der Test fehl, im Idealfall auf dem Rechner des Entwicklers oder in der Qualifizierung statt in der Produktion.

TDD beseitigt keine Defekte, ersetzt kein Produktdenken und verwandelt keine schlechte Spezifikation in ein gutes Produkt. Es tut nur eines, und das ist selten: Es macht einen Teil der Qualität überprüfbar, bevor der Code existiert.

Warum das wichtig ist

Das holt die Disziplin aus der Ecke der technischen Hygiene. Ein vorher geschriebener Test ist ein Spezifikationsartefakt, also ein Ort, an dem sich Produkt und Entwicklung auf ein Verhalten einigen können — was ein Prosadokument nicht erlaubt, weil es sich nicht auswerten lässt.

Es verlagert auch die Kosten der Tests: Nachher geschrieben, stellen sie fest, was der Code tut; vorher geschrieben, legen sie fest, was er tun muss.

Nuancen und Grenzen

Der formalisierbare Teil ist schmal. Ein Test sagt, dass ein Verhalten eingehalten wird, nie, dass es das richtige Verhalten war — der Teil der Qualität, der vom Produkturteil abhängt, bleibt unberührt.

Und die Disziplin setzt voraus, dass man das erwartete Verhalten formulieren kann. Bei einer zu unklaren Spezifikation klärt es nichts, den Test zuerst zu schreiben: Er zementiert die Mehrdeutigkeit, statt sie aufzulösen.

Offene Fragen

  • Welches Artefakt kann für den Teil des erwarteten Verhaltens, der sich nicht als Test ausdrücken lässt, die Rolle spielen, die der Test für den ausdrückbaren Teil spielt?