Silbernes Jubiläum der MISRA

MISRA C:2023 veröffentlicht

26. August 2023, 11:00 Uhr | Von Frank Büchner
© Maurizio Targhetta | stock.adobe.com

In schneller Folge hat MISRA Amendment 3 und Amendment 4 zu MISRA C:2012 veröffentlicht. Kurz danach wurde mit MISRA C:2023 eine konsolidierte Version der bisherigen Amendments und tech- nischen Korrekturen veröffentlicht; das ist 25 Jahre nach der ersten Ausgabe der MISRA-Richtlinien.

Diesen Artikel anhören

Standards zur Entwicklung von sicherheitskritischen Systemen wie IEC 61508 oder ISO 26262 empfehlen, dass Codierrichtlinien eingesetzt werden. Das ist besonders wichtig, wenn die »gefährliche« Programmiersprache C verwendet wird, was in vielen Projekten nach wie vor der Fall ist.

passend zum Thema

 Editionen und Revisionen von MISRA C von Anfang bis heute
Tabelle 1. Editionen und Revisionen von MISRA C von Anfang bis heute.
© Hitex

Durch die Codierrichtlinien soll die Sprache eingeschränkt werden, um mehrdeutige Spracheigenschaften und mögliche Laufzeitfehler zu verhindern (siehe Tabelle 1 in Teil 3 der ISO 26262:2018, Methode 1b). Dies kann durch die Einhaltung der MISRA-Vorgaben erreicht werden. So sind die MISRA-Richtlinien zu den wichtigsten und bekanntesten Codierrichtlinien für C geworden. ISO 26262 erwähnt MISRA sogar explizit, in der Notiz zu Tabelle 6 in Teil 3 der ISO 26262:2018.

Frühere Amendments und andere Dokumente

Zusatzdokumente zu MISRA C:2012 im Laufe der Zeit
Tabelle 2. Zusatzdokumente zu MISRA C:2012 im Laufe der Zeit.
© Hitex

Die erste Ausgabe der MISRA-Richtlinien erschien 1998, die zweite Ausgabe 2004 und die dritte Ausgabe 2013. Das war MISRA C:2012 (Tabelle 1). Seitdem wurde diese Richtlinie durch Zusatzdokumente erweitert, geändert und kommentiert (Tabelle 2). Wesentlich sind die Amendments (Änderungen) und die Technical Corrigenda (technische Korrekturen), denn dadurch wird die eigentliche Richtlinie geändert. Sogenannte Addenda vergleichen die Vorgaben in anderen Richtlinien mit den Vorgaben in MISRA C:2012; Addenda verändern MISRA C:2012 nicht. Ein Permit (Erlaubnis, Bewilligung) und die Compliance-Dokumente helfen die Konformität zu MISRA zu erreichen.

Durch Technical Corrigenda werden Fehler in der Richtlinie korrigiert oder es werden Klarstellungen vorgenommen. Durch Amendments kommen Vorgaben zur Richtlinie hinzu oder es werden Vorgaben geändert.

Vorgaben können Direktives (Direktiven) oder Rules (Regeln) sein. Bei Direktiven kann es schwierig sein, zu entscheiden, ob sie eingehalten sind oder nicht, insbesondere für statische Analysewerkzeuge. Oft werden Zusatzinformationen benötigt, beispielsweise ob der Compiler Warnungen ausgibt oder nicht. Bei Regeln können statische Analysewerkzeuge prinzipiell aus dem Quellcode – und Zusatzinformation, wie beispielsweise der Integer-Größe – entscheiden, ob eine Regelverletzung vorliegt oder nicht.

Das wird allerdings eingeschränkt durch die Unentscheidbarkeit mancher Regeln. Die Unentscheidbarkeit ist ein Problem der Informatik und hängt nicht vom verwendeten Analysewerkzeug ab. Für unentscheidbare Regeln lassen sich Warnhinweise »False Positives« (Regelverletzung wird gemeldet, liegt aber in Wahrheit nicht vor) oder »False Negatives« (Regelverletzung wird nicht gemeldet, liegt aber in Wahrheit vor) nicht vermeiden. Leider sind wichtige Fragestellungen, beispielsweise ob ein Stack-Objekt gelesen wird, bevor es initialisiert wurde (Regel 9.1), nicht entscheidbar.

Mit allen Amendments hat MISRA C:2012 nun insgesamt 221 Vorgaben
Tabelle 3. Mit allen Amendments hat MISRA C:2012 nun insgesamt 221 Vorgaben.
© Hitex

Das bereits ältere Amendment 1 erweitert MISRA C:2012 um eine Direktive und 13 Regeln. Der Schwerpunkt von Amendment 1 ist Security (Tabelle 3). Amendment 2 erweitert MISRA C:2012 um zwei weitere neue Regeln. Der Schwerpunkt von Amendment 2 ist die Erweiterung der Richtlinie für die Kernfunktionen des Sprachstandards C11, denn bis dahin galt MISRA nur für C90 und C99. Natürlich kamen in beiden Amendments nicht nur neue Vorgaben hinzu, sondern es wurden auch etliche geändert.

Der Schwerpunkt der beiden kürzlich erschienenen Amendments 3 und 4 ist die Fortsetzung der Erweiterung von MISRA C:2012 für den Sprachstandard C11 und C18. C18 ist aber eigentlich nur eine Korrektur von C11; deshalb ist im Folgenden mit C11 auch immer C18 mit gemeint.

