MISRA compliance
April 7, 2020

MISRA Compliance:2020 — Static Analysis and MISRA

Security & Compliance
Static Analysis

MISRA, das weltweit führende Konsortium zur Förderung von Best Practice bei der Entwicklung sicherheitsrelevanter elektronischer Systeme, hat kürzlich MISRA Compliance:2020 veröffentlicht. MISRA Compliance:2020 konsolidiert und klärt vieles aus den Leitlinien, die sich bisher auf die Coding-Richtliniendokumente für MISRA C und C++ verteilt haben, um Software-Erwerbern als auch -Lieferanten zu einem klareren Verständnis der MISRA-Compliance zu Beginn eines Projektes zu verhelfen.

Der erste Teil des Dokumentes beschreibt, warum statische Analysetools unabdingbar für MISRA-Compliance sind. Außerdem wird dargelegt, welche Features und Funktionalitäten eines statischen Analysetools am nützlichsten für MISRA-Compliance sind.

Wahl statischer Analysetools für MISRA

Die Auswahl des richtigen statischen Analysators wird sich sehr positiv auf die Produktivität Ihres Teams auswirken. Daher ist es sehr wichtig, die richtige Entscheidung zu treffen.

Abschnitt 2.6 des Compliance-Dokumentes enthält Leitlinien zur Wahl der Tools, Validierung und Konfiguration. Es werden Compiler und statische Analysetools erörtert.

Für ein statisches Analysetool sind folgende Faktoren zu berücksichtigen:

Sprachversion

C und C++ sind in internationalen Normen (ISO) festgelegt. Diese Normen werden ständig weiterentwickelt. Es ist wichtig, ein statisches Analysetool zu wählen, das Ihre gewählte Sprachversion sowie die weiteren zu nutzenden Spracherweiterungen unterstützt. 

Helix QAC wird fortlaufend aktualisiert, um die neuesten Sprachfeatures zu unterstützen, die von der großen Kundenbasis aus Embedded-System-Entwicklern genutzt werden.

Toolentwicklungsprozess und Validierungsprüfung

MISRA-Compliance erfordert einen disziplinierten Entwicklungsprozess. Die Ausgabe Ihres statischen Analysetools muss vertrauenswürdig sein, daher ist es wichtig zu wissen, dass das Tool gemäß einer anerkannten Qualitätsnorm entwickelt wurde. 

Der Tool-Anbieter sollte umfassende Überprüfungen und Validierungen durchführen. Er sollte über einen Prozess zur kontinuierlichen Verbesserung mit einem Mechanismus verfügen, durch den gemeldete Probleme erfasst und in künftigen Produkt-Releases behoben werden. 

Helix QAC wird gemäß der Qualitätsnorm ISO 9001 entwickelt, was unser Engagement für Kundenzufriedenheit und kontinuierliche Verbesserung verdeutlicht.

Darüber hinaus ist Helix QAC als geeignet für die Nutzung in kritischen Anwendungen zertifiziert, die zur Konformität mit allen wesentlichen Normen zur funktionalen Sicherheit entwickelt wurden, und nach den strengen Softwaretool-Qualifikationskriterien des DO-330-Avionik-Standards qualifiziert.

Regelabdeckung

Die automatische Überprüfung möglichst vieler Richtlinien verringert die notwendigen Bemühungen zum Konformitätsnachweis. Um eine vollständige Abdeckung zu garantieren, muss das Tool Prüfungen im gesamten Programm und nicht nur innerhalb einer einzelnen Übersetzungseinheit durchführen können.

Helix QAC führt Prüfungen im gesamten Programm durch. Seine modulübergreifende Analyse findet Verknüpfungsprobleme, während die hochentwickelte Datenflussanalyse Laufzeitverhalten modelliert, um Probleme in allen Übersetzungseinheiten zu finden. Helix QAC deckt jede Regel in MISRA C:2012 und fast jede Regel in MISRA C++:2008ab.

Genauigkeit

Aufgrund von Unentscheidbarkeit ist kein Tool in der Lage, alle möglichen Regelverstöße zu finden, ohne dabei auch einige Falschmeldungen zu generieren. Sie müssen ein Tool wählen, das die höchstmögliche Anzahl von Verstößen findet und dabei gleichzeitig die Anzahl der Falschmeldungen minimiert.

Die besten statischen Analysatoren nutzen rechenintensive Methoden zur Optimierung von Präzision und Genauigkeit, was oftmals zulasten der Analysegeschwindigkeit geht. Weniger zeitintensive Tools (bei entsprechender Hardwarefähigkeit) generieren oftmals mehr Falschmeldungen. 

Das bedeutet, dass Entwickler unverhältnismäßig viel Zeit mit Warnungen vor folgenlosen Problemen aufwenden. Das führt zudem zu Frustrationen gegenüber dem Prozess. Somit können sich weniger leistungsstarke Tools (die anfangs relativ kostengünstig erscheinen) sehr negativ auf die Produktivität auswirken.

Wir berücksichtigen das gesamte Feedback unserer großen Nutzerbasis, um Falschmeldungen zu verringern und die Genauigkeit von Helix QAC mit jedem Produkt-Release weiter zu verbessern.

Das ist ein Grund mehr, warum Helix QAC anerkannter Goldstandard für MISRA-Checking in allen Branchen ist, in denen Sicherheit von höchster Bedeutung ist.

Konfiguration eines statischen Analysetools für MISRA

