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.
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.