03 Grundlagen des Testens: Coverage Selbststudium-Leitfaden
December 2025 (956 Words, 6 Minutes)
Code Coverage Selbststudium-Leitfaden
Willkommen
Dieser Leitfaden hilft dir, Code Coverage-Konzepte und -Werkzeuge durch strukturiertes Selbststudium zu meistern. Die Materialien sind für zwei 90-minütige Sitzungen konzipiert, aber du kannst in deinem eigenen Tempo arbeiten.
Was du lernen wirst:
- Was Code Coverage misst und warum es wichtig ist
- Der Unterschied zwischen Statement (C0) und Branch (C1) Coverage
- Wie man Coverage-Reports von pytest-cov liest und interpretiert
- Wie man systematisch Tests entwirft, um die Coverage zu verbessern
- Die Grenzen von Coverage (warum 100% nicht fehlerfrei bedeutet)
Lernpfad-Übersicht
Hinweis zu den Zeitangaben: Die unten angegebenen Dauern dienen nur zur Orientierung. Du musst eine Übung nicht abbrechen, nur weil die vorgeschlagene Zeit abgelaufen ist—nimm dir die Zeit, die du brauchst, um das Material zu verstehen. Ebenso kannst du, wenn du schneller fertig bist, direkt zur nächsten Übung übergehen.
Sitzung 1: Theorie & Analyse (~90 min)
| Schritt | Übung | Dauer | Fokus |
|---|---|---|---|
| 1 | Diesen Leitfaden lesen | 10 min | Orientierung |
| 2 | Coverage Konzepte Quiz | 25 min | Verständnis von C0, C1, Subsumption testen |
| 3 | CFG Tracing Übung | 35 min | Testfälle durch Kontrollflussgraphen verfolgen |
| 4 | Coverage Detective Teil 1 | 20 min | Coverage-Reports analysieren, Lücken identifizieren |
Sitzung 2: Praxis & Anwendung (~90 min)
| Schritt | Übung | Dauer | Fokus |
|---|---|---|---|
| 5 | Coverage Detective Teil 2 | 25 min | Tests für fehlende Branches entwerfen |
| 6 | GitHub Classroom Aufgabe | 65 min | Praxis: Coverage an echtem Code verbessern |
Wie du jede Übung meisterst
Lies vor jeder Übung die angegebenen Vorlesungsabschnitte. Klicke auf die Links, um direkt zum relevanten Material zu springen.
Coverage Konzepte Quiz
Zuerst lesen:
Aus Kapitel 03 (TDD und CI): TDD und CI:
- Teil 2: Das Coverage-Problem - Warum wir Coverage brauchen
- Teil 3: Coverage Reporting einrichten - pytest-cov Grundlagen
- Teil 4: Coverage in CI integrieren - Schwellenwerte und Automatisierung
Aus Kapitel 03 (Testtheorie und Coverage): Testtheorie & Coverage:
- Abschnitt 3: Die Testtheorie - Programm, Modell, Testsuite, Coverage-Kriterium
- Abschnitt 4: Code Coverage (C0 und C1) - Statement vs Branch Coverage, Subsumption
Fokusgebiete: Definitionen, Subsumption-Hierarchie, Coverage-Grenzen
CFG Tracing Übung
Zuerst lesen:
Aus Kapitel 03 (Testtheorie und Coverage): Testtheorie & Coverage:
- Abschnitt 4: Code Coverage (C0 und C1) - CFG-Beispiele, Knoten/Kanten zählen
- Abschnitt 5: Systematischer Testentwurf für Branch Coverage - Tests aus CFGs ableiten
Fokusgebiete: CFGs lesen, Pfade verfolgen, C0 und C1 berechnen
Coverage Detective Übung
Zuerst lesen:
Aus Kapitel 03 (TDD und CI): TDD und CI:
- Teil 3: Coverage Reporting einrichten -
--cov-report=term-missingverstehen
Aus Kapitel 03 (Testtheorie und Coverage): Testtheorie & Coverage:
- Abschnitt 5: Systematischer Testentwurf - Tests für spezifische Branches entwerfen
Fokusgebiete: “Missing”-Zeilen interpretieren, Zeilen auf Bedingungen abbilden, gezielte Tests entwerfen
GitHub Classroom Aufgabe
Aufgaben-Link: Coverage Improvement Übung akzeptieren
Zuerst lesen:
Aus Kapitel 03 (TDD und CI): TDD und CI:
- Teil 4: Coverage in CI integrieren -
--cov-fail-underund GitHub Actions
Voraussetzungen für diese Übung:
- Python 3.12+ installiert
- uv Package Manager installiert
- Git konfiguriert und GitHub-Zugang
Fokusgebiete: Coverage lokal ausführen, Schwellenwert erreichen, CI-Feedback-Schleife
Zusammenfassung der Schlüsselkonzepte
Statement Coverage (C0)
Der Prozentsatz der Code-Anweisungen, die von deinen Tests ausgeführt werden.
def classify(x):
if x > 0: # Anweisung 1
return "pos" # Anweisung 2
else:
return "neg" # Anweisung 3
Nur classify(5) testen → C0 = 2/3 = 67%
Branch Coverage (C1)
Der Prozentsatz der Entscheidungsergebnisse (True/False-Branches), die ausgeführt werden.
Nur classify(5) testen → C1 = 1/2 = 50% (nur True-Branch genommen)
Warum C1 C0 subsumiert
100% Branch Coverage garantiert 100% Statement Coverage, weil das Abdecken aller Branches erfordert, alle Anweisungen innerhalb dieser Branches auszuführen.
Aber umgekehrt gilt das NICHT! Hohe C0 garantiert keine hohe C1.
Häufige Fallstricke
1. 100% Coverage nachjagen
100% Coverage bedeutet NICHT fehlerfreier Code:
def test_bad():
result = calculate_discount(100, True, "VIP")
assert result is not None # Schwache Assertion!
2. Branch Coverage ignorieren
Du kannst 100% C0 haben und trotzdem ganze Branches verpassen:
def process(data, validate=True):
if validate:
check_data(data) # Immer mit validate=True getestet
return transform(data)
3. Coverage ohne Assertions
Code ausführen ist nicht gleich testen - du brauchst aussagekräftige Assertions.
Wie du Feedback bekommst
Während Quizzes und Übungen
- Aufklappbare Antworten - Klicke auf “Antwort anzeigen” nach dem Versuch
- Detaillierte Erklärungen - Verstehe WARUM Antworten korrekt sind
- Bewertungsleitfäden - Selbsteinschätzung deines Verständnisses
In GitHub Classroom
- Sofortiges CI-Feedback - Push und sieh die Coverage-Ergebnisse
- Grüner Haken = 85%+ Coverage erreicht
- Rotes X = Füge mehr Tests hinzu und pushe erneut
Kurzreferenz
pytest-cov Befehle
# Basis-Coverage
uv run pytest --cov=src
# Fehlende Zeilen anzeigen
uv run pytest --cov=src --cov-report=term-missing
# Fehlschlagen wenn unter Schwellenwert
uv run pytest --cov=src --cov-fail-under=80
# Branch Coverage Modus
uv run pytest --cov=src --cov-branch
Coverage Report Spalten
| Spalte | Bedeutung |
|---|---|
| Stmts | Gesamtzahl ausführbarer Anweisungen |
| Miss | Anweisungen NICHT ausgeführt |
| Cover | Prozentsatz ausgeführt |
| Missing | Nicht abgedeckte Zeilennummern |
Wichtige Formeln
Statement Coverage (C0):
\[C0 = \frac{\text{Ausgeführte Anweisungen}}{\text{Gesamte Anweisungen}} \times 100\%\]Branch Coverage (C1):
\[C1 = \frac{\text{Ausgeführte Branches}}{\text{Gesamte Branches}} \times 100\%\]Subsumption:
\(100\% \text{ C1} \Rightarrow 100\% \text{ C0}\) (aber NICHT umgekehrt)
Geschätzte Gesamtzeit
| Komponente | Zeit |
|---|---|
| Dieser Leitfaden | 10 min |
| Coverage Konzepte Quiz | 25 min |
| CFG Tracing Übung | 35 min |
| Coverage Detective Übung | 45 min |
| GitHub Classroom Aufgabe | 65 min |
| Gesamt | ~3 Stunden |
Bereit loszulegen?
- Lies die Vorlesungsabschnitte, die oben für deine erste Übung verlinkt sind
- Versuche die Übung ohne auf Antworten zu schauen
- Überprüfe dein Verständnis mit den aufklappbaren Lösungen
- Gehe zur nächsten Übung wenn du bereit bist
Beginne mit dem Coverage Konzepte Quiz nachdem du die empfohlenen Vorlesungsabschnitte gelesen hast.
Viel Erfolg!