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

  1. Anweisungsabdeckung (Statement Coverage):
    • Prozentsatz der ausgeführten Anweisungen im Code.
    • Ziel: Mindestens 80 % Abdeckung.
  2. Zweigabdeckung (Branch Coverage):
    • Prüft alle möglichen Verzweigungen (z. B. if und else).
    • Ziel: Alle Bedingungen müssen mindestens einmal getestet werden.
  1. Pfadabdeckung (Path Coverage):
    • Prüft alle möglichen Ausführungspfade.
    • Sehr aufwendig und selten vollständig erreichbar.
  2. Bedingungsabdeckung (Condition Coverage):
    • Prüft alle atomaren Bedingungen in Ausdrücken (z. B. a > b && b < c).

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