Empfohlenes Webinar: Vorstellung von Parasoft C/C++test CT für kontinuierliche Tests und Compliance-Exzellenz | Zum Video

MISRA C++ 2023 Leitfaden: Alles, was Sie wissen müssen

Porträtfoto von Michal Rozenau, aktives Mitglied der Arbeitsgruppe MISRA C und MISRA C++ und Projektleiter bei Parasoft
4. Januar 2024
5 min lesen

Tauchen Sie ein in MISRA C++ 2023! Erfahren Sie mehr über seine Geschichte, warum es so wichtig ist, die Richtlinien und wie Parasoft vollständige MISRA-Unterstützung für sicherheitskritische Softwareentwicklung bietet.

MISRA C++ 2023 hilft Unternehmen, die die moderne C++-Sprache verwenden, sicherheitskritische Software zu entwickeln. Mit dem neuen MISRA-Standard können Entwickler die statischen Analyseanforderungen von funktionalen Sicherheitsstandards wie IEC 6108 oder ISO 26262 durch Sicherstellung und Dokumentation erfüllen MISRA-Konformität für ihre Softwareanwendungen.

Was ist MISRA C++ 2023?

Gemeinsam haben AUTOSAR und MISRA eine Reihe von Codierungsrichtlinien erstellt, um eine sichere Programmierung mit C++17 zu ermöglichen. Dieses veröffentlichte Dokument ist MISRA C++ 2023.

MISRA C++ ist eine Reihe von Codierungsrichtlinien, die eine Teilmenge der C++-Sprache definieren, die in kritischen Systemen verwendet werden soll, um das Risiko von Fehlern zu verringern und die Gefahr eines nicht konformen Programms zu minimieren.

Der C++-Standard definiert die Sprache nicht vollständig. Es gibt Situationen, in denen das Verhalten undefiniert, nicht spezifiziert oder durch die Implementierung definiert ist. Wenn ein C++-Programm darauf angewiesen ist, gibt es keine Garantie dafür, dass es sich vorhersehbar verhält oder portierbar ist.

Die MISRA-Richtlinien sollen solche Situationen erkennen, um die Sicherheit und Zuverlässigkeit der Software zu gewährleisten. Darüber hinaus können konforme Programme so geschrieben sein, dass sie eindeutig auf einen Fehler im Code schließen lassen oder höchstwahrscheinlich von den Entwicklern falsch interpretiert werden. Die MISRA-Richtlinien zielen auf solche Situationen ab.

Die Entwicklung von MISRA C++

Die erste Veröffentlichung von MISRA C++ im Jahr 2008 konzentrierte sich auf C++03. Es erfreute sich großer Beliebtheit, aber mit den Weiterentwicklungen von C++ und den in C++11 hinzugefügten neuen Funktionen wurde es veraltet. Um diese Lücke zu schließen, veröffentlichte das AUTOSAR-Konsortium im März 2017 AUTOSAR C++-Richtlinien als Teil seiner Adaptive Platform.

Adaptive AUTOSAR verwendet C++14 als Sprache der Wahl, und die Plattform erforderte einen sicherheitsorientierten Codierungsstandard zur Unterstützung von Entwicklern. Ungefähr 70 % der unveränderten MISRA C++2008-Richtlinien wurden in AUTOSAR C++ aufgenommen.

Doch mit der kontinuierlichen Weiterentwicklung der Sprache wurden in C++ 17 neue Sprachfunktionen hinzugefügt, was einen Bedarf an neuen Codierungsrichtlinien erzeugte. MISRA und AUTOSAR beschlossen, Standards in einer Veröffentlichung zusammenzuführen, und MISRA übernahm die Arbeit an der neuen Ausgabe des Standards mit allen für C++17 erforderlichen Updates. Das Ergebnis dieser Arbeit ist MISRA C++ 2023, veröffentlicht im Oktober 2023.

MISRA C++ 2023 Richtlinien und Regeln

MISRA C++ 2023-Richtlinien werden als Regeln oder Richtlinien klassifiziert. Regeln sind Richtlinien, die eine vollständige Definition von Compliance und Noncompliance enthalten. Für Richtlinien ist es nicht möglich, die vollständige Beschreibung bereitzustellen, die zur Durchführung einer Konformitätsprüfung erforderlich ist, da diese beispielsweise von den Entwurfsentscheidungen abhängt, die im Kontext eines bestimmten Projekts getroffen werden.

