Sicherheitskritische Systeme

MISRA C++ im eigenen Projekt einführen

Seite: 2/2

Anbieter zum Thema

Dokumentation von kontrollierten Regelverletzungen

Zur Demonstration des Nachweises, dass der untersuchte Code MISRA C++ genügt, werden zusätzlich zur normalen Dokumentation über den Lebenszyklus des Projektes weitere Dokumente benötigt. Zunächst muss eine Regelbefolgungsmatrix erzeugt werden, die aufzeigt wie Verletzungen der Regeln entdeckt werden. Für jede Regel sollte ein Eintrag vorhanden sein, der zeigt welches Werkzeug oder Werkzeuge und/oder welche Überprüfungsprozesse verwendet werden um Verletzungen der Regeln aufzufinden.

Zweitens, da MISRA C++ erlaubt, dass Regeln absichtlich in kontrollierter Weise verletzt werden (im Gegensatz zu Subsets wie z.B. SPARC ADA), sollte eine Abweichungsprozedur definiert sowie ein zugehöriges Abweichungsprotokoll laufend aktualisiert werden. Die Abweichungsprozedur legt die aktuell gültigen Kontrollen fest und sollte darüber hinaus auch die Prozesse festlegen, die notwendig sind um irgendwelche Abweichungen aufzuzeichnen, zuzulassen und zu überprüfen. Einträge im Abweichungsprotokoll müssen für jede absichtliche Regelverletzung und Instanz einer Regelverletzung getätigt werden. Jeder Eintrag sollte die Einzelheiten der verletzten Regel enthalten, eine Rechtfertigung, sowie die möglichen Konsequenzen, die im Ergebnis auftreten können, zusammen mit einer Demonstration wie die Sicherheit garantiert werden kann. Wird eine Abweichung über das ganze Projekt hinweg angewendet, sollten die Umstände die dazu führen aufgelistet werden.

Bild 1: Übersicht über den Arbeitsfluss zur Erzwingung von MISRA C++. Für umfangreiche Subsets wie MISRA C++ ist der automatische Test mittels Werkzeugen für die statische und dynamische Analyse eine schlichte Notwendigkeit. (Archiv: Vogel Business Media)

Der Beweis, dass Code einem Subset genügt, lässt sich mit verschiedenen Methoden von manuell bis automatisch bringen. Während manuelle Codeüberprüfung für kleine Untermengen, die auf einfache Projekte mit nur wenigen Codezeilen angewendet werden, akzeptabel ist, wird dies in der Mehrzahl der Fälle nicht machbar sein. Für große Untermengen wie MISRA C++ ist der automatische Test mittels Werkzeugen, die statische und dynamische Analyse durchführen, eine schlichte Notwendigkeit. Insgesamt ist der Nachweis der Konformität nicht einfach. Muss z.B. einer Zertifizierungsbehörde ein Beweis geliefert werden, dass der Code einer Untermenge genügt, ist wahrscheinlichein dokumentierter Nachweis erforderlich. Dann ist die Verwendung eines Werkzeuges die Voraussetzung um die Arbeitsbelastung im Projekt zu minimieren.

Bild 2: Toolgestützter MISRA-Check: Mittels Werkzeugen wie TBvision werden Berichte wie der Code Review Report erzeugt. Dieser beschreibt die Zustandsinformationen über alle Codierstandards und zeigt auf, welche von ihnen im untersuchten Code verletzt sind. Die vorhandenen Verletzungen sind hervorgehoben. (Archiv: Vogel Business Media)

Ein Beispiel ist die LDRA-Werkzeugreihe mit der Quellcode (einzelne Dateien oder vollständige Projekte) analysiert werden können. Es werden diverse Berichte wie der Code Review Report (Codeüberprüfungsreport) erzeugt. Dieser beschreibt die Zustandsinformationen über alle Codierstandards die in der Werkzeugreihe implementiert sind und zeigt auf, welche von ihnen im untersuchten Code verletzt sind. Ein Programmierstandardmodell, ein Filter, der aus einem Satz von Standards besteht, kann auf die Ergebnisse angewendet werden um aufzuzeigen, wie sie sich bezüglich einer bestimmten Untermenge verhalten. Z.B. zeigt Bild 2 wie TBvision verwendet wird um den Codeüberprüfungsreport für eine Datei zu zeigen. Dabei werden die vorhandenen Verletzungen hervorgehoben. Die Ausgabeberichte werden dahingehend überprüft, dass keine unerwarteten Regelverletzungen vorhanden sind.

Zusätzlich erlauben einige Werkzeuge Anmerkungen (speziell formatierte C++-Kommentare im Fall von LDRA), die Meldungen für erwartete Verletzungen unterdrücken. Wenn Anmerkungen verwendet werden, müssen sie im Überprüfungsprozess eingeschlossen sein um sicherzustellen, dass sie von der Dokumentation erfasst werden. Jede unerwartete Verletzung im Quellcode muss durch Änderung des Quellcodes entfernt werden. Schließlich und endlich müssen alle diese Prozesse in das Qualitätssicherungssystem integriert werden.

(Archiv: Vogel Business Media)

*Chris Tapp ist Anwendungsingenieur bei LDRA und Leiter der MISRA C++ Arbeitsgruppe

(ID:277121)