Systemtests und Performancemessungen
Warum testen wir Software?
- Fehler in Software können hohe Kosten verursachen.
- Tests stellen sicher, dass Anforderungen erfüllt werden und Risiken minimiert werden.
- Überprüfen Funktionalität, Robustheit und Effizienz.
Zitat: "An ounce of prevention is worth a pound of cure." – Benjamin Franklin
Teststufen in der Softwareentwicklung
Teststufe | Ziel | Beispiel | Typischer Tester |
---|---|---|---|
Unit-Test | Test einzelner Funktionen oder Klassen | Methode add(a, b) liefert 5 für 2+3. |
Entwickler |
Integrationstest | Test der Zusammenarbeit mehrerer Module | Prüfen, ob Datenbank und Backend korrekt interagieren. | Entwickler |
Systemtest | Test des gesamten Systems unter realistischen Bedingungen | Benutzer meldet sich an und bestellt ein Produkt. | QA-Team oder Entwickler |
Abnahmetest | Test aus Sicht des Endbenutzers | Kunde prüft, ob die Software seinen Anforderungen entspricht. | Kunde oder QA-Team |
Testvarianten: White-Box, Black-Box und Grey-Box
White-Box-Testing
- Testet die Software mit Wissen über den internen Code.
- Fokus: Kontrollfluss, Schleifen, Verzweigungen und Logik.
- Typisch für Unit-Tests.
-
Beispiel: Prüfen, ob eine Methode in allen Zweigen eines
if-else
korrekt arbeitet.
Black-Box-Testing
- Testet das System nur basierend auf Eingaben und Ausgaben, ohne Wissen über den Code.
- Fokus: Funktionalität.
- Typisch für Systemtests und Abnahmetests.
- Beispiel: Prüfen, ob eine Anmeldung erfolgreich ist, ohne den Code für die Login-Funktion zu kennen.
Grey-Box-Testing
- Kombination aus White-Box und Black-Box.
- Teilweises Wissen über die interne Struktur.
- Fokus: Testen komplexer Systeme mit begrenztem Zugriff auf den Code.
- Beispiel: Prüfen, ob ein Datenbankaufruf korrekt ausgeführt wird, basierend auf Code-Dokumentation.
Code-Abdeckung (Coverage)
Kennzahlen der Code-Abdeckung
-
Anweisungsabdeckung (Statement Coverage):
- Prozentsatz der ausgeführten Anweisungen im Code.
- Ziel: Mindestens 80 % Abdeckung.
-
Zweigabdeckung (Branch Coverage):
- Prüft alle möglichen Verzweigungen (z. B.
if
undelse
). - Ziel: Alle Bedingungen müssen mindestens einmal getestet werden.
- Prüft alle möglichen Verzweigungen (z. B.
-
Pfadabdeckung (Path Coverage):
- Prüft alle möglichen Ausführungspfade.
- Sehr aufwendig und selten vollständig erreichbar.
-
Bedingungsabdeckung (Condition Coverage):
- Prüft alle atomaren Bedingungen in Ausdrücken (z. B.
a > b && b < c
).
- Prüft alle atomaren Bedingungen in Ausdrücken (z. B.
Tools zur Messung der Code-Abdeckung
- JaCoCo: In Maven/IntelliJ integrierbar.
- Cobertura: Generiert detaillierte Berichte.
Warum ist Code-Abdeckung wichtig?
- Hohe Abdeckung zeigt, dass viele Teile des Codes getestet wurden.
- Achtung: 100 % Abdeckung garantiert nicht, dass der Code fehlerfrei ist. Qualität der Tests ist entscheidend!
Wo stehen Systemtests und Performancetests im Gesamtbild?
Systemtests
- Prüfen das vollständige System als Black-Box.
- Ziel: Sicherstellen, dass alle Komponenten korrekt zusammenarbeiten.
- Decken funktionale Anforderungen, Fehlerfälle und Randbedingungen ab.
-
Beispiel:
- End-to-End-Test eines Bestellprozesses in einem Online-Shop.
Performancetests
- Ziel: Überprüfung der Effizienz und Skalierbarkeit des Systems.
- Gehören zu den nicht-funktionalen Tests.
- Decken Latenz, Durchsatz und Ressourcennutzung ab.
-
Beispiel:
- Messung der Antwortzeiten eines RMI-Servers bei 100 gleichzeitigen Anfragen.
Fazit
- Jede Teststufe hat ihre spezifische Rolle und ergänzt die anderen.
- Systemtests und Performancetests sind entscheidend für die Qualität eines gesamten Systems.
- Code-Abdeckung ist ein wertvolles Werkzeug, sollte aber nicht das einzige Qualitätsmaß sein.
Zitat: "Quality is never an accident; it is always the result of intelligent effort." – John Ruskin
Einführung in Systemtests und Performancemessungen
By Harald Haberstroh
Einführung in Systemtests und Performancemessungen
- 60