Holen Sie sich die UMFANGREICHSTE Abdeckung für die Einhaltung von MISRA C! Erfahren Sie mehr >>

MISRA C/C++ Codeprüfung Check

Von Ricardo Camacho

1. Juli 2021

9  min lesen

Die MISRA-Standards sind Benchmarks, die branchenübergreifend verwendet werden, um die von Entwicklern geschriebenen Quellcode-Standards zu messen. Lesen Sie weiter, um zu erfahren, wie die SAST-Lösung von Parasoft Ihnen dabei helfen kann, die MISRA-Compliance-Anforderungen zu erfüllen.

MISRA ist der legendäre Standard, an dem Entwicklungsteams einen Großteil der heutigen Software messen. Aber was genau ist MISRA, wie ist es entstanden, wie messen C- und C++-Entwickler Standards daran und woher wissen sie, dass sie konform sind?

In diesem Beitrag untersuchen wir den zwingenden Hintergrund der Entstehung von MISRA. Wir beantworten auch die oben genannten Fragen und zeigen, wie MISRA C++- und C-Code-Programmierern hilft, effizient zu schreiben und gleichzeitig aktuelle Sicherheitsbedenken zu berücksichtigen.

Konkret betrachten wir:

  • MISRA-Definition und Hintergrund
  • MISRA-Regeln und -Richtlinien
  • Compliance
  • Berichterstattung
  • Mit Legacy-Code verwenden

Was ist MISRA?

Die MISRA-Standards enthalten Richtlinien und Coderegeln zum Schreiben von Software. Unter anderem verwenden die Automobil-, Luft- und Raumfahrt- und Verteidigungsindustrie, Medizintechnik, Industrieautomation und Bahnindustrie den Standard, um ihre Entwickler beim Schreiben von Quellcode zu unterstützen, der Sicherheit und Zuverlässigkeit in der Software gewährleistet. Da Embedded-Software-Ingenieure die Programmiersprachen C und C++ verwenden, um Code für sicherheitskritische Software zu schreiben, haben die Schöpfer des MISRA-Standards sie für Programmierer entwickelt, die diese beiden Sprachen verwenden.

Hintergrund

Das Konsortium der Motor Industry Software Reliability Association (MISRA) ähnelt der ISO (International Standards Organization) und der IEC (International Electrotechnical Commission), die allgemeine Compliance-Richtlinien für die Industrie festlegen, beispielsweise Standards für die Entwicklung elektrischer/elektronischer Systeme. ISO 26262 , veröffentlicht im Jahr 2011, ist der internationale Standard zur Zertifizierung der Sicherheit von Elektronik in Straßenfahrzeugen. ISO/IEC-konforme Softwaresysteme können von Prüfstellen als sicher zertifiziert werden.

MISRA, ein Konsortium automobilnaher Industrien, hat 1998 seine ersten Richtlinien entwickelt, MISRA c1998. Das Konsortium entstand als Ergebnis des britischen Forschungsprogramms für sicherheitskritische Systeme, das die britische Regierung ins Leben gerufen hat, um einige der Herausforderungen anzugehen, denen sich die Automobilindustrie aufgrund des zunehmenden Einsatzes von Software bei der Herstellung und dem Betrieb von Fahrzeugen gegenübersieht. Einige der ursprünglichen Branchen, die an der Entwicklung des Standards mitgewirkt haben und die derzeit alle auch aktive Mitglieder des Lenkungsausschusses sind, waren:

  • Bentley-Motoren
  • Delphi Dieselsysteme
  • Ford Motor Company Ltd
  • Horiba Mira Ltd
  • Jaguar Land Rover
  • Protean Electric Ltd
  • Ricardo SPS
  • Die Universität von Leeds
  • Visteon Engineering Services Ltd
  • ZF TRW

Obwohl das Konsortium ursprünglich den Standard für die Automobilindustrie, haben andere Embedded-Branchen den Standard übernommen, einschließlich solcher, die Embedded-Technologie verwenden, die Geräte wie LoT-Systeme verbindet.

