Qualität

Softwaretests

Diese Seite enthält prüfungsrelevantes Wissen zu verschiedenen Testarten, Testprinzipien und Testverfahren in der Softwareentwicklung.

Softwaretests dienen dazu, Fehler frühzeitig zu erkennen und die Qualität von Software sicherzustellen. Dabei kommen unterschiedliche Testarten, -ebenen und -verfahren zum Einsatz.


Komponententests (Unit Tests)

Komponententests prüfen einzelne, isolierte Bausteine des Programmcodes – typischerweise Methoden oder Klassen. Sie gehören zur untersten Testebene.

Merkmale:

  • Isolation: Getestete Komponente wird ohne Abhängigkeiten (z. B. Datenbank, andere Klassen) geprüft.
  • Automatisierbar: Werden oft mit Testing-Frameworks wie JUnit (Java), NUnit (.NET), pytest (Python) umgesetzt.
  • Schnell & häufig auszuführen: Besonders in Continuous-Integration-Umgebungen wichtig.

Ziel:

  • Sicherstellen, dass eine Komponente bei bekannten Eingaben die erwarteten Ausgaben liefert.
  • Frühzeitige Fehlererkennung im Entwicklungsprozess.

FIRST-Prinzip

Das FIRST-Prinzip beschreibt gute Eigenschaften eines Unit Tests:

  • Fast – schnell ausführbar
  • Isolated – unabhängig von anderen Tests
  • Repeatable – reproduzierbar, konsistent
  • Self-validating – liefert klares Ergebnis (bestanden/nicht bestanden)
  • Timely – zeitnah zur Entwicklung geschrieben

Funktionstests

Funktionstests prüfen, ob die Software-Funktionen den fachlichen Anforderungen entsprechen – unabhängig von der technischen Umsetzung.

Merkmale:

  • Black-Box-orientiert: Tester kennt die interne Implementierung nicht.
  • Anforderungsbezogen: Grundlage sind z. B. User Stories oder fachliche Spezifikationen.
  • Schnittstellenbasiert: Getestet werden APIs, GUI-Interaktionen oder Benutzerfunktionen.

Ziel:

  • Validierung der Funktionalität aus Sicht des Endnutzers oder der Fachabteilung.
  • Sicherstellung, dass alle Use Cases korrekt umgesetzt sind.

Integrationstests

Integrationstests prüfen das Zusammenspiel mehrerer Komponenten oder Systeme. Dabei liegt der Fokus auf den Schnittstellen und deren Kommunikation.

Merkmale:

  • Teilweise White-Box-orientiert: Kenntnis über die Architektur und Verbindungen zwischen Modulen ist notwendig.
  • Systemübergreifend: Kann Datenbankanbindung, externe Dienste oder Subsysteme einbeziehen.
  • Komplexität: Höher als bei Komponententests – mehr Setup erforderlich.

Ziel:

  • Aufdecken von Fehlern im Zusammenspiel, wie z. B. falscher Datenfluss, Timing-Probleme oder inkompatible Schnittstellen.
  • Validierung technischer Integrität des Systems.

Systemtests (End to End-Tests)

Der Systemtest überprüft das Gesamtsystem als Black Box in einer möglichst realistischen Umgebung. Er ist eine der letzten Teststufen vor der Abnahme und testet alle funktionalen und nicht-funktionalen Anforderungen in ihrer Gesamtheit.

Merkmale:

  • End-to-End-Prüfung: Die gesamte Anwendung wird aus Benutzersicht getestet.
  • Black-Box-orientiert: Fokus liegt auf Verhalten, nicht auf der Implementierung.
  • Testumgebung: Findet oft auf einem Staging-System statt, das der Produktion möglichst ähnelt.
  • Beteiligung: Häufig durch Qualitätssicherung, Tester oder Product Owner durchgeführt.

Ziel:

  • Sicherstellen, dass das gesamte System wie spezifiziert funktioniert.
  • Validierung der Betriebsfähigkeit (z. B. bei Release-Vorbereitung).
  • Nachweis, dass alle Komponenten im Verbund korrekt arbeiten.

Typische Testinhalte:

  • Benutzeroberflächen & Workflows
  • Rechte- und Rollenkonzepte
  • Datenflüsse & Speicherungen
  • Fehlerverhalten und Ausfallsicherheit
  • Integration mit externen Systemen
Systemtests sind abnahmerelevant und dienen der Gesamtvalidierung vor dem Go-Live.

Staging Testing

Staging bezeichnet eine Testumgebung, die der Produktionsumgebung möglichst ähnlich ist. Hier wird das System als Ganzes getestet, bevor es in den Live-Betrieb überführt wird. Ziel: realitätsnahe Tests ohne Risiko für den Betrieb.


Performance Testing

Testet die nicht-funktionalen Eigenschaften wie:

  • Antwortzeit
  • Durchsatz (Anfragen/Sekunde)
  • Ressourcenverbrauch (Speicher, CPU)

Regressionstest

Überprüfung, ob neue Änderungen bestehende Funktionalitäten unbeabsichtigt beeinflussen. Wird typischerweise nach Bugfixes oder neuen Features durchgeführt.


Black Box & White Box Testing

  • Black Box Testing: Test ohne Kenntnis des Quellcodes. Fokus auf Eingaben/Ausgaben (funktional).
  • White Box Testing: Test mit Einsicht in den Code. Fokus auf interne Abläufe, Kontrollflüsse und Logik.

Extremwerttest

Test mit minimalen, maximalen und außerhalb des gültigen Bereichs liegenden Werten. Ziel: Stabilität bei Randbedingungen prüfen.


Statische & dynamische Testverfahren

  • Statisch: Analyse des Codes ohne Ausführung (z. B. Code Reviews, Linting, statische Analyse).
  • Dynamisch: Test durch Ausführen des Codes (z. B. Unit Tests, Systemtests).