Bestehende Software Refactoren Mit Hilfe Von TDD

18 Dec 2012

Wer als Entwickler schon mal das Glück hatte an einem neuen Projekt mitzuarbeiten, weiss wie schön das sein kann. Leider ist dies eher die Ausnahme. Der Normalfall ist der, dass man an einem schon bestehenden Softwaresystem arbeitet. Je nach Alter und Qualität des Codes findet man mehr oder weniger Tests vor. Der Regelfall ist eher der mit weniger Tests. Ich möchte für zwei Vorgehen schildern wie TDD das Arbeiten an Bestandscode vereinfachen kann. TDD bedeutet “Test Driven Development” oder auch Test First genannt. Konkret ist damit gemeint, dass man zuerst einen Test schreibt und der in der Folge entstehende Code diesen Test verifiziert. Dieser Artikel soll keine Einleitung zu TDD sein, wer mehr wissen will findet bei Wikipedia einen guten Einstieg.

Der erste Fall ist das Fixen eines Bugs. Bei dieser Arbeit geht es darum, dass der Bug zum Einen behoben wird, aber auch dass er nicht wieder in kommenden Versionen eingebaut werden kann. Wenn er einen neuen Bug bekommt, versucht jeder Entwickler zuerst den Bug zu reproduzieren. Wenn dieser Schritt geschafft ist, weiß man als Entwickler wie der Bug auftritt. Der nächste Schritt, wenn man mit Test-Unterstützung arbeiten will, ist den Bug automatisiert anhand eines Tests zu reproduzieren. Dieser Test sollte eine Prüfung (assertion) des Fehlers beinhalten und diese Prüfung sollte zunächst fehlschlagen. Wir haben also einen roten Test. In der Folge wird der eigentliche Bug gefixt. Das Ergebnis ist dann, dass der soeben geschriebene Test wieder grün ist. Der Test sollte mit in die Versionskontrolle eingecheckt werden und auch bei jedem Build-Vorgang laufen. Auf diesem Weg stellen wir sicher, dass sich der selbe Bug nicht wieder einschleichen kann.

Der zweite Fall ist das Refactoring von bestehendem Code. Auch in diesem Fall helfen Tests. Wenn schon welche vorhanden sind hat man es einfacher. Sollten noch keine Tests vorhanden sein, müssen erst welche erstellt werden die das Verhalten der Software abprüfen. Eine gute Anleitung hierzu findet man im Blog von Alexandru Bolboaca. Wenn nun erste Tests erstellt sind, welche die Funktionalität der Software verifizieren, kann man das Refactoring angehen. Zuerst verifiziert man, dass die Software richtig funktioniert anhand der Tests. Dann kann man den Code in kleinen Schritten refactoren. Zwischen jedem dieser Schritte wird immer wieder anhand der Tests kontrolliert, ob die Software immer noch korrekt läuft. Wenn dies der Fall ist, geht man weiter zum nächsten Schritt. Sollte dies nicht der Fall sein, wird der Schritt zurück genommen (am Besten mit Hilfe des Versionskontrollsystems, daher immer einchecken) oder man versucht den aufgetretenen Fehler zu beheben.