Das Wie und Warum von MISRA

In den frühen 1990er Jahren gewann die Elektronik im Automobil immer mehr an Bedeutung. Ebenso die eingebettete Software, die ein integraler Bestandteil dieser Elektronik war. So begannen Ingenieure und Hersteller zu erkennen, dass die Zuverlässigkeit der Software sowohl aus Sicherheits- als auch aus kommerziellen Gründen von entscheidender Bedeutung war. Die Herausforderung ist heute noch größer, da Software für ein einzelnes Auto mehr als 100 Millionen Codezeilen umfassen kann.

Software in Pkw und Lkw

Automobilhersteller verwenden Software im Motor- und Antriebsstrangbetrieb. Es überwacht und liefert die richtige Kraftstoffmenge in ICEs (Verbrennungsmotoren) und liefert Daten an das ECM (Motorsteuergerät, manchmal auch ECU oder Motorsteuergerät genannt). Dies ist der wichtigste Fahrzeugcomputer, der Informationen über Kraftstoffverbrauch, Leistung des Motors, Emissionen und andere wichtige motorbezogene Daten sammelt, die für sicheres und effizientes Fahren unerlässlich sind. (Elektro- und Hybridfahrzeuge haben ähnliche Softwareanforderungen in Bezug auf Motor und Antriebsstrang.)

Die Hersteller verwenden auch Software zum Betrieb von Bordcomputern für die allgegenwärtigen Sensoren aktueller Fahrzeuge, einschließlich Tür- und Fensterüberwachung, Klimatisierungssysteme sowie Park- und Verkehrssensoren. Sie setzen sie auch in sicherheitskritischen Systemen wie Airbags und ABS ein. Mehr betriebsbezogene Software liegt sicherlich in der Zukunft von Straßenfahrzeugen, wobei Ingenieure und Designer den autonomen Fahrfunktionen, verbesserter Energieeffizienz und erhöhter Sicherheit ernsthafte Aufmerksamkeit widmen.

Jenseits der Automobilindustrie

Industrien auf der ganzen Welt akzeptieren die MISRA C-Regeln zum Schreiben von sicherheitskritischem C-Code. Die Regeln und Richtlinien schaffen Vertrauen, weil sie lesbar und prägnant sind und sich auf das Wesentliche konzentrieren. Obwohl die Anwendung des MISRA-Standards nicht garantiert, dass Software frei von Sicherheits- und Qualitätsproblemen ist, hilft er Software-Ingenieuren, Code zu schreiben, der sicherer, robuster, portabler und einfacher zu warten ist. (MISRA-Richtlinien behandeln auch Sicherheitslücken, aber andere Codierungsstandards wie CERT C behandeln speziell in Code geschriebene Sicherheitsprobleme.)

MISRA-Kodierungsstandards für funktionale Sicherheit

Heutzutage verwenden Entwicklungsteams Codierungsstandards als Methode, um eine Gruppe von Codierungspraktiken zu definieren, zu verwalten und zu nutzen, wobei das Hauptziel die Konsistenz ist. Das Hauptziel einer Codierungsregel besteht darin, die Verwendung der Sprache einzuschränken, um zu verhindern, dass der Entwickler „falsche“ und potenziell gefährliche Dinge tut.

Entwickler können viele Fehler in der Software vermeiden, indem sie sinnvolle Einschränkungen bei der Sprachverwendung vornehmen. Daraus resultiert eine stilistische Einheitlichkeit, die als Disziplin in einem Softwareprojekt wertvoll ist.

Vielseitigkeit und Anfälligkeit von C und C++

Der Vielseitigkeitsaspekt der Sprachen C++ und C ermöglicht es einem Entwickler, Code zu schreiben, der unbeabsichtigt falsch und möglicherweise gefährlich sein kann. Es ist einfach für ihn oder sie, Code zu schreiben, der den Anforderungen des Sprachstandards entspricht, aber dies kann dennoch zu unerwünschtem Verhalten und Programm-„Abstürzen“ führen. Dazu gehören beispielsweise Code, der über die Parameter eines arithmetischen Prozesses hinaus auf Speicher zugreift, oder eines Arrays, der zu Speicher- oder Grenzverletzungen führt.