Amendment 3

Amendment 3 (AMD 3) enthält eine neue Direktive und 23 neue Regeln. Drei bereits vorhandene Direktiven und neun bereits vorhandene Regeln wurden verändert. Die folgenden drei Funktionen von C11 werden (mit Einschränkungen) durch AMD 3 erlaubt:
➔ No-return-Funktionen,
➔ die Ausrichtung von Objekten mit dem Schlüsselwort »alignas« und
➔ Typ-generische Ausdrücke.
Außerdem gibt es vertiefende Anleitungen zu drei Funktionen, die es bereits in C99 gab:
➔ Typ-generische mathematische Macros,
➔ Fließkommazahlen und
➔ komplexe Zahlen.

Aber nicht alle neuen Vorgaben betreffen die obigen Themen, es gibt auch neue Regeln, die sogar bereits für den Sprachstandard C90 angewendet werden können, beispielsweise Regel 17.12, in der es um die unmissverständliche Verwendung von Funktionsnamen geht.

Amendment 4

Amendment 4 (AMD 4) erweitert MISRA C:2012 um drei neue Direktiven und 19 neue Regeln. Fünf Regeln wurden geändert. AMD 4 enthält auch technische Korrekturen; diese betreffen acht Regeln. AMD 4 schließt die Erweiterungen von MISRA für C11 ab und erlaubt (mit Einschränkungen) Atomic-Funktionen und Nebenläufigkeit (Threads). Außerdem gibt es vertiefende Anleitungen zu vier Problematiken, die es bereits in C90 oder C99 gab:
➔ Kleine Integer-Konstanten,
➔ unbenutzte Objekte,
➔ verkettete Initialisierung und
➔ variably-modified Arrays.

Alle drei neuen Direktiven dienen der Vermeidung von Problemen durch Nebenläufigkeit, ebenso wie fünfzehn der neuen Regeln. Es gibt vier neue Regeln ohne Bezug zur Nebenläufigkeit. Acht bereits vorhandene Regeln werden angepasst.

Erweiterung von Addendum 3

Sowohl AMD 3 als auch AMD 4 erweitern Addendum 3. Addendum 3 vergleicht die MISRA-Vorgaben mit dem SEI-CERT-C-Coding-Standard – in der Ausgabe von 2016 – für sicheres (secure) Programmieren. Mit AMD 1, AMD 3 und AMD 4 zusammen werden nun schlussendlich 93 der 99 Vorgaben – also 94 % – aus CERT durch Vorgaben aus MISRA abgedeckt, allerdings manche nur teilweise. Trotzdem decken die mehr mit Safety assoziierten Vorgaben aus MISRA auch gut die explizit für Security gedachten Vorgaben von CERT ab.

Nach 25 Jahren: Bündelung in einem Dokument

Sehr kurz nach dem Erscheinen von AMD 4 konsolidiert MISRA die vier Amendments und die zwei technischen Korrekturdokumente zu MISRA C:2012 in eine neue Version von MISRA, die den Namen MISRA C:2023 erhält. Eigentlich müsste dies die vierte Ausgabe von MISRA sein, aber im Zusatz auf der Titelseite wird MISRA C:2023 als dritte Ausgabe, zweite Revision bezeichnet, siehe Tabelle 1. Dies ist nun wenig stringent, aber weil MISRA C:2023 keine Restrukturierung von MISRA C:2012 ist, sondern eine inkrementelle Weiterentwicklung, und um das 25-jährige Jubiläum zu würdigen, hat sich MISRA zu dieser Bezeichnung entschlossen.

MISRA C:2023

MISRA C:2023 ist ein wichtiger Schritt in der Entwicklung der MISRA-Richtlinien, denn es erleichtert die Arbeit mit den Vorgaben enorm. Wollte man bisher Genaues zu einer bestimmten Vorgabe wissen, musste man ein halbes Dutzend Dokumente – die Amendments und Technical Corrigendas – durchsuchen. Nun ist alles in einem Dokument zusammengefasst. Zudem sind die MISRA-Vorgaben nun auch für Projekte anwendbar, die konform zu C11 bzw. C18 sind. Das heißt jedoch nicht, dass MISRA C:2023 irrelevant für Projekte nach den älteren Sprachstandards C90 und C99 ist, denn MISRA C:2023 enthält auch neue und geänderte Regeln für diese Sprachstandards.

Alle Amendments und weiteren Dokumente können kostenlos von der MISRA-Website (www.misra.org.uk) abgerufen werden. MISRA C:2023 gibt es momentan nur als PDF-Version, diese kostet 15 GBP, etwa 17 bis 18 Euro, für einen Nutzer. Print-on-Demand ist geplant.

Frank Büchner von Hitex
Frank Büchner von Hitex.
© Hitex

Der Autor

Frank Büchner hat ein Diplom in Informatik von der Technischen Hochschule Karlsruhe, heute KIT. Seit vielen Jahren widmet er sich dem Thema Testen und Softwarequalität. Momentan arbeitet er als Principal Engineer Software Quality bei Hitex in Karlsruhe.
frank.buechner@hitex.de


Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu Hitex GmbH

Weitere Artikel zu Entwicklung und Test

Weitere Artikel zu Softwareentwicklung

Weitere Artikel zu Echtzeit-/Embedded Software