In vielen Projekten taucht früher oder später eine Kennzahl auf, die vermeintlich Auskunft über die Qualität der Tests geben soll: Code Coverage. Aussagen wie „Wir haben 80 % Coverage“ klingen zunächst beruhigend – doch was steckt wirklich dahinter?
In dieser Kalenderwoche möchte ich auf meinem Blog erklären, was Code Coverage ist, wie sie gemessen wird und warum hohe Prozentwerte allein keine gute Teststrategie ersetzen.
Was ist Code Coverage bzw. Testabdeckung?
Code Coverage beschreibt, welcher Anteil des Quellcodes während automatisierter Tests ausgeführt wird. Sie wird in der Regel als Prozentwert angegeben.
Beispiel:
- Eine Anwendung hat 100 Codezeilen
- Tests führen 75 dieser Zeilen aus
- → Code Coverage: 75 %
Wichtig ist: Code Coverage misst Ausführung, nicht Korrektheit. Ein Test kann Code ausführen, ohne dessen Verhalten sinnvoll zu prüfen.
Arten von Code Coverage
Code Coverage ist nicht gleich Code Coverage. Je nach Tool und Sprache werden unterschiedliche Metriken verwendet:
Statement Coverage
Misst, welche Anweisungen im Code ausgeführt wurden.
Beispiel: Eine if-Anweisung zählt als abgedeckt, sobald sie einmal ausgeführt wird – unabhängig vom Ergebnis.
Branch Coverage
Misst, ob alle Verzweigungen (true/false) durchlaufen wurden.
Beispiel: Eine if-Bedingung gilt erst als vollständig abgedeckt, wenn beide Pfade getestet sind.
Condition Coverage
Betrachtet komplexe Bedingungen mit mehreren logischen Ausdrücken.
Beispiel: (a && b) – beide Teile müssen separat true/false sein.
Function / Method Coverage
Misst, ob Methoden oder Funktionen mindestens einmal aufgerufen wurden.
Line Coverage
Eine der bekanntesten Formen: Misst, welche Codezeilen ausgeführt wurden.
Warum ist Code Coverage überhaupt wichtig?
Richtig eingesetzt, kann Code Coverage wertvolle Hinweise liefern:
- Ungetesteter Code wird sichtbar
- Legacy-Code kann schrittweise abgesichert werden
- Refactorings werden sicherer
- CI-Pipelines erhalten objektive Qualitätsmetriken
Gerade bei Testautomatisierung hilft Code Coverage, blinde Flecken im Code frühzeitig zu erkennen.
Die größte Falle: Coverage ≠ Qualität
Ein häufiger Irrtum:
„Hohe Code Coverage bedeutet gute Tests.“
Das ist leider falsch.
Ein extremes Beispiel:
- Ein Test ruft jede Methode einmal auf
- Es gibt keine Assertions
- → Code Coverage: 100 %
- → Testqualität: praktisch 0
Code Coverage beantwortet nur eine Frage:
Wurde der Code ausgeführt?
Nicht:
- Wurde das richtige Verhalten geprüft?
- Wurden Fehlerfälle getestet?
- Wurden Randfälle berücksichtigt?
Warum hohe Zahlen trügen können

