Incremental Testing
Eine Methode, Tests schrittweise parallel zur Implementierung aufzubauen, um früh Feedback zu erhalten und Fehlerquellen zu reduzieren.
Klassifikation
- KomplexitätMittel
- AuswirkungTechnisch
- EntscheidungstypDesign
- OrganisationsreifeFortgeschritten
Technischer Kontext
Prinzipien & Ziele
Use Cases & Szenarien
Kompromisse
- False sense of security bei unvollständigen Tests
- Testflakiness durch unzureichende Isolation
- Wachsende Wartungskosten bei fehlender Governance
- Kleine, isolierte Tests bevorzugen
- Tests im Pull-Request-Prozess erzwingen
- Regelmäßige Refaktorierung der Test-Suite
I/O & Ressourcen
- Feature- oder Änderungsbeschreibung
- Modulare Schnittstellendefinitionen
- CI/CD-Pipeline mit Testausführung
- Erweiterte, modulare Testsuite
- Schnelle Rückmeldung zu fehlerhaften Änderungen
- Geringeres Fehleraufkommen in Integrationstests
Beschreibung
Incremental Testing ist eine Methode, Tests schrittweise zusammen mit der Implementierung zu erstellen und auszuführen. Sie fördert frühzeitiges Feedback, reduzierte Fehlerlokalisierung und bessere Testabdeckung. Die Methode priorisiert kleine, verlässliche Testschritte und erleichtert Regressionstests.
✔Vorteile
- Frühe Fehlererkennung reduziert Kosten
- Kürzere Debugging-Zyklen dank enger Rückkopplung
- Erhöhte Testabdeckung über den Entwicklungsverlauf
✖Limitationen
- Erhöhter initialer Pflegeaufwand für Tests
- Kann bei fehlender Modularität schwer umzusetzen sein
- Übermäßige Tests können die Build-Zeiten verlängern
Trade-offs
Metriken
- Testabdeckung (Coverage)
Anteil des Codes, der durch Tests abgedeckt ist; wichtig zur Bewertung inkrementeller Tests.
- Mean Time to Detect (MTTD)
Durchschnittliche Zeit bis zur Entdeckung eines Fehlers nach Einführung einer Änderung.
- Build-Stabilität
Anteil grüner vs. roter Builds im CI nach Test-Erweiterungen.
Beispiele & Implementierungen
Microservice-Featureentwicklung
Ein Team ergänzt Endpunkte und pflegt zugehörige Unit- und Integrationstests inkrementell.
Schrittweises Refactoring
Alte Monolith-Methoden werden in modulare Klassen überführt, begleitet von schrittweisen Tests.
CI-gestützte Regression
Regressionstests werden modulweise ergänzt, um Builds in der CI stabil zu halten.
Implementierungsschritte
Identifiziere kleinste testbare Einheiten und priorisiere sie.
Schreibe erste Unit-Tests vor oder begleitend zur Implementierung.
Automatisiere Testausführung in der CI und erweitere Tests schrittweise.
⚠️ Technische Schulden & Engpässe
Tech Debt
- Veraltete, redundante Tests erhöhen Wartungskosten
- Monolithische Testsuite verlangsamt CI deutlich
- Ungepflegte Mocks/Fixtures führen zu falschen Sicherheiten
Bekannte Engpässe
Beispiele für Missbrauch
- Nur UI-Tests inkrementell hinzufügen ohne Unit-Tests
- Tests schreiben, die stark von externer Infrastruktur abhängen
- Tests nicht in CI integrieren und lokal ausführen lassen
Typische Fallen
- Unklare Priorisierung führt zu verwaisten Tests
- Fehlende Isolation verursacht instabile Tests
- Vergessen, Testdaten zu versionieren
Erforderliche Fähigkeiten
Drivers (Architectural Drivers)
Constraints
- • Erfordert modulare Architektur oder Mock-Strategien
- • Zeitliche Beschränkungen im Sprintkontext
- • Notwendigkeit automatisierter CI-Runs