Was ist Zweigabdeckung (Branch Coverage)?

Abdeckungskriterium des White-Box-Tests, das verlangt, dass sowohl der wahre als auch der falsche Zweig jeder Entscheidung (etwa einer if-Anweisung) in einem Programm mindestens einmal ausgeführt wird. Es heißt auch Entscheidungsabdeckung oder C1 und ist stärker als die Anweisungsabdeckung (C0), die verlangt, dass jede Anweisung mindestens einmal ausgeführt wird.

Japanische Bezeichnung: 分岐網羅

„Zweigabdeckung (Branch Coverage)“ kommt in 2 Übungsfragen aus 1 Themen vor, z. B. Softwareentwicklung und Projektmanagement.

Fachgebiet: Softwareentwicklung und Projektmanagement

Unterschied zur Anweisungsabdeckung

Anweisungsabdeckung (C0) ist erreicht, sobald jede Anweisung mindestens einmal ausgeführt wurde. Bei if (a) { S1; } ohne else führt ein einziger Testfall mit wahrem a die Anweisung S1 aus und erreicht Anweisungsabdeckung, doch der Zweig, in dem a falsch ist und die Ausführung einfach weitergeht, wird nie ausgeführt. Die Zweigabdeckung (C1) verlangt auch diese falsche Seite und macht es so leichter, Fehler wie eine fehlende Verarbeitung zu finden, die bei falschem a nötig wäre. Wer Zweigabdeckung erreicht, erreicht auch Anweisungsabdeckung.

Beziehung zur Bedingungsabdeckung und zu zusammengesetzten Bedingungen

Besteht eine Entscheidung aus mehreren Bedingungen, wie bei „A und B“, verlangt die Bedingungsabdeckung, dass jede einzelne Bedingung sowohl wahr als auch falsch ist. Die beiden Testfälle (A = wahr, B = falsch) und (A = falsch, B = wahr) erreichen Bedingungsabdeckung, doch die Entscheidung ist in beiden falsch, sodass keine Zweigabdeckung erreicht wird. Daher werden Kriterien wie die Entscheidungs-/Bedingungsabdeckung, die beides erfüllt, und MC/DC (Modified Condition/Decision Coverage) verwendet, die prüft, ob jede Bedingung das Ergebnis der Entscheidung unabhängig beeinflusst. MC/DC wird in DO-178C, dem Standard für Software in Luftfahrzeugen, für die höchste Sicherheitsstufe verlangt und in ISO 26262, der Norm für funktionale Sicherheit von Straßenfahrzeugen, bei ASIL D ebenfalls dringend empfohlen.

Abdeckungswerte richtig lesen

Die Abdeckung wird als Zahl der ausgeführten Zweige ÷ Gesamtzahl der Zweige angegeben und lässt sich mit Funktionen von Compilern oder Testwerkzeugen messen. Selbst 100 % Abdeckung finden keine Verarbeitung, die in der Spezifikation steht, aber nie implementiert wurde, und keine Fehler, deren Ergebnisse von Werten abhängen. Die Abdeckung dient als Werkzeug, um die Teile zu finden, die Tests nicht durchlaufen haben, und wird mit Black-Box-Tests kombiniert. Dieselbe Idee wird in der Hardwareverifikation als RTL-Code-Coverage verwendet.

Jetzt üben: Fragen zu Zweigabdeckung (Branch Coverage)

Die Wahrheitswerte von a, b und c lassen sich unabhängig voneinander wählen. Wie viele Testfälle sind für den Code „if (a) { S1; } if (b) { S2; } if (c) { S3; }“ mindestens nötig, um Zweigabdeckung zu erreichen (das wahre und das falsche Ergebnis jeder Entscheidung mindestens einmal auszuführen)?

  1. A1
  2. B2
  3. C8
Antwort und Erläuterung anzeigen

Antwort: B. 2

Jede der drei Entscheidungen muss in beide Richtungen durchlaufen werden, wahr und falsch. Mit den beiden Testfällen (a, b und c alle wahr) und (alle falsch) werden das wahre und das falsche Ergebnis jeder Entscheidung je einmal ausgeführt; das Minimum ist also 2. Ein einzelner Testfall (alle wahr) führt alle Anweisungen S1 bis S3 aus und erreicht damit Anweisungsabdeckung, doch die falschen Zweige (die Pfade, die nichts tun und weitergehen) werden nicht ausgeführt. 8 ist die Zahl aller 2³ = 8 Kombinationen von wahr und falsch.

Häufige Fragen

Was bedeuten C0 und C1?

Es sind Kurzbezeichnungen für Abdeckungskriterien: C0 ist die Anweisungsabdeckung (jede Anweisung mindestens einmal ausgeführt) und C1 die Zweigabdeckung (die wahre und die falsche Seite jedes Zweigs mindestens einmal ausgeführt). Wer C1 erreicht, erreicht auch C0.

Sollte 100 % Zweigabdeckung das Ziel sein?

Bei sicherheitsrelevanter Software können Normen oder Unternehmensregeln Ziele für Zweigabdeckung oder MC/DC vorgeben. Ansonsten ist es wichtiger, statt auf 100 % zu beharren, bei jedem nicht ausgeführten Zweig zu prüfen, ob er wirklich unnötig ist oder ob Tests fehlen. Code, der nur in Ausnahmesituationen läuft, muss etwa durch Fehlerinjektion getestet werden.

„Zweigabdeckung (Branch Coverage)“ in den Erläuterungen

Fragen mit „Zweigabdeckung (Branch Coverage)“ (2)

  1. Die Wahrheitswerte von a, b und c lassen sich unabhängig voneinander wählen. Wie viele Testfälle sind für den Code „if (a) { S1; } if (b) { S2; } if (c) { S3; }“ mindestens nötig, um Zweigabdeckung zu erreichen (das wahre und das falsche Ergebnis jeder Entscheidung mindestens einmal auszuführen)?
  2. Für die Entscheidung „A und B“ (A und B sind Bedingungen, deren Wahrheitswerte sich unabhängig festlegen lassen) wurden die beiden Testfälle (A = wahr, B = falsch) und (A = falsch, B = wahr) ausgeführt. Welche Aussage über die Abdeckungskriterien ist richtig?

Verwandte Begriffe

Kurzschlussauswertung (Short-Circuit Evaluation) Agile Softwareentwicklung Äquivalenzklassenbildung (Equivalence Partitioning) Black-Box-Test CI/CD (Continuous Integration und Continuous Delivery) Earned-Value-Management (EVM) Grenzwertanalyse (Boundary Value Analysis) Methode des kritischen Pfads (CPM) Scrum SLA (Service Level Agreement)

Zur Glossarübersicht