Um die besten Ergebnisse zu erzielen, müssen Sie sicherstellen, dass Ihr statischer Analysator optimal konfiguriert ist.

In Abschnitt 2.6.5 der MISRA-Compliance wird die Bedeutung der korrekten Konfiguration Ihres statischen Analysators erläutert.

Sprachversionen und -erweiterungen

Es ist wichtig, Ihren statischen Analysator so zu konfigurieren, dass Ihr Quellcode gemäß der korrekten Sprachversion interpretiert wird. Für C-Code, welcher der neuesten Version der MISRA C-Richtlinien (MISRA C:2012 Änderung 2) entspricht, bedeutet dies entweder die Auswahl von C90, C99, C11 oder C18 (Feature äquivalent zu C11).

Wenn beispielsweise Ihr Code gemäß C99 geschrieben wurde, Helix QAC aber falsch für C90 konfiguriert wurde, wird jedes Mal eine Warnmeldung generiert, wenn er auf ein C99-Sprachfeature trifft.

Spracherweiterungen sind manchmal für Embedded-Plattformen notwendig, obwohl sie die Übertragbarkeit behindern können. Sie können Helix QAC so konfigurieren, dass die meisten gängigen Erweiterungen analysiert werden. Sie können es auch so konfigurieren, dass jeglicher Inline-Assembler-Code ignoriert wird.

Compiler - Implementierungsabhängiges Verhalten

Damit das statische Analysetool die Einhaltung einiger MISRA-Regeln überprüfen kann, muss es bestimmte Implementierungsdetails des Compilers verstehen. Laut ISO C-Norm sind einige Verhaltensweisen implementierungs- bzw. Compiler-abhängig.

So kann ein Compiler beispielsweise Char als Datentyp mit oder ohne Vorzeichen implementieren. Für eine genaue Analyse ist es wichtig sicherzustellen, dass Ihr statischer Analysator alle Char-Instanzen genauso behandelt wie Ihr Compiler.

Helix QAC wird mit standardmäßiger Unterstützung für viele Compiler geliefert. Es verfügt zudem über verschiedene Features, die dabei helfen, die Extraktion dieser Art von Konfigurationsdaten zu automatisieren.

Analysezeit vs. Genauigkeit

Um maximalen Nutzen aus einem statischen Analysator zu ziehen, sollte sich dadurch die Unterbrechung der Arbeitsabläufe eines Entwicklers minimieren. Das ideale Tool hat nach seiner Einführung keine Änderungen der bisherigen Arbeitsweise des Entwicklers zur Folge.

Normalerweise bearbeitet ein Entwickler Code, führt Local Builds aus und testet. Falls während des Builds Compiler-Warnungen oder -Fehler ausgegeben werden, wird der Code bearbeitet, um diese zu beheben, und der Build erneut versucht, bis keine Warnungen mehr vorliegen.

Um mit minimalen Veränderungen für den Entwickler die statische Analyse in diesen Arbeitsablauf einzuführen, könnte man bspw. eine Analyse als „Pre-Build“-Schritt auslösen. Falls statische Analysewarnungen ausgegeben werden, könnte der Build-Schritt dann vor dem Compiler-Aufruf gestoppt, die Behebung durchgeführt und der Build erneut versucht werden, bis keine Warnungen mehr vorliegen.

Dieser zusätzliche Schritt macht den Prozess etwas länger, so dass der statische Analysator so konfiguriert werden muss, dass maximaler Nutzen innerhalb eines akzeptablen Zeitbedarfs entsteht. Helix QAC bietet mehrere Konfigurationsoptionen, so dass es genau an Ihr Szenario angepasst werden kann.

Nehmen wir beispielsweise an, Sie haben eine Codebasis, die so weit fortgeschritten ist, dass der Schritt der statischen Analyse auf dem Desktop des Entwicklers eine angemessene Dauer überschreitet. Sie könnten die lokale Tool-Konfiguration so anpassen, dass eine Analyse nur mit den geänderten Dateien durchgeführt wird, ohne modulübergreifende Analyse oder Datenflussanalyse. Hierdurch könnten viele potentielle MISRA-Verstöße dennoch behoben werden, bevor der Code final in die zentrale Datenbank des Projektes eingecheckt wird.

Um dann auf eventuell noch verbleibende Probleme zu prüfen, können gründlichere, vollständige Datenflussanalysen jenseits vom Desktop des Entwicklers durchgeführt werden, beispielsweise mit der dedizierten Datenverarbeitungsressource eines zentralen Build-Servers.

Während Ihr Projekt wächst, ist die Fähigkeit zum flexiblen Deployment ein weiterer Grund dafür, weshalb Helix QAC weit verbreitet von Teams eingesetzt wird, die an einigen der weltweit komplexesten und kritischsten Embedded-Systemen arbeiten.

Gründe für den Einsatz von Helix QAC für MISRA-Compliance

Helix QAC findet und meldet Verstöße gegen MISRA-Regeln und -Anweisungen in C und C++. Er ist der beste statische Codeanalysator für MISRA C und C++, weil er

  • unabhängig zertifiziert für den Einsatz in der Entwicklung sicherheitskritischer Software ist
  • eine vollständig dokumentierte Regeldurchsetzung und Meldungsauswertung bietet
  • mit umfangreichem Beispielcode geliefert wird
  • eine vollständig konfigurierbare Regelverarbeitung bietet

MISRA-Compliance leicht gemacht