© istockphoto.com/Varijanta
Funktionierende Software trotz Refaktorisierungen

Funktionale Tests im Refactoring


Wie schon oft diskutiert ist es nahezu nie sinnvoll, Software neu zu schreiben. Exis­tierende Software sollte, insbesondere wenn niemand mehr genau versteht, was sie macht, refaktorisiert werden [1], [2]. Refactoring bezeichnet die Technik, die internen Strukturen von existierendem Code zu ändern, ohne dessen Funktionalität zu beeinträchtigen. Wie kann das, gerade bei größeren Applikationen, erreicht werden?

Kurz zusammengefasst erhöht sich bei einem Rewrite nur in den seltensten Fällen tatsächlich die Softwarequalität, es gehen Features verloren, denen sich keiner der Stakeholder mehr bewusst war (üblicherweise etwa 40 Prozent) und die Umsetzung dauert immer deutlich länger als antizipiert. Außerdem können oft während eines Rewrites keine neuen Features mehr implementiert werden, wenn man nicht ein neues Team schafft, dass dann entsprechend weniger Wissen über die existierende Softwarefunktionalität hat.

Die einfachste Variante, um sicherzustellen, dass Funktionalität erhalten bleibt, sind automatisierte Tests. Automatisierte Tests für Software werden jedoch oftmals mit Unit-Tests gleichgesetzt, und genau diese lassen sich im Normalfall nicht für alte Software schreiben. Es ist immer noch üblich, dass exzessiv statische Methodenaufrufe stattfinden und Singletons oder statische Registries verwendet werden. Diese und andere veralteten Strukturen erschweren das Schreiben von Unit-Tests deutlich und sind nicht zuletzt oft entscheidende Gründe, warum ein Refactoring in Angriff genommen werden soll. Ein Teufelskreis.

Der Ablauf

Automatisierte Tests müssen nicht immer Unit-Tests sein. Andere Testformen wie Integrationstests, Akzeptanztests oder funktionale Tests haben ebenfalls ihre Daseinsberechtigung. Und genau die funktionalen Tests können uns beim Refactoring helfen. Funktionale Tests haben die Aufgabe sicherzustellen, dass Software eine gewisse Funktion oder Aufgabe erfüllt. Dabei wird bei einer Webapplikation zum Beispiel getestet, dass der Check-out in einem Onlineshop funktioniert, in dem dieser komplett ausgeführt wird. Die Idee ist Folgende:

  • Ein Anwendungsfall der Software wird durch einen funktionalen Test beschrieben.

  • Wir stellen sicher, dass der zu refaktorisierende Code durch die Tests abgedeckt wird.

  • Der Code kann refaktorisiert werden.

  • Wir können Unit-Tests für wichtigen neuen Code schreiben.

Durch den angedeuteten Weg ist sichergestellt, dass zumindest der getestete Anwendungsfall weiter funktioniert. Der Code kann mit den hier später bes...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang