am 24. Februar 2009
Heute will ich mal ein paar Worte verlieren über die Einführung von Unit Tests. Dabei möchte ich gar nicht den technischen Hintergrund beleuchten, sondern vielmehr die Kommunikation mit dem Team, wenn man sich entschieden hat diesen Schritt zu gehen.
Aber vielleicht verliere ich erst mal ein paar Worte dazu, wie wir es probiert haben. In unserem Projekt haben wir uns vor circa einem Jahr entschieden, ein wenig mehr auf Qualität zu setzen und Komponenten Tests einzuführen. Wenn ich wir sage, dann meine ich “mich”. Es war der Versuch das ganze von oben einzuführen. Die Entwickler hatten zwar nichts dagegen, aber wenn sie es nicht machen müssten, dann würden sie es auch nicht von sich selbst aus einführen.
Wir hatten also das Problem, dass kaum neue Tests geschrieben wurden. Leider hat es auf diesen Weg nicht funktioniert. Der Einzige, der anfänglich Tests geschrieben hat war ich. Ich glaube am Anfang war die Aufteilung unter uns drei PHPlern 40/1/0 Units Tests pro Person. Das war leider nicht das Ergebnis, das ich mir erhofft hatte. Wir haben aber trotzdem weiter gemacht und zwar bis zu dem Punkt bis einer meiner Unit Tests einem anderen den Arsch gerettet hat (sorry übrigens ffür den Ausdruck, aber nur falls meine Eltern oder so mitlesen).
Ab dem Tag hat es irgendwie Klick gemacht. Das Finden dieses Fehlers hätte in einem späterem Stadium Stunden dauern könne, da es wirklich nicht offensichtlich war, dass es so eine Auswirkung an einer anderen Stelle geben würde. Seitdem ist das Schreiben von Tests fast zur Routine geworden, jeder hat erkannt wie wichtig und sinnvoll sie sind.
Ok. Lange Rede kurzer Sinn. Was will ich also damit sagen. Ich weiß es nicht, aber ich versuche mal für mich zu definieren, wie ich vorgehen würde, wenn ich noch einmal in einem Team Unit Tests einführen müsste.
- Benefit definieren
Erster Schritt wäre wohl ein paar Daten über Komponenten Tests zu sammeln, die aussagekräftig sind und die Leute inspirieren voll einzusteigen.
- Beispiel- bzw. Vorzeigetests schreiben
An schönen Beispielen kann man viel einfacher erläutern wie Unit Tests funktionieren
- Regeln definieren
“Neuer Code muss mit Unit Tests abgedeckt sein, alter Code beim fixen von Bugs” (sage ich in einem anderen Beitrag mal mehr zu)
- Lead by Example
Ganz wichtig ist, dass mindestens eine Person hinter den Tests steht. Diese Person darf sich nicht beirren lassen, falls die anderen keine Tests schreiben. Irgendwann werden sie mit einsteigen.
- Zeit geben
Die Entwickler dürfen nicht das Gefühl haben, dass sie in der gleichen Zeit jetzt den Code und die Tests schreiben müssen. Druck hilft hier nämlich gar nichts. Auch wenn man anfänglich mehr Zeit braucht, gewinnt man diese später. Aber genau das sollte ja im Punkt 1) schon geklärt sein.
Wenn ich mir das so anschaue, dann würde ich es wieder ganz ähnlich machen. Irgendwie hat es ja doch geklappt. Natürlich ist es immer besser, wenn das Team sagt, dass sie Tests wollen.