Testverfahren in der Softwareentwicklung#
Softwaretests prüfen, ob ein Programm korrekt funktioniert. Sie helfen, Fehler frühzeitig zu finden und die Qualität zu sichern.
Übersicht der Testarten#
Softwaretests
│
┌──────────────┼──────────────┐
▼ ▼ ▼
Whitebox- Blackbox- Greybox-
Test Test Test
(Code bekannt) (Code unbekannt) (teilweise bekannt)Blackbox-Test#
Der Tester kennt den internen Code nicht – er sieht nur Eingabe und Ausgabe (wie eine schwarze Box).
Eingabe ──► [███████] ──► Ausgabe
(Code
unbekannt)Vorgehen:
- Testfälle werden aus den Anforderungen / Spezifikationen abgeleitet
- Geprüft wird: „Verhält sich das System wie erwartet?"
- Kein Wissen über Algorithmen, Datenstrukturen oder Implementierung nötig
Techniken:
| Technik | Beschreibung | Beispiel |
|---|---|---|
| Äquivalenzklassenanalyse | Eingaben in gleichwertige Gruppen einteilen, eine Eingabe je Gruppe testen | Altersfeld: gültig (18–99), zu jung (<18), zu alt (>99) |
| Grenzwertanalyse | Werte an den Grenzen testen (oft fehleranfällig) | Für Bereich 18–99: testen mit 17, 18, 99, 100 |
| Zustandsbasiertes Testen | Systemzustände und Übergänge testen | Login: angemeldet/abgemeldet, gesperrt |
Wer testet: QA-Tester, Kunden, externe Tester
| Vorteile | Nachteile |
|---|---|
| Kein Code-Wissen nötig | Innere Logik wird nicht geprüft |
| Testet aus Nutzerperspektive | Testabdeckung unklar |
| Unabhängig von Implementierung | Redundante Tests möglich |
Whitebox-Test#
Der Tester kennt den kompletten Quellcode und testet gezielt interne Strukturen und Logikpfade.
Eingabe ──► [if x > 0 ] ──► Ausgabe
[ return x ]
[else ]
[ return -x ]
(Code bekannt)Vorgehen:
- Testfälle werden direkt aus dem Code abgeleitet
- Ziel: Alle Pfade, Verzweigungen und Schleifen mindestens einmal durchlaufen
- Misst Codeabdeckung (Code Coverage)
Coverage-Arten:
| Coverage-Typ | Ziel | Beispiel |
|---|---|---|
| Statement Coverage | Jede Codezeile mind. einmal ausführen | 100% = alle Zeilen getestet |
| Branch Coverage | Jede Verzweigung (if/else) in beide Richtungen testen | if-Zweig UND else-Zweig |
| Path Coverage | Jeden möglichen Ausführungspfad testen | Alle Kombinationen von Verzweigungen |
Beispiel: Testfälle für Whitebox
def berechne_rabatt(preis, menge):
if menge >= 10: # Branch 1: True
return preis * 0.9 # → Testfall: menge=10
else: # Branch 1: False
return preis # → Testfall: menge=5Mindestens 2 Testfälle für 100% Branch Coverage:
berechne_rabatt(100, 10)→ erwartet: 90berechne_rabatt(100, 5)→ erwartet: 100
Wer testet: Entwickler selbst
| Vorteile | Nachteile |
|---|---|
| Interne Logik wird vollständig geprüft | Erfordert Code-Kenntnis |
| Ungenutzte Codepfade werden gefunden | Kein Test aus Nutzerperspektive |
| Messbare Testabdeckung | Aufwendig bei komplexem Code |
Greybox-Test#
Kombination aus Black- und Whitebox: Tester hat teilweise Einblick in den Code (z.B. Datenbankstruktur, API-Dokumentation, Architekturwissen).
Typischer Einsatz: Integrationstests, Sicherheitstests (Penetrationstests)
Unittest (Modultest)#
Ein Unittest (auch: Komponenten- oder Modultest) testet eine einzelne Funktion oder Klasse isoliert von anderen Systemteilen.
System
├── Modul A ← isoliert testen
├── Modul B ← isoliert testen
└── Modul C ← isoliert testenEigenschaften:
- Testet die kleinste testbare Einheit (eine Funktion, eine Methode)
- Läuft automatisiert (kein manueller Aufwand nach dem Schreiben)
- Unabhängig von Datenbank, Netzwerk, anderen Modulen (ggf. mit Mocks/Stubs)
- Sehr schnell ausführbar
Beispiel (Python mit unittest):
import unittest
def addiere(a, b):
return a + b
class TestAddiere(unittest.TestCase):
def test_positive_zahlen(self):
self.assertEqual(addiere(2, 3), 5)
def test_negative_zahlen(self):
self.assertEqual(addiere(-1, -1), -2)
def test_null(self):
self.assertEqual(addiere(0, 5), 5)Aufbau eines Testfalls (AAA-Pattern):
Arrange → Testdaten vorbereiten
Act → Funktion aufrufen
Assert → Ergebnis prüfen (assertEqual, assertTrue, ...)| Vorteile | Nachteile |
|---|---|
| Frühe Fehlererkennung | Schreiben dauert Zeit |
| Automatisierbar (CI/CD) | Testet keine Zusammenspiele |
| Dokumentiert erwartetes Verhalten | Mocking komplexer Abhängigkeiten aufwendig |
| Refactoring sicherer |
Teststufen im Überblick#
▲ Systemtest (ganzes System, Blackbox)
│ Integrationstest (Zusammenspiel mehrerer Module)
│ Unittest (einzelne Funktion, Whitebox)
└──────────────────────────────────────────────
Je höher, desto mehr Komponenten beteiligt
Je niedriger, desto schneller und isolierter| Teststufe | Was wird getestet | Wer testet | Methode |
|---|---|---|---|
| Unittest | Einzelne Funktion/Klasse | Entwickler | Whitebox |
| Integrationstest | Zusammenspiel von Modulen | Entwickler / QA | Grey-/Whitebox |
| Systemtest | Gesamtes System | QA / Tester | Blackbox |
| Abnahmetest (UAT) | Erfüllung der Anforderungen | Kunde / Auftraggeber | Blackbox |
Vergleich: Black- vs. Whitebox vs. Unittest#
| Blackbox | Whitebox | Unittest | |
|---|---|---|---|
| Code-Kenntnis | Nicht nötig | Vollständig | Vollständig |
| Perspektive | Nutzer | Entwickler | Entwickler |
| Testobjekt | Gesamtes Feature | Codepfade | Einzelne Funktion |
| Automatisierbar | Teilweise | Ja | Ja |
| Findet | Funktionale Fehler | Logikfehler, tote Pfade | Fehler in Einzelfunktionen |
Prüfungsbeispiele#
„Eine Funktion soll Zahlen von 1–100 akzeptieren. Welche Testfälle würde die Grenzwertanalyse vorschlagen?"
→ Testfälle: 0 (ungültig), 1 (Untergrenze), 2 (knapp über Untergrenze), 99 (knapp unter Obergrenze), 100 (Obergrenze), 101 (ungültig) – die Grenzen und ihre direkte Umgebung.
„Was ist der Unterschied zwischen einem Blackbox-Test und einem Unittest?"
→ Blackbox-Test: Tester kennt den Code nicht, testet aus Nutzersicht anhand der Spezifikation. Unittest: Entwickler kennt den Code, testet eine einzelne Funktion isoliert auf korrekte Logik.
„Warum sind automatisierte Unittests besonders wertvoll bei der Weiterentwicklung von Software?"
→ Bei jeder Änderung können alle Tests sofort erneut ausgeführt werden (Regressionstests) – so werden neu eingeführte Fehler sofort erkannt, ohne manuell alles neu testen zu müssen.
Siehe auch#
- softwaredokumentation — Unittests dokumentieren gleichzeitig das erwartete Verhalten (lebende Dokumentation)
- uml — Aktivitätsdiagramme helfen, Testfälle (Pfade) zu identifizieren
- [[../09_projektmanagement/agile_methoden]] — Testgetriebene Entwicklung (TDD) und CI/CD in agilen Projekten
- [[../06_it-sicherheit/schutzbedarfsanalyse_ISMSLF4]] — Sicherheitstests (Penetrationstests) als Greybox-Tests
Ressourcen#
- Wikipedia: Softwaretest
- Wikipedia: Black-Box-Test
- Wikipedia: White-Box-Test
- Studyflix: Softwaretest Blackbox Whitebox einfach erklärt
- SimpleClub: Testverfahren Softwareentwicklung auf YouTube suchen