Eine oft unterschätzte Aufgabe ist die Arbeit an einer Codebasis, die keine ausreichende Testabdeckung besitzt. Ob sich eine Änderung durch einen ungewünschten Seiteneffekt auf andere Stellen auswirkt, ist in diesem Fall nur schwer zu beurteilen.
Bisher muss das Arbeiten “nach bestem Wissen und Gewissen” oftmals ausreichen, welches durch das Vier-Augen-Prinzip und manuelle Tests der QS-Kollegen noch unterstützt wird. Eine erhebliche Verbesserung im Vergleich zu diesem Vorgehen stellt die Absicherung aller geänderter Stellen mit Hilfe von Unit Tests dar. Dies ist jedoch sehr zeitintensiv und der Nutzen beschränkt sich auf das Nachvollziehen direkter Auswirkungen von Änderungen. Seiteneffekte an anderen Stellen können auch hiermit nicht erkannt werden.
Um diesem Dilemma zu entfliehen, stellt Microsoft mit Visual Studio Enterprise 2015 nun eine sehr gut integrierte Weiterentwicklung von Pex zur Verfügung: IntelliTest. IntelliTest generiert mit nur wenigen Klicks eine hohe Testabdeckung als Baseline für vorhandenen Code.
Wie geht das?
Über das Kontextmenü im zu testenden Bereich (Methode oder Klasse) wird die Analyse über den Eintrag Run IntelliTest gestartet (1). Im Hintergrund analysiert IntelliTest nun die betroffenen Methoden und generiert Testfälle, die alle Pfade durch die betroffenen Methoden abdecken.
Das Resultat ist eine Übersicht der generierten Testfälle (2), die auf Knopfdruck (3) als Unit Tests in einem eigenen Test-Projekt gespeichert werden können. Die zu erwartenden Ergebnisse der Unit Tests ergeben sich dabei aus dem Verhalten der Methoden zum Zeitpunkt der Analyse.
Wenn ab sofort Änderungen am Code vorgenommen werden und dadurch das Ergebnis einer Methode verändert wird, so wird durch einen roten Unit Test darauf hingewiesen.
Im Falle, dass dies ein ungewollter Seiteneffekt der Änderungen ist, kann das Problem sofort behoben werden. Handelt es sich jedoch um eine gewollte Veränderung, so können die bestehenden Unit Tests durch erneutes Ausführen von Run IntelliTest automatisch angepasst werden.
Fazit
IntelliTest generiert Unit Tests auf Basis des aktuellen Verhaltens von Code. Analysiert IntelliTest eine Methode, die ein fachlich falsches Ergebnis liefert, wird dies von IntelliTest natürlich nicht erkannt. Vielmehr wird der generierte Unit Test ab sofort darauf prüfen, dass sich dieses (fachlich falsche) Ergebnis in Zukunft nicht unbemerkt ändert. Für das Erzeugen einer Baseline für Code ist dies jedoch das gewünschte Verhalten: Auswirkungen durch Änderungen sollen nicht länger unerkannt bleiben.
IntelliTest kann noch mehr
IntelliTest bietet noch weitere nützliche Features. Beispielsweise macht es Vorschläge für erweiterbare Factory-Methoden für komplexe Eingabeobjekte oder macht mit Warnungen darauf aufmerksam, falls Methoden durch unbehandelte Exceptions zum Abbruch gebracht werden können. Ein genauerer Blick lohnt sich!