Software Testing
Systematische Überprüfung von Software durch manuelle und automatisierte Tests zur Erkennung von Fehlern und Sicherstellung der Qualität.
Klassifikation
- KomplexitätMittel
- AuswirkungTechnisch
- EntscheidungstypDesign
- OrganisationsreifeFortgeschritten
Technischer Kontext
Prinzipien & Ziele
Use Cases & Szenarien
Kompromisse
- Flakiness führt zu Vertrauensverlust in Test-Suites.
- Unzureichende Tests lassen kritische Fehler unentdeckt.
- Overhead durch zu viele langsame Tests verlangsamt Entwicklung.
- Testpyramide beachten: mehr Unit-Tests, weniger UI-Tests.
- Tests unabhängig und deterministisch halten.
- Wartbarkeit durch klare Testdatenstrategien sichern.
I/O & Ressourcen
- Anforderungen und Akzeptanzkriterien
- Zugänglicher Code und Build-Artefakte
- Testumgebung und Testdaten
- Testberichte und Metriken
- Fehler- und Risikoanalyse
- Freigabeentscheidung oder Rückweisung
Beschreibung
Software Testing ist die systematische Überprüfung von Software, um Fehler zu finden und Qualität sicherzustellen. Es umfasst manuelle und automatisierte Testformen, Testplanung, Ausführung und Bewertung von Ergebnissen. Ziel ist Risikoreduktion und höhere Zuverlässigkeit in Entwicklung und Betrieb. Es ist fundamentaler Bestandteil moderner Softwareentwicklung.
✔Vorteile
- Früherkennung von Fehlern reduziert Kosten für Behebung.
- Verbesserte Zuverlässigkeit und Stabilität des Systems.
- Schnelleres Feedback für Entwickler und Produktentscheidungen.
✖Limitationen
- Vollständige Abdeckung ist selten erreichbar; Residualrisiken bleiben.
- Automatisierung erfordert initialen Aufwand und Pflegekosten.
- Performance-Tests benötigen realistische Umgebungen und Daten.
Trade-offs
Metriken
- Testabdeckung (Coverage)
Anteil des Codes / Anforderungen, der durch Tests abgedeckt ist, zur Abschätzung von Risiko.
- Fehlerdichte
Anzahl gefundener Fehler pro Lokation/Zeiteinheit, zur Priorisierung von Qualitätsaktivitäten.
- Mean Time To Detect (MTTD)
Durchschnittliche Zeit bis zur Entdeckung eines Fehlers nach dessen Einführung.
Beispiele & Implementierungen
Unit-Tests in Microservices
Microservice-Teams nutzen Unit- und Komponententests, um schnelle Feedback-Schleifen sicherzustellen.
UI-Automatisierung mit Selenium
Selenium-Suites übernehmen End-to-End-Checks für kritische Benutzerflüsse.
Lasttests vor Skalierung
Lasttests identifizieren Engpässe und informieren Kapazitätsentscheidungen.
Implementierungsschritte
Teststrategie und Scope definieren
Testfälle entwerfen und priorisieren
Automatisierung umsetzen und in CI integrieren
Regelmäßige Ausführung, Monitoring und Wartung der Tests
⚠️ Technische Schulden & Engpässe
Tech Debt
- Legacy-Tests ohne Struktur und hohen Wartungsbedarf
- Fehlende Testinfrastruktur für reproduzierbare Lasttests
- Manuelle Prüfungen statt automatisierter Checks
Bekannte Engpässe
Beispiele für Missbrauch
- Test-Suites als Sicherheitsnetz statt Qualität von vornherein gestalten
- Automatisierung ohne Wartungsbudget einführen
- Metriken wie Coverage als alleiniges Qualitätsziel verwenden
Typische Fallen
- Blindes Vertrauen in grüne Builds ohne Ergebnisprüfung
- Unzureichende Testdaten führen zu falschem Sicherheitsgefühl
- Tests werden veraltet und liefern keine Aussagekraft mehr
Erforderliche Fähigkeiten
Drivers (Architectural Drivers)
Constraints
- • Zeitdruck in Releases
- • Begrenzte Ressourcen für Testautomatisierung
- • Legacy-Systeme ohne Test-APIs