Es ist offensichtlich wichtig, diese potenziellen Probleme zu identifizieren. Aber das Ziel von MISRA ist es, Probleme zu vermeiden und nicht nur zu identifizieren. Ein Compiler kann einige von ihnen erkennen, aber die Verwendung eines dedizierten Analysetools ist effektiver.

Der MISRA-Standard betont, dass die Einhaltung von Codierregeln nur eine Komponente für die erfolgreiche Entwicklung von Software ist. Entwickler müssen jedes Programmierprojekt in ein diszipliniertes Engineering-Setting integrieren, das methodische Entwicklungsworkflows und die Anwendung bewährter Validierungstools umfasst.

Der Wert der Verwendung einer einheitlichen C/C++-Testlösung

Häufig verwendete Richtlinien und Regeln für die MISRA C- und C++-Sprache

Jeder MISRA-Standard enthält eine Reihe von Codierungsparametern und -regeln sowie unterstützende Materialien. Die Begleitmaterialien sind ein ergänzender Bestandteil des Standards und bieten wichtige Hintergrundinformationen für jeden Programmierer, der die Konformität erreichen möchte.

Schauen wir uns die aktuellen MISRA-Codierungsstandards für C und C++ selbst und kurze Beschreibungen an.

  • MISRA C++ 2008. Obwohl C die vorherrschende Programmiersprache blieb, sprach diese Version für die verstärkte Verwendung von C++. Hinweis: Viele Unternehmen entscheiden sich für die Standardisierung auf AUTOSAR C++ 14, das die jüngsten Änderungen an C++ abdeckt. Tatsächlich, AUTOSAR und MISRA bündelten ihre Kräfte, um die nächste Generation der Standards zu entwickeln.
  • MISRA C 2012. Diese 2013 veröffentlichte Version, auch als MISRA C3 bezeichnet, hat den MISRA C-Standard weiterentwickelt. Es stützte sich auf 14 Jahre Erfahrung aus der Interaktion mit Tausenden von Organisationen und Benutzern und beinhaltete einige neue Regeln, schloss einige Lücken und verbesserte die Erklärungen und Beschreibungen zu bereits bestehenden Regeln. Die standardmäßige erweiterte Unterstützung von C99 und wurde für C90, C11 und C18 beibehalten. Es wurden auch eine Reihe von Verbesserungen vorgenommen, die die Komplexität und die Kosten der Compliance verringerten.
    • MISRA C 2012 Änderungen für Safety & Security. Mit der sich entwickelnden Programmiersprache C und um hervorzuheben, dass MISRA C:2012 in Sicherheitsanwendungen gleichermaßen wertvoll ist, veröffentlichte MISRA mehrere unterstützende Ergänzungen und Ergänzungen zum Standard, die neue Regeln und Richtlinien für eine verbesserte Abdeckung von Sicherheit und bekannten Sicherheitslücken boten.
  • MISRA-Compliance 2020. Dieses aktuelle Dokument legt einen Rahmen fest, um die Einhaltung des MISRA-Codierungsstandards zu erreichen. Sie ersetzt Compliance- und Prozess- und Abweichungsanforderungen in früheren Versionen des Standards.

Erreichen der MISRA-Compliance durch statische Analyse

Der MISRA-Codierungsstandard bietet umfassende Regeln und Richtlinien, damit Unternehmen ihre Anwendungen vor Laufzeitfehlern und Softwarefehlern schützen und sie weniger anfällig für Sicherheitslücken machen können. Die Einhaltung des MISRA-Standards trägt zur Verbesserung der Syntax bei, schafft Code-Konformität und erleichtert die Portabilität. Für Teams, die keine Lösungen oder Tools zur statischen Analyse (oder SAST – Static Application Security Testing) verwenden, kann die Validierung der Compliance problematisch sein. Parasoft vereinfacht den Prozess, der für die Gewährleistung einer rechtzeitigen Softwarebereitstellung und Codierungssicherheit von entscheidender Bedeutung ist.

