Empfohlenes Webinar: KI-gestütztes API-Testing: Ein No-Code-Ansatz zum Testen | Zum Video

MISRA C/C++ Codeprüfung Check

Kopfbild von Ricardo Camacho, Director of Safety & Security Compliance
30. November 2023
10 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 statische Analyse und die SAST-Lösungen von Parasoft Ihnen dabei helfen können, die MISRA-Compliance-Anforderungen zu erfüllen.

MISRA ist der legendäre Programmierstandard, an dem Entwicklungsteams einen großen Teil der heutigen Software messen. Aber genau Was ist MISRA??

  • Wie hat sich MISRA entwickelt?
  • Wie messen C- und C++-Entwickler Standards daran?
  • Woher wissen sie, dass sie die MISRA-Richtlinien einhalten?

In diesem Stück untersuchen wir den überzeugenden Hintergrund, wie MISRA entstanden ist. Wir beantworten auch die oben genannten Fragen und zeigen, wie MISRA C++- und C-Code-Programmierern hilft, Code effizient zu schreiben und gleichzeitig aktuelle Sicherheitsbedenken anzugehen.

Konkret betrachten wir:

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

Was ist MISRA?

Die MISRA-Standards enthalten Programmierrichtlinien und Regeln zum Schreiben von Software. Unter anderem die Automobil-, Luft- und Raumfahrt- und Verteidigungsindustrie, die Medizintechnik, die Industrieautomation und die Eisenbahnindustrie verwenden den Standard, um ihren Entwicklern beim Schreiben von Quellcode zu helfen, der die Sicherheit und Zuverlässigkeit der Software gewährleistet.

Da Ingenieure eingebetteter Software die Programmiersprachen C und C++ verwenden, um Code für sicherheitskritische Software zu schreiben, haben die Ersteller des MISRA-Standards sie für Programmierer entwickelt, die diese beiden Sprachen verwenden.

Hintergrund

Das Konsortium der Motor Industry Software Reliability Association (MISRA) besteht aus verschiedenen Unternehmen, die ihre Best Practices für die C- und C++-Codierung austauschen. Es ähnelt der ISO (International Standards Organization) und der IEC (International Electrotechnical Commission), die allgemeine Compliance-Richtlinien der Branche wie Standards für die Entwicklung elektrischer/elektronischer Systeme festlegen.

ISO 26262 , veröffentlicht im Jahr 2011, ist der internationale Standard zur Zertifizierung der Sicherheit von elektronischen Straßenfahrzeugen. Softwaresysteme, die die ISO/IEC-Konformität erreicht haben, können von Verifizierungsstellen als sicher zertifiziert werden.

MISRA, ein Konsortium von Automobilindustrien, entwickelte 1998 seine ersten Richtlinien, MISRA C:1998. Das Konsortium kam als Ergebnis des UK Safety Critical Systems Research Programme zusammen, das von der britischen Regierung ins Leben gerufen wurde, um einige der Herausforderungen anzugehen, mit denen die Automobilindustrie aufgrund des zunehmenden Einsatzes von Software bei der Herstellung und dem Betrieb von Fahrzeugen konfrontiert ist. Zu den ursprünglichen Branchen, die an der Entwicklung des Standards mitgewirkt haben und die alle derzeit auch aktive Mitglieder des Lenkungsausschusses sind, gehören:

  • 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, andere Embedded-Branchen haben den Standard übernommen, darunter auch solche, die Embedded-Technologie verwenden, die Geräte wie das Internet der Dinge (IoT) und medizinische IoT-Systeme verbindet.

Das Wie und Warum von MISRA

Anfang der 1990er-Jahre gewann die Elektronik im Automobil immer mehr an Bedeutung. Ebenso die eingebettete Software, die ein integraler Bestandteil dieser Elektronik war. Daher 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 sogar noch größer, da die Software für ein einzelnes Auto mehr als 100 Millionen Codierungszeilen 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 als ECU oder Motorsteuergerät bezeichnet). Dies ist der Hauptcomputer des Fahrzeugs, der Informationen über den Kraftstoffverbrauch, die vom Motor erzeugte Leistung, Emissionen und andere wichtige motorbezogene Daten sammelt, die für ein sicheres und effizientes Fahren unerlässlich sind. Elektrofahrzeuge (EVs) und Hybridfahrzeuge haben ähnliche Softwareanforderungen in Bezug auf Motor und Antriebsstrang.

