Automatisierte Tests geben uns im agilen Projekt das nötige Vertrauen in unsere Code-Änderungen und das gute Gefühl, nichts kaputt gemacht zu haben. Ironischerweise werden aber genau diese Tests auf Dauer zum Bremsklotz der alltäglichen Arbeit. Denn immer dann, wenn wir unsere Testabdeckung durch neue Testfälle verbessern, verlängert sich die Laufzeit der Tests. Auf Dauer oft so sehr, dass die kurzen Zyklen der agilen Entwicklung darunter leiden. Gerade bei End-to-End-Tests sind Testzeiten von Stunden oder Tagen keine Seltenheit. Je gewissenhafter wir testen um so träger der Prozess. Die Test-Impact-Analyse zeigt auf, wie wir diesem Teufelskreis entrinnen.
Im ersten Teil des Vortrags stellen wir diese Technik vor: Anstatt immer alle Tests laufen zu lassen, werden nur diejenigen selektiert, die tatsächlich den zuletzt geänderten Code zur Ausführung bringen, denn nur diese können eventuelle neue Fehler aufdecken. Zudem werden die verbleibenden Testfälle mit einer Heuristik so sortiert, dass die Tests die am meisten bisher ungetestete Änderungen abdecken zuerst ausgeführt werden. Dadurch sollen Fehler möglichst früh im Testlauf aufgedeckt werden, sodass die Entwickler diese schon vor dem Abschluss aller selektierten Tests analysieren und beheben können. Die Test-Impact-Analyse ist ein generisches Verfahren, das für eine Vielzahl von Programmiersprachen und Werkzeuge zur Messung der Testabdeckung anwendbar ist. Es eignet sich ebenso für Unit-Tests wie Integrations- und UI-Tests. Auch die Unterstützung manueller Tests ist möglich. Dabei verstehen wir die Test-Impact-Analyse nicht als Ersatz des klassischen “Test-All”. Vielmehr hilft sie dort schnelles Feedback zu erzeugen, wo Entwickler es benötigen: bei den täglichen oder Change-basierten Builds und Testläufen in der Continuous-Integration-Umgebung. Ein vollständiger Lauf aller Tests sollte auch weiterhin regelmäßig, beispielsweise einmal am Tag oder wöchentlich, erfolgen. Den praktischen Nutzen der Test-Impact-Analyse haben wir in verschiedenen Studien untersucht.
Diese aktuellen Forschungsergebnisse bilden den zweiten Teil unseres Vortrags und illustrieren wie die Technik in der Praxis helfen kann Testzeiten zu reduzieren. Unsere Untersuchungen zeigen, dass die Selektion der relevanten Tests eine erhebliche Zeiteinsparung von bis zu 97.5% bringen kann und das durch die Priorisierung der verbleibenden Tests 90% der fehlerhaften Builds in nur 2% der Testausführungszeit erkannt werden. Wir setzen Test-Impact-Analyse bereits seit einem halben Jahr erfolgreich bei der Entwicklung unserer eigenen Software-Analyse-Plattform Teamscale und in ersten Pilotprojekten bei unseren Kunden ein. Unsere Erfahrungen aus diesem praktischen Einsatz bilden den dritten Teil unseres Vortrags.