Jede Richtlinie ist einer der folgenden Kategorien zugeordnet:

  • Verpflichtend
  • Erforderlich
  • Advisory

Regeln werden zusätzlich für die Entscheidbarkeits- und Umfangsanalyse klassifiziert.

Verbindliche Richtlinien müssen eingehalten werden, ohne dass Abweichungen möglich sind. Von den erforderlichen Richtlinien kann abgewichen werden, sofern das formelle Abweichungsverfahren befolgt wird und alle potenziellen Probleme anderweitig entschärft wurden. Bei den Beratungsrichtlinien handelt es sich um eine Art Empfehlung, die im Rahmen der Praktikabilität befolgt werden sollte.

Das Attribut „Entscheidbarkeit“ definiert, ob die Regel generell vom automatisierten Tool analysierbar ist oder nicht. Das Scope-Attribut definiert, ob eine Richtlinie durch Analyse einer einzelnen Übersetzungseinheit oder des gesamten Systems überprüft werden soll.

Es gibt 179 MISRA C++ 2023-Richtlinien, vier Direktiven und 175 Regeln, die in Abschnitte gruppiert sind, die den Abschnitten des C++-Standards entsprechen, darunter die folgenden:

  • Grundlegende Konzepte
  • Standardkonvertierungen
  • Ausdrücke
  • Statements
  • Spezielle Mitgliederfunktionen
  • Ausnahmebehandlung

Einige dieser Regeln sind aus den AUTOSAR Coding Guidelines oder dem alten MISRA C++ 2008 abgeleitet. Die MISRA-Richtlinien konzentrierten sich jedoch nur auf die Implementierung, während AUTOSAR auch Empfehlungen in Bezug auf Design, Toolchain-Infrastruktur oder Dokumentation lieferte. Generell orientiert sich MISRA C++ 2023 an der Semantik des Codes und an der Fehlervermeidung, ohne zu viele stilistische Vorgaben zu machen.

So erreichen Sie MISRA C++ 2023-Konformität

MISRA C++ 2023 stellt Anforderungen an die Einhaltung der im MISRA-Compliance-Dokument definierten Compliance-Prozesse. Es handelt sich um ein separates Dokument, das von den Standards MISRA C und MISRA C++ gemeinsam genutzt wird. Die aktuellste Version wurde 2020 veröffentlicht und ersetzt die frühere Version aus dem Jahr 2016.

MISRA Compliance führt eine Sammlung von Anforderungen an Compliance-Prozesse und -Berichte ein. Es definiert spezielle Berichte, die als Compliance-Artefakte erwartet werden.

  • Der Richtliniendurchsetzungsplan ist ein Dokument, das alle technischen Mittel spezifiziert, die zur Durchsetzung von Richtlinien eingesetzt werden.
  • Der Richtlinien-Rekategorisierungsplan ist ein Dokument, das alle Änderungen in den Richtlinienkategorien beschreibt, die für das spezifische Projekt eingeführt wurden.
  • Die Richtlinien-Compliance-Zusammenfassung ist ein Bericht, der den Grad der Compliance für jede Richtlinie dokumentiert.

Darüber hinaus empfiehlt das Compliance-Dokument einen vollständigen Prozess zur Behandlung von Abweichungen, der Anforderungen an Abweichungsaufzeichnungen, die Verwendung von Abweichungsgenehmigungen und eine Liste von Gründen umfasst, aus denen Abweichungen akzeptabel sind.

Ein standardisierter Satz von Anforderungen für die Geltendmachung der MISRA-Konformität von Projekten hilft Unternehmen dabei, ein angemessenes Maß an Vertrauen zu gewährleisten und die Möglichkeit zu haben, die Compliance-Berichte zu kombinieren, wenn mehrere von Auftragnehmern bereitgestellte Module integriert werden, sofern dies der Fall ist MISRA C/C++-Codeprüfung wurde für jeden von ihnen durchgeführt.

Einige der Richtlinien könnten mithilfe des Code-Review-Prozesses überprüft werden, obwohl dies umständlich wäre. Andere, insbesondere solche, die eine Analyse des gesamten Systems erfordern, einschließlich Richtlinien, die eine Daten- und Kontrollflussanalyse für den gesamten Satz des Anwendungsquellcodes erfordern, können praktisch nicht manuell überprüft werden. Daher ist es wichtig, automatisierte statische Code-Analysetools wie Parasoft zu verwenden C / C ++ - Test, die vollständige Unterstützung für MISRA C++ 2023 bieten, um den Code anhand der MISRA-Richtlinien zu analysieren und die entsprechenden Compliance-Dokumente zu generieren.