Hersteller verwenden auch Software, um Bordcomputer für die allgegenwärtigen Sensoren in aktuellen Fahrzeugen zu betreiben, einschließlich Tür- und Fensterüberwachung, Klimaanlagen sowie Park- und Verkehrssensoren. Sie verwenden sie auch in sicherheitskritischen Systemen wie Airbags und ABS.

Die Zukunft von Straßenfahrzeugen wird sicherlich mehr betriebsbezogene Software beinhalten, wobei Ingenieure und Designer ernsthafte Aufmerksamkeit auf Selbstfahrfähigkeiten, verbesserte Energieeffizienz und erhöhte Sicherheit richten.

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, prägnant und auf das Wesentliche konzentriert sind.

Während die Anwendung des MISRA-Standards nicht garantiert, dass Software frei von Sicherheits- und Qualitätsproblemen ist, hilft er Softwareentwicklern, Code zu schreiben, der sicherer, robuster, portabler und einfacher zu warten ist.

Die MISRA-Richtlinien behandeln auch Sicherheitslücken, aber andere Codierungsstandards wie CERT C gehen speziell auf Sicherheitslücken ein, die in Code geschrieben sind.

MISRA-Kodierungsstandards für funktionale Sicherheit

Heutzutage verwenden Entwicklungsteams Codierungsstandards als Methode zum Definieren, Verwalten und Verwenden einer Gruppe von Codierungspraktiken mit dem Hauptziel der Konsistenz. Das Hauptziel einer Codierungsregel besteht darin, die falsche Verwendung der Sprache zu begrenzen, damit sie den Entwickler daran hindert, Dinge zu tun, die „falsch“ sind und potenziell gefährlich sein können.

Entwickler können viele Fehler in der Software vermeiden, indem sie vernünftige Sprachverwendungsbeschränkungen anwenden. Dies führt auch zu einer Stileinheitlichkeit, die als Disziplin in einem Softwareprojekt wertvoll ist.

Vielseitigkeit und Anfälligkeit von C und C++

Der Vielseitigkeitsaspekt des C und C ++ Sprachen ermöglichen es einem Entwickler, Code zu schreiben, der unbeabsichtigt falsch und möglicherweise gefährlich sein kann. Es fällt ihm oder ihr leicht, Code zu schreiben, der den Anforderungen des Sprachstandards entspricht, aber dies kann dennoch zu unerwünschtem Verhalten und Programmabstürzen führen. Beispielsweise Code, der über die Parameter eines arithmetischen Prozesses oder eines Arrays hinaus auf Speicher zugreift, was zu Speicher- oder Grenzverletzungen führt.

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

Der MISRA-Standard betont, dass die Einhaltung von Programmierregeln nur eine Komponente erfolgreicher Softwareentwicklung ist. Entwickler müssen jedes Programmierprojekt in ein diszipliniertes Engineering-Umfeld integrieren, das methodische Entwicklungsworkflows umfasst und bewährte Validierungstools im Einsatz anwendet.

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

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

Schauen wir uns die C- und C++-MISRA-Codierungsstandards und kurze Beschreibungen an.

MISRA C 2012. MISRA C 2012 wurde 2013 veröffentlicht. Es stützte sich auf Erfahrungen aus der Interaktion mit Tausenden von Organisationen und Best Practices von Softwareentwicklern, um die besten Programmierrichtlinien für die Programmiersprache C bereitzustellen.

Die erste Ausgabe des Standards war MISRA C 1998 und entwickelte sich im Laufe der Jahre zu MISRA C:2004 und dann zu MISRA C:2012. Ursprünglich bot der Standard Unterstützung für C90 und wurde weiterentwickelt, um seine Richtlinien zur Unterstützung von C99, C11 und C18 zu erweitern. MISRA C 2012 hat auch eine Reihe von Verbesserungen vorgenommen, die die Komplexität und die Kosten der Compliance verringert haben.

  • MISRA C 2012 Änderungen für Sicherheit und Schutz. Mit der sich entwickelnden Programmiersprache C und um zu betonen, dass MISRA C 2012 in Sicherheitsanwendungen gleichermaßen wertvoll ist, veröffentlichte MISRA mehrere unterstützende Ergänzungen und Änderungen des Standards, die neue Regeln und Richtlinien für eine verbesserte Abdeckung der Sicherheit und bekannter Sicherheitslücken boten.

