BTC TestStack · Use Case

Analyse der Codeabdeckung

Habe ich meinen gesamten Code getestet?

Codeabdeckung

limiter.c

1int clamp(int v) {
2 if (v > 5)
3 return MAX;
4 return v;
5}
Statement
100%
Entscheidung
100%
MC/DC
100%

Automatisch im Hintergrund aktualisiert. Kein separater Messlauf.

Die Herausforderung

Codeabdeckung – ineffizient ermittelt.

Instrumentierungsbasierte Abdeckungsmessung belastet jeden Schritt im Workflow. Die benötigte Kennzahl ist nie direkt verfügbar – jeder erneute Messlauf kostet Zeit.

Alles ausführen – nur für die Messung

Instrumentierter Code erfasst nur die ausgeführten Teile. Um eine Abdeckungsmetrik zu erhalten, muss daher die gesamte Testsuite laufen – selbst wenn Sie nur eine einzelne Funktion betrachten möchten.

Einen Test ändern, alle erneut ausführen

Jede Änderung an einem Test macht das Gesamtergebnis ungültig. Damit die Kennzahl wieder verlässlich ist, muss die gesamte Testsuite erneut ausgeführt werden – diese Kosten entstehen bei jeder Iteration aufs Neue.

Anschließend noch einmal am Produktionscode

Die Instrumentierung verändert das Binärprogramm; die damit gewonnenen Ergebnisse gelten daher nicht für den ausgelieferten Code. Um die Abdeckung am nicht instrumentierten Produktionscode nachzuweisen, muss alles ein zweites Mal ausgeführt werden – doppelter Aufwand.

Integriert · Automatisiert · Zertifiziert

Codeabdeckung ist ein Ergebnis, keine zusätzliche Aufgabe.

BTC TestStack berechnet und aktualisiert die Abdeckung im Hintergrund, sobald Testfälle erstellt, geändert oder gelöscht werden. Die Berechnung erfolgt je Unterfunktion und Subsystem. Damit ist die Abdeckung jeder relevanten Teilmenge mit einem Klick abrufbar – ohne erneute Ausführung und ohne separaten Berichtsschritt.

01

Automatisch aktualisiert

Die Codeabdeckung wird im Hintergrund aktualisiert. Kein Instrumentierungsdurchgang, kein separater Messlauf.

02

Nach Unterfunktion und Subsystem

Die Ergebnisse werden nach einzelnen Unterfunktionen und Subsystemen aufgeschlüsselt – statt nur eine einzige Kennzahl für den gesamten Build zu liefern.

03

Jede Teilmenge mit einem Klick

Wählen Sie einen Bereich aus und rufen Sie dessen Abdeckung sofort ab. Da die Daten bereits vorliegen, löst das Filtern keine weitere Ausführung aus.

04

Jedes Ziel mit den zugehörigen Tests verknüpft

Für jedes Abdeckungsziel sehen Sie sofort die Liste der Testfälle, die es abdecken – keine manuellen Querverweise, um herauszufinden, welcher Test welches Ziel erreicht hat.

Vier Abdeckungsbereiche

Alle relevanten Messgrößen an einem Ort.

Strukturmetriken, Robustheit, Wertebereichsprüfungen und eigene Ziele – das gesamte Abdeckungsspektrum nebeneinander und stets aktuell.

Strukturelle Abdeckung

Der vollständige Satz struktureller Metriken für Nachweise zur funktionalen Sicherheit – gemeinsam berechnet.

Anweisung (STM)Entscheidungs-/Zweigabdeckung (D)Bedingung (C)MC/DCFunktion + FunktionsaufrufSwitch/CaseRelationale Operatoren
ISO 26262-6 · Tabellen 12 und 15
Anweisungs-, Zweig- und MC/DC-Abdeckung auf Unit-Ebene sowie Funktions- und Funktionsaufrufabdeckung auf Integrationsebene.

Robustheitsziele

Laufzeitfehlerklassen werden als Abdeckungsziele behandelt: BTC TestStack weist entweder nach, dass der Code dagegen robust ist, oder erzeugt einen Test, der den Fehler auslöst.

  • Division durch Null
  • Downcast (verlustbehaftete Typverengung)
  • Array-Zugriff außerhalb der Grenzen
ISO 26262-6 · Robustheitsprüfung
Unterstützt den Nachweis der Freiheit von Laufzeitfehlern und die Robustheitsverifikation (Tabelle 13).

Wertebereichsprüfungen

Definieren oder importieren Sie die gültigen Werte und Wertebereiche für jedes Schnittstellenobjekt. BTC TestStack erfasst die Abdeckung dieser Wertebereiche direkt.

ISO 26262-6 · Tabelle 10
Äquivalenzklassenabdeckung und Grenzwertanalyse, automatisch nachverfolgt.

Benutzerdefinierte Abdeckungsziele

Mit einem Editor für alle Schnittstellenvariablen formulieren Sie jedes Ziel als booleschen oder mathematischen Ausdruck und messen anschließend, ob Ihre Tests dieses Ziel erreichen.

ISO 26262 · projektspezifische Ziele
Zusätzliche Abdeckungsziele aus Ihrem Sicherheitsplan, die über die Standardtabellen hinausgehen.
Intelligente Testgenerierung

Wenn die Codeabdeckung noch nicht vollständig ist, schließt BTC TestStack die Lücke für Sie. Anstatt Eingaben zu erraten, leitet ein Model-Checking-Algorithmus den kleinsten und kürzesten Satz von Testfällen ab, der 100 % strukturelle Abdeckung erreicht.

Die Analyse greift direkt auf Eingaben und Kalibrierungen zu. Kann ein Ziel nicht erreicht werden, liefert sie den mathematischen Nachweis der Unerreichbarkeit. So lässt es sich als toter Code klassifizieren, statt weiter nach Testdaten dafür zu suchen.

Zufallsbasierte Tools raten. Model Checking liefert den Nachweis.
model_check · generate
100%strukturelle Abdeckung erreicht
Nachgewiesen
Generierter Testsatz · minimal
TC_01v = 4 → Verzweigung falsch
TC_02v = 6 → Verzweigung wahr
TC_03v = 5 → Grenze
1 Ziel als nicht erreichbar nachgewiesen · als toter Code markiert
Zentrale Vorteile

Was die Codeabdeckungsanalyse Ihrem Team bringt.

01

Immer auf dem neuesten Stand

Hintergrundaktualisierungen halten die Kennzahl aktuell – ein separater Messlauf entfällt.

02

Abdeckung dort, wo Sie sie brauchen

Ergebnisse pro Unterfunktion und pro Subsystem – die Abdeckung jeder Teilmenge ist nur einen Klick entfernt.

03

Das vollständige Metrikspektrum

Strukturelle, Robustheits-, Wertebereichs- und benutzerdefinierte Ziele – gemeinsam in einem Bericht statt verteilt auf vier Tools.

04

Nicht erreichbare Ziele nachweisen

Ziele, die nicht erreicht werden können, werden als nicht erreichbar nachgewiesen und als toter Code gekennzeichnet – statt unnötig nach passenden Testdaten zu suchen.

100 % Codeabdeckung im eigenen Code sichtbar machen.

Eine Evaluierungslizenz umfasst einen Kick-off-Workshop mit unseren Ingenieuren – vollständig eingerichtet an einer Ihrer realen Softwareeinheiten.