Software-Test Fünf Irrtümer über Code Coverage

Autor / Redakteur: Frank Büchner* / Martina Hafner

Test-Ingenieur Frank Büchner spricht jobbedingt mit vielen Softwareentwicklern, die sich mit dem Thema Code Coverage auseinander setzen müssen. Für ESE Report hat er die häufigsten Irrtümer gesammelt. Acht Mißverständnisse zu Code Coverage konnten Sie im Januar in Teil eins unseres Zweiteilers lesen, fünf weitere lesen Sie hier.

Anbieter zum Thema

Irrtum 9: Code-Coverage misst die Qualität der Testfälle

Nicht immer. Als Beispiel betrachten wir eine Funktion, die den Sinus berechnet. Für die Funktion in Bild 1 genügt ein einziger Testfall, beispielsweise mit dem Eingabewert 0 (für x_deg), um 100% Zweigüberdeckung, 100% MC/DC und 100% MCC zu erhalten. Als Ergebnis wird 0, der richtige und erwartete Sinus-Wert zurückgegeben. Aber der ausgeführte Testfall ist weder ein aussagekräftige Testfall, noch ist ein einziger Testfall ausreichend, auch wenn 100% Coverage erzielt wird.

Irrtum 10: Mit 100% MC/DC ist die Software fehlerfrei

Es ist zwar richtig, dass Modified Condition / Decision Coverage (MC/DC) eines der anspruchsvolleren Code-Coverage-Maße ist, das z.B. bei DO-178B für Produkte auf Level A (dem sicherheitskritischsten Level) nachgewiesen werden muss. Allerdings sind zur Erreichung von 100% MC/DC normalerweise mehr Testfälle notwendig als für weniger anspruchsvolle Maße, beispielsweise Zweigabdeckung, d.h. der Testaufwand steigt.

Lohnt sich dieser erhöhte Testaufwand? Ja, wenn man unbegrenzten (Zeit-) Aufwand ins Testen stecken kann. Allerdings ist das Budget fürs Testen in realen Projekten üblicherweise doch sehr begrenzt. Deshalb sollte sich ein Projektleiter fragen, ob er das begrenzte Budget zur Erreichung von 100% MC/DC verwenden will, oder ob er es nicht besser in andere Tests investiert, beispielsweise in Reviews, Mutationentests oder statische Analyse. Denn auch 100% MC/DC garantieren keinen fehlerfreien Code, weil beispielsweise MC/DC wie jedes andere Code-Coverage-Maß unempfindlich gegenüber Fehler in Berechnungen ist.

Irrtum 11: Für die Code Coverage ist es egal, wie man eine zusammengesetzte Entscheidung formuliert

Die beiden zusammengesetzten Entscheidungen D1 und D2 in Bild 2 sind funktional gleichwertig (d.h. das Ergebnis ist für alle möglichen Eingabekombinatinen gleich). Allerdings ergeben sich (in der Programmiersprache C) Unterschiede in Bezug auf die Code-Coverage. Beispielweise sind bei D1 fünf Testfälle notwendig, um 100% Multiple Condition Coverage (MCC) zur erreichen; wohingegen es bei D2 nur vier sind. Das liegt an der unvollständigen Evaluierung von Entscheidungen in der Programmiersprache C, denn sobald der Compiler weiß, wie das Gesamtergebnis lautet, kann er die Auswertung des Ausdrucks abbrechen („short-circuit operation“). Deshalb gibt es für D2 nur 4 mögliche Testfälle, die dann für 100% MCC reichen (müssen). (Da der C-Compiler Entscheidungen immer von links nach rechts evaluiert, wird die Wahl der Formulierung D2 im Mittel zu einer schnelleren Ausführung des Programms führen.)

Irrtum 12: Für die Code Coverage spielt die Programmiersprache keine Rolle

Ist die Anzahl der Testfälle zur Erzielung eines bestimmten Coverage-Maßes unabhängig von der Programmiersprache? Wir betrachten den Ausdruck „A und B“, einmal in der Programmiersprache Pascal und einmal in der Programmiersprache C. In Bild 3 sind die möglichen Testfälle in den jeweiligen Programmiersprachen angegeben. Um 100% einfache Bedingungsüberdeckung zur erreichen, benötigt man im Fall der Programmiersprache Pascal nur zwei Testfälle (z.B. Nr. 2 und Nr. 3), wohingegen im Fall der Programmiersprache C drei Testfälle notwendig sind (I, II, III). Das liegt daran, dass Pascal eine Programmiersprache mit vollständiger Evaluierung ist und C nicht.

Irrtum 13: Zweigabdeckung subsumiert Anweisungsüberdeckung, also folgt aus 50% C1 auch 50% C0

Nein. Wird für den Code-Schnipsel in Bild 4 ein einziger Testfall ausgeführt, erhält man 50% Zweigüberdeckung, aber nicht 50% Anweisungsüberdeckung, weil die beiden Zweige eine unterschiedliche Anzahl von Anwesungen enthalten.

(ID:338528)