MISRA C 2023. Dies ist der neueste MISRA C-Standard. Es konsolidiert MISRA C 2012 zusammen mit allen Änderungen und Berichtigungen, die bis heute veröffentlicht wurden. Der Standard unterstützt die Programmiersprache C, Versionen C90, C99, C11 und C18, und ersetzt MISRA C 2012.

MISRA C++ 2008. Veröffentlicht im Juni 2008 und entwickelt zur Unterstützung von C++98 und C++11. Obwohl die Programmiersprache C die vorherrschende Programmiersprache blieb, sprach dieser Standard für die verstärkte Entwicklung von C++-Anwendungen. Viele Unternehmen haben sich jedoch für die Standardisierung mit dem Codierungsstandard AUTOSAR C++ 14 entschieden, da dieser die C++14-Version der C++-Codierungssprache anstelle des älteren C11 unterstützt. C++-Codierungsversion, offiziell ISO/IEC 14882:2014, wurde im Dezember 2014 veröffentlicht.

MISRA C++ 2023. AUTOSAR und MISRA haben sich zusammengetan, um die nächste Generation des C++-Codierungsstandards zu entwickeln. MISRA C++ 2023 wurde im Oktober 2023 veröffentlicht und bietet Softwareentwicklern die Möglichkeit, ihren modernen C++17- und C++20-Code auf Sicherheitsprobleme zu scannen.

MISRA-Compliance 2020. Dieses Dokument legt einen Rahmen fest, um die Einhaltung des MISRA-Codierungsstandards zu erreichen. Er ersetzt Compliance- und Prozess- und Abweichungsanforderungen in früheren Versionen des Standards.

So erreichen Sie MISRA-Compliance mit statischer Analyse

Der MISRA-Codierungsstandard liefert gründliche Regeln und Richtlinien, damit Unternehmen ihre Anwendungen vor Laufzeitfehlern und Softwareausfällen 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 dies nicht tun statische Analyse verwenden or SAST (statische Anwendungssicherheitstests) Lösungen oder Tools kann die Validierung der Konformität problematisch sein. Parasoft vereinfacht den Prozess, der entscheidend ist, um eine rechtzeitige Softwarelieferung und Programmiersicherheit zu gewährleisten.

Erste Schritte mit der statischen Analyse

Um eine erfolgreiche Konformität zu erreichen, müssen Lösungen Folgendes bieten.

  • Dynamische Durchsetzung durch Verifizierung der MISRA-Konformität durch statische Codeanalyse jedes Mal, wenn Programmierer die Software ändern.
  • Integration der statischen Analyse in Ihre optimierte CI/CD-Pipeline mit kontinuierlichen Tests, die schnell qualitativ hochwertige Software liefern.
  • Compliance-Validierung indem Sie allgemeine, detaillierte Übersichten und Berichte erstellen, auf die Sie schnell zugreifen können.

Es ist wichtig, die MISRA-Konformität während des gesamten Softwareentwicklungslebenszyklus anzuwenden, einschließlich während der Codeimplementierung für Shift-Left-Tests und zur Beschleunigung von Codeüberprüfungen. Dies bietet Qualitätsverbesserungen sowie Fortschrittsmetriken, fortlaufende Rückverfolgbarkeit und Durchsetzung.

Die Automatisierung von Dokumentation und Compliance-Berichten gemäß MISRA Compliance 2020 ist ein Schlüsselfaktor, 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 von der Analyse erzeugte Rauschen reduziert und der Fokus auf die Behandlung schwerwiegender Verstöße erhöht.

Demonstrieren Sie die Einhaltung der Berichterstattung

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

Zusammenfassung der Richtlinienkonformität (GCS). Eine obligatorische und primäre Aufzeichnung der Gesamtkonformität des Projekts. Das GCS enthält einen Eintrag für jede Leitlinie, ihren Übereinstimmungsgrad, etwaige Abweichungen und/oder Neukategorisierungen.

