Code-Coverage undercover: Nutzen und Tücken Trace-basierter Codeabdeckung

Autor / Redakteur: Jens Braunes * / Holger Heller

Der Nachweis der Testqualität für sicherheitskritische Embedded-Systeme mit Hilfe von Code-Coverage-Analysen ist ein äußerst wichtiges, aber auch diffiziles Unterfangen.

Anbieter zum Thema

Code-Coverage undercover: Trace-basierte Code-Coverage mit PLS richtig angehen
Code-Coverage undercover: Trace-basierte Code-Coverage mit PLS richtig angehen
(Bild: © stocksolutions - Fotolia)

Nach welchen grundlegenden Regeln man sich beim Softwaretest zur richten hat, geben einschlägige Normen wie ISO 26262 für den Automotive-Bereich vor. Dennoch offenbaren sich in deren praktischem Einsatz aber so manche Tücke, die es zu bewältigen gilt.

Um die Zuverlässigkeit eines Embedded-Systems beurteilen zu können, spielt die Qualität der verwendeten Tests eine maßgebliche Rolle. Eines der wichtigsten Werkzeuge zur Messung der Testgüte ist dabei die Code-Coverage-Analyse.

Bildergalerie
Bildergalerie mit 6 Bildern

Mittels dieser Analyse lässt sich ermitteln, ob durch die verwendenden Teststimuli oder die benutzten funktionalen Tests alle möglichen Programmteile bzw. Verzweigungen auch wirklich ausgeführt werden, also kein Code beim Testen vergessen wird, der später im Steuergerät doch zum Fehlverhalten führen kann. Zu beachten ist aber, dass ein Code-Coverage für sich alleine nichts über die Software-Qualität bezüglich Funktionalität oder Robustheit aussagt.

Code-Coverage wird in verschiedene Stufen unterteilt, wobei sich die einschlägige Literatur hinsichtlich deren Bezeichnungen leider nicht immer einig ist. Es empfiehlt sich deshalb, darauf zu achten, was im Rahmen der jeweils anzuwendenden Normen unter den dort verwendeten Begriffen tatsächlich zu verstehen ist. Für einen umfassenden Überblick sei ein Beitrag von R. Bär et.al. [1] empfohlen, der das Thema ausführlich behandelt.

Dieser Beitrag orientiert sich an der für den Automotive-Bereich relevanten Norm ISO 26262, die folgende Coverage-Arten unterscheidet:

  • Statement Coverage: Beim Statement Coverage wird ermittelt, wie viele Maschinenbefehle durch die Tests erreicht, also ausgeführt wurden. Programmverzweigungen werden nicht beachtet. Mit diesem Verfahren kann zwar nicht ausgeführter Programmcode („dead code“) aufgespürt werden, es erfüllt aber meist nicht die aktuellen Anforderungen an die Testqualität.
  • Branch Coverage: Die Ausführung aller möglichen Programmverzweigungen wird beim Branch Coverage überprüft. Im Falle einer einfachen IF-Anweisung muss also die Bedingung einmal den Wahrheitswert WAHR und einmal den Wert FALSCH annehmen. Da hier implizit auch alle Anweisungen erreicht werden müssen, ist das Statement Coverage bereits aus dem Ergebnis des Branch Coverage ableitbar.
  • MC/DC (Modified Condition/Decision Coverage): Für das MC/DC müssen für jede zusammengesetzte Bedingung alle darin enthaltenen Einzelbedingungen jeweils beide Wahrheitswerte annehmen, um als getestet zu gelten. Damit wird sichergestellt, dass jede Einzelbedingung auch unabhängig von den anderen beteiligten Einzelbedingungen das Gesamtergebnis bestimmt. In der praktischen Anwendung erweist sich dieses Verfahren allerdings als äußerst aufwändig, da insbesondere bei Schleifen, die bedingte Ausführungssequenzen enthalten, extrem viele Pfade zu betrachten sind.

Je nach Sicherheitsrelevanz eines zu testenden Modules legt die jeweils anzuwendende Norm bestimmte Stufen des Code-Coverages fest und verlangt deren Nachweis. Im Falle der ISO 26262 sind diese in den Automotive Safety Integrity Levels (ASIL) festgelegt, die jedoch nur eine Empfehlung aussprechen (Bild 1 / Tabelle 1).

Es wird deutlich, dass man dem Branch-Coverage ein hohes Maß an Aufmerksamkeit widmen sollte, da es in den meisten ASILs als „sehr zu empfehlen“ eingestuft ist. Auch andere Normen wie die für den Luftfahrtbereich wichtige DO-178C verlangen für mittlere bis höhere Software-Levels – vergleichbar mit den ASILs – den Nachweis des Branch-Coverages.

Aber auch im Softwaretest ohne Bindung an irgendwelche Normen kann es durchaus sinnvoll sein, Hilfsmittel wie das Code-Coverage zu nutzen. Auf diese Weise lässt sich nämlich durchaus eine deutliche Erhöhung der Testqualität erreichen.

Artikelfiles und Artikellinks

(ID:43140991)