Erste Schritte mit der statischen Analyse

Um eine erfolgreiche Compliance zu erreichen, müssen Lösungen Folgendes bieten:

  1. Dynamische Durchsetzung durch Überprüfung der MISRA-Konformität durch statische Codeanalyse jedes Mal, wenn Coder die Software ändern.
  2. Integration der statischen Analyse in Ihre optimierte CI/CD-Pipeline mit kontinuierlichen Tests, die schnell hochwertige Software liefern.
  3. Compliance-Validierung durch Erstellen von detaillierten Übersichten und Berichten auf hoher Ebene, auf die Sie schnell zugreifen können.

Es ist wichtig, die MISRA-Compliance während des gesamten Softwareentwicklungslebenszyklus anzuwenden, einschließlich während der Codeimplementierung für Shift-Left-Tests und um Code-Reviews zu beschleunigen. Dies bietet nicht nur Qualitätsverbesserungen, sondern auch Fortschrittsmetriken, kontinuierliche Rückverfolgbarkeit und Durchsetzung. Die Automatisierung der Dokumentation und des Compliance-Reportings gemäß MISRA Compliance 2020 ist zudem ein wesentlicher Faktor, um Ressourcen und Zeit zu sparen und Frustrationen bei der Behebung der Verstöße selbst zu vermeiden.

Tools wie Parasoft können so konfiguriert werden, dass sie eine Teilmenge des gesamten MISRA-Standards erkennen. Dadurch wird das durch die Analyse erzeugte Rauschen verringert und der Fokus auf die Behandlung schwerwiegender Verstöße erhöht.

Compliance-Berichterstattung

Eines der Probleme im Zusammenhang mit Unternehmen, die MISRA-Konformität erreichen, war das Fehlen eines Standardmechanismus zum Nachweis der Konformität. Um dieses Problem anzugehen, hat MISRA „MISRA Compliance 2020: Achieving Compliance with MISRA Coding Guidelines“ veröffentlicht, das neueste Update, das eine konkretere Definition von „MISRA Compliance“ bietet und mehrere Ergebnisse identifiziert, die zum Nachweis der Einhaltung des MISRA-Standards erforderlich sind.

  • Die Zusammenfassung der Richtlinienkonformität. Eine obligatorische und primäre Aufzeichnung der gesamten Projekt-Compliance. Die GCS enthält einen Eintrag für jede Leitlinie, deren Erfüllungsgrad, Abweichungen und/oder Umkategorisierung.

Screenshot des MISRA Compliance Reports für ein Projekt mit Angabe der Richtlinie, Kategorie (beratend oder erforderlich), Compliance (konform mit Verstößen, nicht konform oder konform), Anzahl der Verstöße und Anzahl der Abweichungen.

  • Der Guideline Re-Kategorisierungsplan. Alle verbindlichen Richtlinien müssen befolgt werden, um die Einhaltung zu erreichen. Erforderliche und beratende Richtlinien können jedoch in strengere Kategorien (z. B. von beratend zu erforderlich) umkategorisiert werden, aber nur Beratungsrichtlinien können in weniger strenge Kategorien umkategorisiert werden (z. B. von beratend zu abgelehnt).

Screenshot eines MISRA Guideline Rekategorisierungsplans mit Parasoft C/C++test als Analysewerkzeug. Der Plan listet MISRA-Leitlinienbeschreibungen mit ursprünglichen und überarbeiteten Kategorien auf.

  • Abweichungsbericht. Ihr Projekt kann Abweichungen von Richtlinien oder Regelverstößen aufweisen und dennoch als konform angesehen werden, wenn die Abweichungen begründet, im Bericht dokumentiert sind und die Sicherheit nicht beeinträchtigen.