Hohe Code-Coverage-Werte, überwacht über Tools wie SonarQube, vermitteln oft ein trügerisches Gefühl von Qualität. Code Coverage misst lediglich, welcher Code während Tests ausgeführt wird, nicht jedoch, ob das Verhalten der Software korrekt geprüft wird.
Tests ohne Assertions, Mocks ohne Verifikation oder triviale Tests wie Getter- und Setter-Prüfungen können zu 100 % Coverage führen, ohne reale Bugs oder fehlerhafte Logik aufzudecken.
Wird Code Coverage als Ziel definiert, entsteht der Anreiz, Tests für Zahlen statt für Qualität zu schreiben, was langfristig Wartbarkeit und Aussagekraft der Test-Suite verschlechtert.
Sinnvolle Softwarequalität entsteht nicht durch das Erzwingen hoher Prozentwerte, sondern durch verhaltensbasierte Tests, saubere Assertions und Praktiken wie Test-Driven Development – Code Coverage sollte dabei als Analysewerkzeug verstanden werden, nicht als Qualitätsmaßstab.
Praktische Beispiele aus der Testautomatisierung
Beispiel 1: Unit Tests
Ein Service enthält eine Methode zur Rabattberechnung:
- Test 1: Kunde mit Rabatt → true-Zweig
- Test 2 fehlt: Kunde ohne Rabatt → false-Zweig
→ Statement Coverage hoch, Branch Coverage unvollständig.
Beispiel 2: API Tests
Ein API-Test prüft nur den Statuscode 200.
- Validierung der Response-Struktur fehlt
- Fehlerfälle (400, 401, 500) fehlen
→ Gute Coverage, aber geringe Aussagekraft.
Beispiel 3: UI Tests
Ein End-to-End-Test durchläuft einen kompletten Bestellprozess.
- Viel Code wird indirekt ausgeführt
- Edge Cases bleiben ungetestet
→ Hohe Coverage, aber kaum gezielte Absicherung einzelner Logiken.
Was ist eine „gute“ Code Coverage?
Die ehrliche Antwort: Es gibt keinen magischen Prozentwert.
Als grobe Orientierung:
- Unit Tests: 70–90 %
- Integrationstests: Fokus auf kritische Pfade
- E2E-Tests: Coverage zweitrangig
Wichtiger als die Zahl ist die Frage:
Welche Risiken decken meine Tests ab?
Best Practices im Umgang mit Code Coverage
- Coverage als Werkzeug, nicht als Ziel
Nutze sie zur Analyse – nicht als KPI. - Kritischen Code priorisieren
Business-Logik, Sicherheitsfunktionen, Zahlungsprozesse zuerst. - Branch Coverage berücksichtigen
Nicht nur „grüne Balken“, sondern echte Entscheidungslogik testen. - Coverage-Grenzen sinnvoll setzen
CI-Gates können helfen, sollten aber realistisch sein. - Tests regelmäßig reviewen
Coverage steigt nicht automatisch mit guter Testqualität.
Coverage-Reports als Analysewerkzeug nutzen
Mit zunehmender Größe einer Test-Suite verliert man schnell den Überblick darüber, welche Teile der Anwendung tatsächlich durch Tests abgesichert sind. Ein fehlgeschlagener Build zeigt zwar, dass etwas kaputt ist, sagt aber nichts darüber aus, welche Komponenten zuverlässig getestet wurden und wo noch Risiken bestehen.
Genau hier kommen Coverage-Reports ins Spiel, die von Tools wie JaCoCo, Istanbul/nyc, Coverage.py oder Analyseplattformen wie SonarQube, Codecov und Coveralls erzeugt werden. Sie machen sichtbar, welcher Code gar nicht oder nur teilweise ausgeführt wird, und helfen Teams dabei, gezielt kritische Lücken in der Testabdeckung zu identifizieren. R
ichtig eingesetzt, dienen Coverage-Reports nicht dazu, möglichst hohe Prozentwerte zu erzwingen, sondern als Entscheidungsgrundlage, um relevante Geschäftslogik, komplexe Verzweigungen oder besonders fehleranfällige Bereiche gezielt mit sinnvollen Tests abzusichern.

Fazit
Code Coverage ist ein nützliches Analysewerkzeug – aber kein Qualitätsbeweis. Sie hilft dabei, ungetesteten Code sichtbar zu machen, ersetzt jedoch kein durchdachtes Testdesign.
Gute Testautomatisierung entsteht durch:
- klare Testziele
- sinnvolle Assertions
- Risiko-basiertes Testen
Mein Leitsatz:
Lieber 70 % Coverage mit guten Tests als 95 % mit sinnlosen.
Weiterführende Links
FAQ
Was ist Code Coverage?
Code Coverage misst, welcher Anteil des Codes während automatisierter Tests ausgeführt wird.
Ist hohe Code Coverage automatisch gut?
Nein. Sie zeigt nur, dass Code ausgeführt wurde – nicht, dass er korrekt getestet ist.
Welche Coverage ist sinnvoll?
Das hängt vom Testlevel ab. Unit Tests profitieren stark davon, bei E2E-Tests ist sie weniger relevant.
Sollte man Coverage-Ziele erzwingen?
Nur mit Bedacht. Unrealistische Ziele führen oft zu schlechten Tests.
Was ist wichtiger als Code Coverage?
Testdesign, sinnvolle Assertions und risikobasiertes Testen.