Bildschirmaufnahme des MISRA C 2023 Compliance-Berichts für ein Projekt mit Auflistung 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 Konformität zu erreichen. Erforderliche und beratende Richtlinien können jedoch in strengere Kategorien neu kategorisiert werden, z. B. von beratend zu erforderlich. Allerdings können nur Beratungsleitlinien in weniger strenge Kategorien neu kategorisiert werden, beispielsweise von „Beratend“ zu „Nicht angewendet“.

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.

Bildschirmaufnahme des MISRA-Richtliniendurchsetzungsplans, der Richtlinie, Kategorie, Beschreibung, Compiler, Parasoft-Regel-IDs für MISRA C 2023 und Details zur manuellen Überprüfung auflistet.

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

Zertifiziert vom TÜV SÜD, C/C++test automatisiert die Anwendung und Überwachung von Analyse-Kodierungskriterien wie MISRA. Dazu gehört eine Unit-Test-Plattform, die das Erstellen und Ausführen von Tests sowie Abdeckungsberichte integriert. Dann der zentralisierte Analyse- und Reporting-Hub Parasoft DTP, das ebenfalls TÜV-zertifiziert ist, aggregiert und korreliert Analyse- und Testdaten von Parasoft C / C ++ test.

So erreichen Sie vollständige 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 2023-Konformität kann jedoch entmutigend sein.

MISRA-Compliance ist viel einfacher zu verwalten und zu erreichen, da der Code geschrieben wird. Das MISRA C 2023-Dokument enthält sogar eine Warnung, die wir interpretieren können, wenn wir es auf Legacy-Programme anwenden:

„ … 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.“

MISRA Consortium Limited, die für die Erstellung und Pflege des MISRA-Standards verantwortliche Organisation, hat die Wiederverwendung von Legacy-Software ins Leben gerufen und MISRA Compliance:2020 erstellt. Dieses Dokument bietet Anleitungen für Entwickler, die neuen Code schreiben, und für diejenigen, die übernommenen oder Legacy-Code verwenden.

Die Unterscheidung ist jedoch möglicherweise nicht ganz klar. Beispielsweise 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 zurückgehen und die Richtlinien anwenden.

Während dies MISRA nicht auf Legacy-Code anwendet, ist es insofern ähnlich, als der Code gescannt oder analysiert wird und die Ergebnisse Tausende, wenn nicht Zehntausende von Verstößen aufdecken. Fügen Sie dies der Tatsache hinzu, dass Entwickler eingebetteter Software oft angeben, dass die Entwicklung von vollständig konformem Code zu schwierig ist und die Aufgabe, MISRA einzuhalten, überwältigend erscheinen kann. Es ist jedoch möglich, einen realistischen Mittelweg zwischen Entmutigung und Compliance zu finden.

Betrachten Sie das Endziel

MISRA Compliance 2020 hilft bei der Klärung, wie die Konformität am Ende eines Projekts nachgewiesen und nachgewiesen werden kann. Die Lieferung der vier obligatorischen Dokumente ist ein Muss. Berücksichtigen Sie Folgendes für die Konformität mit 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 erforderlichen 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:

  • Legen Sie eine Grundlinie fest. 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.
  • Legen Sie eine Frist fest. Legen Sie ein Datum fest, nach dem Entwickler alle Verstöße für jede Quelldatei behoben haben müssen.
  • Priorisieren Sie 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.

Werkzeugqualifikation

Das Ziel der Qualifizierung von Tools besteht darin, zu zertifizieren, dass sie für die beabsichtigte Verwendung gültig sind. Es enthält einen Nachweis darüber, wie das Team dazu kam, sie zu qualifizieren, und die Gründe dafür. C/C++test und DTP von Parasoft wurden vom TÜV SÜD für den Einsatz in sicherheitskritischen Anwendungen zertifiziert. Für einige der strengsten Prozessstandards und deren Anforderungen wie z DO-178C.

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.

Schlussfolgerung

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

Erfahren Sie, wie Ihr Entwicklungsteam die umfassendste MISRA-Abdeckung erhalten kann.

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