Screenshot des MISRA Abweichungsberichts mit Parasoft C/C++test als Analysewerkzeug. Der Bericht listet jede Regel und den Status von Keine Regeln aktiviert, Keine Abweichungen oder Abweichungen auf. Bietet für diejenigen mit Abweichungen Details wie Regel-ID, Abweichungstyp und Änderungshistorie.

  • Richtlinien-Durchsetzungsplan. Demonstriert, wie jede MISRA-Richtlinie überprüft wird. Im Kontext der MISRA-Konformität mit Parasoft ordnet die GEP die MISRA-Richtlinien den Parasoft-Codeanalyseregeln und der DTP-Funktionalität zu.

Screenshot des MISRA-Richtliniendurchsetzungsplans, der Richtlinien, Kategorie, Beschreibung, Compiler, Parasoft-Regel-ID und manuelle Überprüfungsdetails auflistet.

Zertifiziert für die Verwendung mit sicherheitskritischer Software, einschließlich in Medizinprodukten

C/C++test ist vom TÜV SÜD zertifiziert und automatisiert die Anwendung und Überwachung von Analysecodierungskriterien wie MISRA. Dazu gehört eine Unit-Test-Plattform. Diese Plattform integriert die Erstellung von Tests und deren Ausführung sowie die Berichterstattung über die Abdeckung. Dann der zentralisierte Analyse- und Reporting-Hub von Parasoft Parasoft DTP, das ebenfalls TÜV-zertifiziert ist, aggregiert und korreliert Analyse- und Prüfdaten aus den Parasoft C / C ++ test.

Erreichen der vollständigen MISRA-Konformität mit Legacy-Code, einschließlich eingebetteter Systeme

Es ist eine Tatsache, dass Entwickler Legacy-Code für sicherheitskritische Software wiederverwenden. Die Wiederverwendung von Legacy-Code und die Verwirklichung der vollständigen MISRA C 2012-Konformität kann jedoch entmutigend sein.

Die Einhaltung von MISRA ist beim Schreiben von Code viel einfacher zu verwalten und zu erreichen. Das Dokument MISRA C 2012 enthält sogar eine Warnung, die wir bei der Anwendung auf Legacy-Programme interpretieren können:

„ … ein Projekt, das die MISRA-Konformität erst spät in seinem Zyklus überprüft, wird wahrscheinlich viel Zeit mit der Neucodierung, erneuten Überprüfung und erneuten Prüfung verbringen. Es wird daher erwartet, dass der Softwareentwicklungsprozess die frühzeitige Anwendung der MISRA C-Prinzipien erfordert.“

Unter Hinweis auf die Wiederverwendung von Legacy-Software hat das MISRA Consortium Limited, die für die Erstellung und Pflege des MISRA-Standards verantwortliche Organisation, die heute aktualisierte und aktuelle Version von MISRA Compliance:2020 erstellt. Dieses Dokument bietet eine Anleitung für Entwickler, die neuen Code schreiben, und für diejenigen, die übernommenen oder veralteten Code verwenden.

Die Unterscheidung ist jedoch möglicherweise nicht ganz klar. Zum Beispiel schreibt ein Programmierer während der Produktentwicklung Software für einen Prototyp, nur um herauszufinden, dass das Projekt MISRA-Konformität erfordert, also muss er oder sie die Richtlinien zurückverfolgen und anwenden. Obwohl MISRA nicht auf Legacy-Code angewendet wird, ist es ähnlich, dass beim Scannen oder Analysieren des Codes Tausende, wenn nicht sogar Zehntausende von Verstößen aufgedeckt werden. Hinzu kommt die Tatsache, dass die Entwickler von eingebetteter Software oft sagen, dass die Entwicklung von vollständig konformem Code zu schwierig ist, die Aufgabe, MISRA zu erfüllen, kann überwältigend erscheinen. Aber es ist möglich, einen realistischen Mittelweg zwischen „einschüchternd“ und Compliance zu finden.

Betrachten Sie das Endziel

