Historisch gesehen wurde die Automatisierung von Tests in langlebigen Projekten oft zur Belastung: Tests wurden "auf die Schnelle" geschrieben, nicht unterstützt und mussten nach Jahren verworfen werden. Häufige Teamwechsel führen dazu, dass Wissen verloren geht, die Architektur der Tests verwässert wird und die Automatisierung sich in einem "Chaos von Skripten" verwandelt.
Problem: Test-Szenarien veralten, Testverantwortliche fehlen, es gibt keine dokumentierte Architektur des Testsystems, Code-Reviews werden nicht durchgeführt und technischer Schuldenaufbau entsteht. Neuen Teammitgliedern fällt es schwer zu verstehen, wie und was durch Tests abgedeckt ist und welche Tests wofür verantwortlich sind.
Lösung — Implementierung von GitFlow-Praktiken für automatisierte Tests, Schreiben von lesbarem und gut dokumentiertem Code für Tests, Verwendung von Entwurfsmustern (wie Modular Test Architecture), Automatisierung der Dokumentationspflege (README, automatische Generierung von Berichten über Abdeckungen und Aktualität der Tests). Code-Reviews für automatisierte Tests sind unerlässlich, Test-Szenarien sollten in der Dokumentation beschrieben werden, und Ownership sollte durch die Verteilung von Verantwortlichkeiten implementiert werden.
Schlüsselmerkmale:
Hat es Sinn, die statische Analyse von Testcode zu nutzen?
Ja! Statische Analyse (Linter, SonarQube und andere) hilft, die Qualität und Konsistenz des Testcodes aufrechtzuerhalten und die Entstehung von "schnellem und schmutzigem" Code zu verhindern.
Wie oft sollte man automatisierte Tests von veralteten Szenarien reinigen?
Es wird empfohlen, die Aktualität der Szenarien in jedem Release-Zyklus (z.B. einmal im Monat) zu überprüfen, um nicht mehr aktuelle Funktionalitäten auszuschließen und die Stabilitätsmetriken nicht zu beeinträchtigen.
Hilft 100% Abdeckung durch automatisierte Tests, die Veraltung von Tests zu vermeiden?
Nein. Selbst bei "vollständiger" Abdeckung können automatisierte Tests aufgrund von Änderungen an Anforderungen und Architektur irrelevant werden, wenn sie nicht aktuell gehalten werden.
In einem großen Unternehmen waren alle Tests in einem Repository untergebracht, wurden von jedem geschrieben, wie es gerade passte. Nach einem Jahr konnte kaum jemand erklären, was abgedeckt ist und was nicht, die meisten Szenarien waren irrelevant.
Vorteile:
Nachteile:
Für automatisierte Tests wurde ein separater Masterplan erstellt: Jedes Modul hatte einen eigenen Eigentümer; die Code-Struktur wurde im README beschrieben, Standards im CONTRIBUTING.md. Jeder PR im Test-Repository erforderte ein Code-Review mit einer obligatorischen Checkliste.
Vorteile:
Nachteile: