Statische vs. dynamische Verifikation des Codes
Statische Analyse und dynamisches Testen befassen sich mit unterschiedlichen Aspekten desselben Problems. Die statische Analyse deckt Fehler im Quellcode bereits vor der Ausführung auf. Das dynamische Testen bestätigt das korrekte Verhalten während der Ausführung und misst, wie umfassend der Code durch die Tests abgedeckt wird. Werden beide Methoden gemeinsam im Rahmen der Entwicklungspipeline eingesetzt, deckt jede von ihnen Fehlerklassen auf, die der jeweils anderen entgehen.
Statische Code-Verifikation
Bei der statischen Verifikation wird der Quellcode analysiert, ohne ihn auszuführen. Durch die direkte Untersuchung der Struktur und Logik des Codes erkennen statische Analysewerkzeuge potenzielle Fehler, Sicherheitslücken und Verstöße gegen Programmierrichtlinien und Coding Standards, noch bevor auch nur ein einziger Test durchgeführt wird.
Was die statische Analyse aufdeckt
- Null-Pointer Dereferenzierungen und Array-Zugriffe außerhalb des zulässigen Bereichs
- Verstöße gegen Programmierrichtlinien und Coding Standards, einschließlich MISRA C, AUTOSAR C++ und CERT-C
- Nicht initialisierte Variablen und unzulässige Typkonvertierungen
- Nicht erreichbarer Code und Logikfehler
- Sicherheitsschwachstellen gemäß CWE-Klassifizierungen
Die wichtigsten Vorteile
- Arbeitet direkt auf dem Quellcode, ohne dass ein Build oder eine Ausführung erforderlich ist
- Läuft kontinuierlich in der Build-Pipeline bereits ab den frühesten Entwicklungsphasen
- Sehr niedrige Kosten pro Fehler bei frühzeitiger Integration
- Generiert konsistente, wiederholbare Ergebnisse, unabhängig von den Laufzeitbedingungen oder den Eingabedaten
PC-lint Plus ist das statische Analyse-Tool von Vector für C- und C++-Code. Es ist nach IEC 61508 und ISO 26262 zertifiziert, unterstützt standardmäßig MISRA, AUTOSAR, CERT-C und CWE und lässt sich in nahezu jede Build-Umgebung integrieren.
Dynamische Verifikation des Codes
Bei der dynamischen Verifikation wird die Software während ihrer Ausführung geprüft. Dabei wird der Code anhand definierter Testfälle ausgeführt, das tatsächliche Laufzeit-Verhalten beobachtet und gemessen, wie umfassend die Tests den Code im Hinblick auf seine Anforderungen abdecken.
Was dynamische Tests leisten
- Bestätigung des korrekten Verhaltens des Codes unter realen und simulierten Bedingungen
- Code-Coverage-Messung, die Anweisungen (Statement), Verzweigungen (Branch) sowie MC/DC einschließt gemäß den Anforderungen von Sicherheitsstandards
- Erkennung von Fehlern der Laufzeit wie Stapelüberläufen (Stack-Overflow) und Zeitüberschreitungen (Timing-Verletzungen)
- Anforderungsrückverfolgbarkeit (Traceability) zwischen Testergebnissen und den Anforderungen, zu deren Verifikation sie entwickelt wurden
Die wichtigsten Vorteile
- Überprüft das tatsächliche Verhalten der Laufzeit und nicht nur die Struktur des Quellcodes
- Erforderlich für den Nachweis der strukturellen Abdeckung gemäß Standards einschließlich ISO 26262 und DO-178C
- Unterstützt sowohl host-basierte als auch zielsystem-basierte Testumgebungen
- Lässt sich in CI/CD-Pipelines integrieren, um eine kontinuierliche automatisierte Ausführung zu gewährleisten
VectorCAST ist die Plattform von Vector für dynamische Tests und Testautomatisierung von Embedded-Software in C-, C++- und Ada. Sie generiert, verwaltet und führt Unit-Tests aus, misst Code-Coverage gemäß den branchenüblichen Standards und erstellt für die Sicherheitszertifizierungen erforderlichen, auditierbaren Berichte.
Warum beides erforderlich ist
Sowohl statische Analyse als auch dynamisches Testen haben jeweils einen genau definierten Anwendungsbereich. Statische Analyse setzt am Quellcode an und identifiziert Fehler vor der Ausführung. Dynamisches Testen wird an laufender Software durchgeführt und bestätigt das korrekte Verhalten unter realen Bedingungen. Ein Entwicklungsprozess, der beide Methoden verwendet, deckt Fehler genau dort auf, wo die jeweilige Methode am effektivsten ist. Aus diesem Grund schreiben Normen wie ISO 26262, DO-178C, IEC 61508 und IEC 62304 beide als eigenständige Verifikationsmaßnahmen vor.