Branch-Coverage-Tests Minimalinvasiv testen

Für Tests nach ISO 26262 musste bisher der Code verändert werden. Jetzt gibt es ein neues Verfahren, das ohne Eingriffe in den Code auskommen – wenn der Mikrocontroller einen vollständigen Code-Trace unterstützt.

Bedingt durch die in den letzten Jahren explodierte Komplexität der Steuerungs-Software in kritischen und sicherheitsrelevanten Systemen, sind Entwickler heute mehr denn je auf verlässliche und reproduzierbare Methoden zur Überprüfung und Beurteilung der funktionalen Zuverlässigkeit des manuell erstellten Quellcodes angewiesen. Besonders systematische Messungen der Codeabdeckung (Code Coverage) werden zur Qualitätssicherung empfohlen oder sogar gefordert (IEC 61508, ISO 26262). Beim Code Coverage handelt es sich um ein kontrollflussorientiertes Testverfahren. Die Grundidee dabei ist, zu messen, ob der zu einer Applikation gehörende Programmcode während des Tests in allen seinen Teilen mindestens einmal durchlaufen wurde. Das kann mit speziell erzeugten Stimuli oder auch parallel zu funktionalen Tests erfolgen. Ein großer Vorteil des Verfahrens ist, dass die Anwendung und Auswertung weitgehend automatisierbar ist. Es handelt sich um eine rein formale Prüfung, die nichts über die Software-Qualität bezüglich Funktionalität, Robustheit usw. aussagt. Allerdings ist sie ein sehr gutes Maß für die erreichte Testtiefe.

Stufen der Codeabdeckung

Man unterscheidet verschiedene Stufen der Codeabdeckung, deren Bezeichnungen und insbesondere Abkürzungen in der Literatur allerdings nicht einheitlich verwendet werden. Die von uns gewählten orientieren sich an der Luftfahrtnorm D0-178B. Die Hauptgruppen sind nach aufsteigender Testgüte:

  • Anweisungsüberdeckung bzw. Statement Coverage (Abkürzung C0),
  • Zweigüberdeckung bzw. Branch Coverage (Abkürzung C1),
  • Pfadüberdeckung bzw. Path Coverage (Abkürzung C2) und
  • Bedingungsüberdeckung bzw. Condition Coverage (Abkürzung C3).

Dabei deckt jede höhere Gruppe die Anforderungen aller vorhergehenden mit ab. In der untersten Stufe, dem Statement Coverage, wird die Ausführung jedes Maschinenbefehls ohne Berücksichtigung von Programmverzweigungen gemessen. Mit diesem Verfahren kann nicht ausgeführter Programmcode (dead code) aufgespürt werden. Es erfüllt aber meistens nicht die aktuellen Anforderungen an die Testqualität. Branch Coverage verlangt die Ausführung jeder möglichen Programmverzweigung (Bild 1).