thePHP.cc Logo English Kontakt Menü
mood

Characterization Tests

Ein Characterization Test ist ein Test, mit dem sichergestellt wird, dass sich das Verhalten einer Software im Rahmen eines Refactorings nicht ändert. Der Begriff wurde geprägt von Michael Feathers im Buch "Working Effectively with Legacy Code".

Ein Characterization Test macht - anders als ein Unit Test- keine Aussage darüber, ob das Verhalten der Software richtig oder falsch ist. Vielmehr wird das Ergebnis, das die vorhandene Software aktuell liefert, als Erwartung für den Test selbst verwendet. Die Testumgebung eines Characterization Tests ist meist größer als die Testumgebung eines Unit Tests. Nicht selten wird die gesamte Applikation als Testumgebung verwendet, oft sogar mit einer dedizierten Testdatenbank, um sicherzustellen, dass sich der Zustand der Datenbank zwischen Testläufen nicht unbeabsichtigt verändert.

Weiß man nun, welche Ausgabe der Code liefert, kann man mit dem Refactoring beginnen. Falls man dabei unabsichtlich das wahrnehmbare Verhalten der Anwendung verändert, beeinflusst das auch die Ausgabe und der Characterization Test wird fehlschlagen. So kann Änderungen im Code durch automatisierte Tests absichern, auch wenn der vorhandene Code nicht mit Unit Tests abgedeckt ist.

Ein Characterization Test ist nur kurzfristig sinnvoll einsetzbar. Über die Zeit werden sich sowohl die Ausgabe einer Anwendung als auch die Datenbank ändern. Führt man den Characterization Test dann erneut aus, schlägt dieser fehl, es lässt sich aber im Allgemeinen nicht mehr genau sagen, ob eine Änderung am Code, der gerade bearbeitet wird, oder eine Änderung des globalen Systemzustands den Test fehlschlagen liessen.

Die Vorgehensweise bei der Arbeit mit Characterization Tests ähnelt den Regressionstests, allerdings ist die Zielsetzung eine etwas andere.

Präsentation Die Legende vom untestbaren Code Weitere Präsentationen
Schulung

Praktikable Lösungen zur Testautomation anhand von Problemstellungen direkt aus der eigenen Codebasis.

Weitere Schulungen