Warum ist MISRA C++ 2023 für sichere Software von entscheidender Bedeutung?

Ziel von MISRA C++ ist es, eine sichere Teilmenge der C++-Sprache bereitzustellen. Dies wird durch verschiedene Anforderungen und Einschränkungen an den C++-Quellcode erreicht, um die Sicherheit der Anwendungen zu erhöhen.

Fehlervermeidung

Der C++-Standard spezifiziert bestimmte Situationen als undefiniertes Verhalten, hauptsächlich um Compilern die Generierung effizienterer Codes zu ermöglichen. Compiler dürfen davon ausgehen, dass die undefinierte Verhaltenssituation niemals auftritt, und auf der Grundlage dieser Annahme zusätzliche Optimierungen durchführen. Dies birgt das Risiko, dass sich das Programm in einem solchen Fall unvorhersehbar verhält. Und in manchen Fällen bedeutet dies, dass sich das Programm beim Ausführen der Tests einwandfrei verhält und in der Produktion fehlschlägt, was dazu führen kann, dass der gesamte Verifizierungsprozess sinnlos ist. MISRA C++ bietet Richtlinien, die direkt oder indirekt vor undefiniertem Verhalten schützen. Ein Beispielfall wäre die Bewertung des unbestimmten Werts eines Objekts, vor dem geschützt wird Regel 11.6.2 Der Wert eines Objekts darf nicht gelesen werden, bevor er festgelegt wurde.

Wartbarkeit des Codes

Bestimmte Aspekte der abstrakten Maschine werden im C++-Standard als durch die Implementierung definiert beschrieben. Das bedeutet, dass das Verhalten des Codes klar definiert ist und dokumentiert werden muss, sich jedoch je nach Implementierung unterscheiden kann.

Ein Programm, das vom durch die Implementierung definierten Verhalten abhängt, lässt sich möglicherweise nur schwer auf ein anderes Ziel portieren. Ein Beispiel für ein solches Verhalten wäre das sizeof(int), was sich auf das Verhalten der arithmetischen Operationen auswirkt, z. B. indem alle Operanden mit engeren Typen heraufgestuft werden, bevor die eigentliche Operation ausgeführt wird. Dies kann am Ende je nach Kompilierungsziel zu unterschiedlichen Ergebnissen der Rechenoperation führen. Die C++-Richtlinien von MISRA schützen mit ihren Standardkonvertierungsregeln vor solchen Problemen wie den folgenden:

  • Regel 7.0.5 Integrale Heraufstufung und die üblichen arithmetischen Konvertierungen dürfen die Vorzeichenhaftigkeit oder die Typkategorie eines Operanden nicht ändern.
  • Regel 7.0.6 Die Zuweisung zwischen numerischen Typen muss angemessen sein.

Risikomanagement

Die MISRA-Richtlinien befassen sich auch mit einer Klasse potenzieller Risiken, die durch Verwirrung oder falsches Verständnis des Entwicklers über den gültigen C++-Quellcode entstehen. Zum Beispiel der Code if (x = y) ist vollkommen gültiges C++, ist aber höchstwahrscheinlich auf einen Tippfehler zurückzuführen, bei dem versehentlich der Zuweisungsoperator anstelle des Gleichheitsoperators verwendet wurde. Regel 8.18.2 Das Ergebnis eines Zuweisungsoperators sollte nicht verwendet werden stellt sicher, dass dieser Code gemeldet und auf Richtigkeit überprüft wird.

Zusammenfassung

Die Verwendung angemessener Codierungsrichtlinien und einer sicheren Sprachteilmenge ist in den funktionalen Sicherheitsstandards aus gutem Grund vorgeschrieben. Organisationen, die MISRA C++ 2023-Konformität beanspruchen können, verbessern die Sicherheit ihrer modernen C++-Anwendungen.

Verpasse nicht unseren MISRA C++ 2023-Webinar Weitere Informationen zum Inhalt des MISRA C++ 2023-Dokuments und zu den Unterschieden zwischen AUTOSAR- und MISRA C++-Richtlinien.

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.