Was ist Code-Verifikation?
Code-Verifikation ist der Prozess, bei dem überprüft wird, ob die Software das vorgesehene Design und die Anforderungen korrekt umsetzt. Bei der Entwicklung sicherheitskritischer Systeme erfolgt dies kontinuierlich über den gesamten Lebenszyklus hinweg, wobei in jeder Phase dokumentierte Nachweise erstellt werden, die in den Konformitätsnachweis einfließen.
Verifikation vs. Validierung: Die Kurzfassung
Die beiden Begriffe werden oft synonym verwendet, beziehen sich jedoch auf unterschiedliche Fragestellungen.
- Bei der Verifikation lautet die Frage: Haben wir die Software korrekt entwickelt? Entspricht die Umsetzung der Spezifikation?
- Bei der Validierung lautet die Frage: Haben wir die richtige Software entwickelt? Entspricht sie den tatsächlichen Bedürfnissen der Benutzer?
Code-Verifikation konzentriert sich auf Ersteres. Sie verwendet statische Analysen, strukturierte Reviews und dynamische Tests, um sicherzustellen, dass die Implementierung genau das widerspiegelt, was im Design und in den Spezifikationen festgelegt wurde.
Was Code-Verifikation beinhaltet
Eine umfassende Verifikationsstrategie umfasst in der Regel mehrere sich ergänzende Maßnahmen.
Statische Codeanalyse
Der Quellcode wird ohne Ausführung geprüft. Tools wie PC-lint Plus suchen vor Beginn der Tests nach Verstößen gegen Programmierrichtlinien, Null-Pointer-Dereferenzierungen, Bereichsüberschreitungen (Out-of-Bounds-Zugriffen), undefiniertem Verhalten und Hunderten weiterer Fehlerklassen. Mehr zur statischen Analyse
Unit-Tests
Einzelne Funktionen, Module, Klassen und Komponenten werden isoliert getestet. Entwickler überprüfen das korrekte Verhalten bei normalen Eingaben, Randbedingungen und Fehlerfällen. Tools wie VectorCAST automatisieren die Erzeugung und Ausführung von Tests und messen, wie umfassend der Code durch die Tests abgedeckt wurde. Erfahren Sie mehr über Unit-Tests
Code-Coverage-Messung
Abdeckungsmetriken, die „Statement“, „Branch“ und „MC/DC“ beinhalten, belegen, dass die Testsuite den Code ausreichend abdeckt. In regulierten Branchen ist das Erreichen bestimmter Abdeckungsgrade eine verbindliche Vorgabe und kein bloßes Ziel. Erfahren Sie mehr über Code-Coverage
Rückverfolgbarkeit von Anforderungen
Jeder Testfall ist mit der Anforderung verknüpft, die er überprüft. Die bidirektionale Rückverfolgbarkeit belegt, dass alle Anforderungen getestet wurden und dass kein Test ohne Zweck existiert. Dies ist ein entscheidendes Element jedes Sicherheitsaudits.
Warum die Verifikation nicht erst im Nachhinein erfolgen darf
Die Behebung von Fehlern, die bei der Code-Verifikation entdeckt werden, ist deutlich kostengünstiger als die Behebung von Fehlern, die erst während der Integration, bei Systemtests oder im Feldeinsatz festgestellt werden. Bei Embedded Software, bei der Rückrufkosten und sicherheitsrelevante Folgen schwerwiegend sein können, ist die frühzeitige Erkennung von Fehlern durch systematische Verifikation sowohl aus wirtschaftlicher als auch aus ethischer Sicht unerlässlich.
Branchenstandards einschließlich ISO 26262, DO-178C, IEC 61508 und IEC 62304 schreiben durchgängig dokumentierte Verifikationsmaßnahmen mit nachvollziehbaren Nachweisen vor. Die Tools von Vector wurden spezifisch entwickelt, um diese Anforderungen zu erfüllen.