MISRA Compliance 2020 hilft zu klären, wie die Konformität am Ende eines Projekts nachgewiesen und nachgewiesen werden kann. Die Abgabe der vier obligatorischen Dokumente ist ein Muss. Berücksichtigen Sie Folgendes für die Einhaltung von Legacy- und neuem Code:

  1. Haben Sie zu Projektbeginn einen GRP (Guideline Re-kategorization Plan) erstellt? Die MISRA-Standards schlagen vor, mit dem Kunden zu verhandeln und auch mehrere GRPs zu erstellen, die auf den übernommenen Code zugeschnitten sind, den Entwickler ohne Änderung sowie für neuen Code verwenden können.
  2. Hat der Kunde die GPS-Vorlagen (Guidelines Compliance Summary) zu Beginn des Projekts überprüft? Sind sie vollständig und akzeptabel?

Parasoft automatisiert die notwendigen Berichte, um Unternehmen bei der Erfüllung der MISRA 2020 Compliance Agenda zu unterstützen.

Ein inkrementeller Ansatz

Es ist klug, einen Workflow einzurichten, um Verstöße in einem vernünftigen Zeitplan zu beheben, ohne die Entwicklung des Codes zu unterbrechen und ihn daher zu verschlechtern. Zu den wichtigsten Empfehlungen gehören:

  • Festlegen einer Grundlinie. Markieren Sie die Verstöße nach dem ersten Scan als „Später adressieren“ und legen Sie dies als Ausgangswert fest. Von diesem Zeitpunkt an sollten Programmierer, wenn sie neuen Code entwickeln, die Strategie „keine neuen Verstöße“ beibehalten.
  • Frist setzen. Legen Sie ein Datum fest, nach dem Entwickler alle Verstöße für jede Quelldatei behoben haben müssen.
  • Priorisierung nach Schweregrad. Der Teamleiter wählt die Verstöße nach ihrer Schwere aus, und die Entwickler beheben alle, die sie oder er ihnen zuweist.

Um dies zu vereinfachen, enthält der DTP-Reporting-Hub von Parasoft ein Compliance-Status-Dashboard.

So wählen Sie ein modernes statisches Analysewerkzeug aus

Werkzeugqualifikation

Ziel der Qualifizierung von Werkzeugen ist es, ihre Gültigkeit für die beabsichtigte Verwendung zu bescheinigen. Es enthält Beweise dafür, wie das Team sie qualifiziert hat, und die Gründe dafür. Parasoft C/C++test und unser Reporting-Tool Parasoft DTP wurden für den Einsatz in sicherheitskritischen Anwendungen vom TÜV SÜD zertifiziert und es existiert ein Tool-Qualifizierungs-Kit für einige der strengsten Prozessstandards wie DO-178B / C. und was sie benötigen.

Mitarbeiterschulung und -kompetenz

Der MISRA-Standard betont auch Kompetenz, Fachwissen und Schulung des Personals als Schlüsselfaktoren für die Bewertung der Produktreife. Dazu gehört das Erkennen der Risiken von Verstößen sowie die richtige Konfiguration und Verwendung von Entwicklungstools und statischer Analyse.

Fazit

Es ist wichtig, die MISRA-Compliance während des gesamten Softwareentwicklungslebenszyklus zu unterstützen. Mit der umfassenden Lösung von Parasoft ist es einfacher, die Einhaltung von MISRA zu erreichen. Durch die kontinuierliche Durchsetzung, Rückverfolgbarkeit und die Automatisierung der Dokumentation können Teams Zeit und Ressourcen sparen und Frustrationen, die mit der Einhaltung dieser Richtlinie einhergehen, abbauen.

Integrieren Sie einfach statische Analysen, Unit-Tests und andere Testmethoden in Ihre CI/CD-Pipeline.

 

„MISRA“, „MISRA C“ und das Dreieckslogo sind eingetragene Marken von The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Alle Rechte vorbehalten.

Von Ricardo Camacho

Ricardo ist Senior Technical Product Marketing Manager für die eingebetteten Testlösungen von Parasoft und verfügt über Erfahrung in der SDLC- und Testautomatisierung eingebetteter Echtzeit-, sicherheits- und sicherheitskritischer Anwendungen sowie in der Softwarekonformität mit Industriestandards.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.