03 Quiz: Coverage Konzepte
Anleitung
Dieses Quiz testet dein Verständnis der Code Coverage-Konzepte aus den Vorlesungen 6 und 7.
Vorbereitung: Zuerst lesen
Bevor du dieses Quiz versuchst, studiere die folgenden Vorlesungsabschnitte:
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
Warum dieses Quiz machen?
Für dein Lernen:
- Selbsteinschätzung: Identifiziere Bereiche, in denen du ein gutes Verständnis hast, und Themen, die Wiederholung brauchen
- Prüfungsvorbereitung: Das Quizformat und die Schwierigkeit spiegeln wider, was du in der Abschlussprüfung erwarten kannst
- Sofortiges Feedback: Erhalte sofort Rückmeldung zu deinen Antworten
- Aktives Erinnern: Dich selbst zu testen ist eine der effektivsten Lerntechniken
Richtlinien:
- Jede Frage hat 4 Optionen mit genau einer richtigen Antwort
- Versuche zuerst zu antworten, ohne auf die Vorlesungsmaterialien zu schauen
- Melde dich mit GitHub an, um deinen Fortschritt zu speichern
- Oder fahre als Gast fort (Fortschritt wird nicht gespeichert)
Bewertungsleitfaden
- 18-20 richtig: Ausgezeichnet! Starkes Verständnis von Coverage-Konzepten
- 15-17 richtig: Gutes Verständnis! Wiederhole die Bereiche, die du verpasst hast
- 12-14 richtig: Ausreichendes Verständnis. Schau dir die Vorlesungsmaterialien noch einmal an
- 9-11 richtig: Wiederholung nötig. Konzentriere dich auf Grundlagen
- Unter 9: Bitte wiederhole Vorlesungen 6 und 7 sorgfältig
Statement Coverage (C0) misst:
Branch Coverage (C1) misst:
Ein Coverage-Kriterium ist:
Wenn wir sagen “C1 subsumiert C0,” meinen wir:
Eine Testsuite ist “angemessen” nach einem Coverage-Kriterium, wenn:
Betrachte diesen Code:
def check(value):
if value > 0:
return "positive"
else:
return "negative"
Warum gibt das Erreichen von 100% C1 automatisch 100% C0?
Gegeben dieser Code und Test:
def categorize(score):
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
else:
return "F"
# Test:
def test_high_score():
assert categorize(95) == "A"
Was ist die Statement Coverage (C0)?
Mit dem gleichen categorize-Code mit diesen Tests:
def test_scores():
assert categorize(95) == "A"
assert categorize(85) == "B"
Was ist die Branch Coverage (C1)?
Gegeben diese pytest-cov Ausgabe:
Name Stmts Miss Cover Missing
-----------------------------------------------
src/utils.py 24 6 75% 18-20, 35-37
-----------------------------------------------
Was sagt dir “Missing: 18-20, 35-37”?
Gegeben dieser Code (mit Zeilennummern):
1: def validate(value):
2: if value is None:
3: return "Error"
4: if value < 0:
5: return "Negative"
6: if value == 0:
7: return "Zero"
8: return "Positive"
Und dieser Coverage Report: Missing: 3, 7
Welche Bedingungen waren NIEMALS True während des Testens?
Eine Testsuite erreicht 100% Statement Coverage. Das bedeutet:
Betrachte diesen Test:
def calculate_total(items, discount_percent):
total = sum(items)
if discount_percent > 0:
discount = total * (discount_percent / 100)
total = total - discount
return total
def test_calculate_total():
result = calculate_total([10, 20, 30], 10)
assert result > 0 # Was ist falsch?
Was ist das Problem mit diesem Test?
Welchen der folgenden Bugs würde 100% Statement Coverage wahrscheinlich VERPASSEN?
In welcher Situation könnte 70% Coverage völlig akzeptabel sein?
Welche Aussage beschreibt am besten die Beziehung zwischen Coverage und Korrektheit?
Gegeben dieser Code (mit Zeilennummern):
1: def classify_age(age):
2: if age < 0:
3: return "Invalid"
4: elif age < 18:
5: return "Minor"
6: elif age < 65:
7: return "Adult"
8: else:
9: return "Senior"
Dein Coverage Report zeigt, dass Zeile 9 fehlt. Welcher Test würde sie abdecken?
Gegeben dieser Code und Coverage Report:
1: def calculate_shipping(weight, express=False):
2: if weight <= 0:
3: raise ValueError("Invalid")
4:
5: base_cost = weight * 2.0
6:
7: if express:
8: return base_cost * 1.5
9: return base_cost
Coverage Report: Fehlende Zeilen 3, 8
Um BEIDE fehlenden Zeilen abzudecken, brauchst du Tests mit welchen Eingaben?
Gegeben diese pytest-cov Ausgabe mit aktivierter Branch Coverage:
Name Stmts Miss Branch BrPart Cover
----------------------------------------------------
src/validator.py 20 2 10 3 82%
----------------------------------------------------
Was bedeutet “BrPart: 3”?
Dein Team richtet eine CI-Pipeline für ein Finanztransaktionssystem ein. Welcher Coverage-Schwellenwert ist am angemessensten?
Warum Coverage-Checks in eine CI/CD-Pipeline integrieren?