Zweigüberdeckung

Was ist Zweigüberdeckung?

Die Zweigüberdeckung (engl. Branch Coverage) ist ein Maß für die Qualität von Softwaretests im White-Box-Testing. Sie gibt an, wie viele der möglichen Verzweigungen im Programmcode tatsächlich durch eine Menge von Testfällen ausgeführt wurden.

Eine 100% Zweigüberdeckung bedeutet, dass alle möglichen Entscheidungen des Codes (true/false-Pfade) mindestens einmal getestet wurden. Damit ist auch automatisch eine vollständige Entscheidungs- und Anweisungsüberdeckung erreicht.

Beispiel für Zweigüberdeckung

Betrachten wir folgenden Pseudocode:

if (x > 0) {
if (x > 10) {
Ausgabe = "Groß";
} else {
Ausgabe = "Mittel";
}
} else {
Ausgabe = "Klein oder negativ";
}

Um 100% Zweigüberdeckung zu erreichen, sind mindestens drei Testfälle notwendig:

  1. x = -5 → Zweig „else“
  2. x = 5 → Zweig „if (x > 0)“ UND „else“ im inneren Block
  3. x = 15 → Zweig „if (x > 0)“ UND „if (x > 10)“

Damit wurden alle möglichen Verzweigungen (true/false-Ausgänge) einmal durchlaufen.

Vorteile der Zweigüberdeckung

  • Liefert ein objektives Maß für die Testqualität.
  • Hilft, ungetestete Teile der Programmlogik zu identifizieren.
  • Höhere Abdeckung als reine Anweisungsüberdeckung.

Nachteile der Zweigüberdeckung

  • Kein Garant für Fehlerfreiheit: Auch bei 100% Zweigüberdeckung können logische Fehler unentdeckt bleiben.
  • Aufwand steigt mit der Komplexität des Codes (besonders bei vielen verschachtelten Bedingungen).
  • Deckt nicht alle möglichen Pfade ab – dafür wäre Pfadüberdeckung nötig.

Tipps für die Praxis

  • Abdeckung messen: Nutze Test-Tools, die Branch Coverage automatisch berechnen (z. B. in gängigen Unit-Test-Frameworks integriert).
  • Schrittweise verbessern: Setze realistische Ziele, z. B. erst 70%, dann 90% Abdeckung.
  • Kritische Stellen priorisieren: Fokus auf Codebereiche mit hoher Risikorelevanz oder hoher Komplexität.
  • Kombinieren: Zweigüberdeckung ist wichtig, aber sollte mit funktionalen Tests (Black-Box-Tests) kombiniert werden, um auch die Anforderungen der Anwender abzudecken.