MISRA C: Quasi-Standard nicht nur für Automotive

Standards  –  61 Kommentare

Der Programmierstandard MISRA C unterstützt C-Programmierer, Anwendungen mit höchster Qualität zu entwickeln. Dabei hilft auch, dass die Regeln sind im neuen Standard MISRA C:2012 klarer definiert und erläutert sowie ihr jeweiliger Einsatz besser begründet sind.

Von Karl Marx stammt folgende philosophische Erkenntnis: "Das Sein bestimmt das Bewusstsein." Nun mag man von dem Denker aus Trier halten, was man will. Übertragen auf die Softwareentwicklung unter einem Kodierungsstandard wie MISRA macht es einen Unterschied, ob man sich als Entwickler nach dessen oft engen und einengenden Restriktionen richten muss. Oder ob man als Patient auf einem Operationstisch liegt, umgeben von unterschiedlichsten Geräten mit komplexer eingebetteter Software und auf Gedeih und Verderb der Hoffnung ausgeliefert, dass diese lebensrettenden Komponenten softwaretechnisch auch tatsächlich funktionieren.

MISRA wurde ursprünglich für die Automobilindustrie entwickelt. Der Standard sollte sicherstellen, dass von unterschiedlichen Herstellern gelieferte Komponenten mit eingebetteter Software fehlerfrei funktionieren -- und wenn nicht, dass sich die Fehler schnell beheben lassen. Mittlerweile hat sich MISRA zu einem Quasi-Standard entwickelt, der weit über Automotive hinausgeht. Wenn es um sicherheits-, lebens- oder missionsentscheidende Anwendungen geht, findet man zunehmend häufiger MISRA als Standard-Kodierungsregelwerk: in der Medizintechnik, wo es nicht selten um Leben oder Tod eines Menschen geht, in der Avionik, wo sich Menschen nicht nur einem Piloten, sondern auch seiner Flugzeugtechnik anvertrauen, in der industriellen Produktion, wo Investitionen durch fehlerhafte Software gefährdet oder sogar vernichtet werden können. MISRA-geprüfter Code ist sicherer, einfacher zu pflegen, konsistenter, verifizierbarer und weist weniger Defekte auf.

Der Sinn von MISRA liegt also auf der Hand: Softwareprobleme gerade dort zu vermeiden, wo es gefährlich und teuer werden kann. Für C-Programmierer, die die Vorteile dieser Programmiersprache gerne vollumfänglich nutzen wollen, bedeutet der Standard jedoch manch herbe Frustration. Denn oft sind es genau die Merkmale von C, die einerseits den Programmieren die Arbeit erleichtern sollen, deren Anwendung andererseits aber gerade die Vorschriften von MISRA C untersagen. Gerade dann, wenn man mit C Hindernisse bei der Softwareprogrammierung elegant umgehen könnte, besteht die Gefahr, von MISRA C daran gehindert zu werden.

MISRA C:2012 mit Regeln ohne Ausnahme

"Den Fortschritt verdanken die Menschen den Unzufriedenen", sagt ein Sprichwort. Und so liegt ein wesentlicher Grund für die Entwicklung des im letzten Jahr veröffentlichten Standards MISRA C:2012 in den Rückmeldungen von Anwendern, die in ihrer täglichen Arbeit mit dem Regelwerk Erfahrungen sammeln konnten und Ergänzungen und Verbesserungen vorgeschlagen haben. MISRA C ist ursprünglich eine Entwicklung aus dem Jahr 1998 und wurde für C90 eingeführt. Eine überarbeitete Version kam dann 2004 heraus. Aber schon damals entsprach MISRA C:2004 nicht dem Stand der Technik. Denn es verlangte, dass der Code C90-konform sein sollte, obwohl diese Sprachversion damals schon von C99 abgelöst worden war. Das lag daran, dass 2004 noch wenige Werkzeuge und Compiler C99-Funktionen unterstützten. Die damalige Arbeitsgruppe ging mit ihrer Entscheidung für C90 den konservativen Weg größtmöglicher Sicherheit.

MISRA C:2004
Im Vergleich zwischen MISRA C:2004 und MISRA C:2012 sind im neuen Standard die Mandatory-Regeln (zwingend einzuhaltende Regeln) sind als neue Gruppe hinzugekommen. Des Weiteren gibt es nun auch 16 Direktiven, die im Vergleich zu den Regeln möglicherweise nicht präzise genug definiert sind.


Doch C99-Konformität ist nur ein Aspekt unter vielen, weshalb es nötig war, mit MISRA C:2012 den Vorgänger zu ersetzen. Die Regeln sind in MISRA C:2012 klarer definiert und erläutert. Ihr jeweiliger Einsatz ist auch besser begründet. Zudem gibt es jetzt drei statt vorher zwei Klassen von Regeln: neben "empfohlenen" (Advisory Rules) und "erforderlichen" Regeln (Required Rules) gibt es nun "zwingend erforderliche" Regeln (Mandatory Rules). Mit MISRA-C:2004 konformer Code sollte so aufgebaut sein, dass die erforderlichen Regeln eingehalten wurden – sofern nicht begründete Ausnahmen ein Abweichen vom Regelwerk nötig machten. Mit der Einführung der zwingend erforderlichen Regeln wird diese Freiheit beschränkt. Mandatory Rules sind nicht verhandelbar, Abweichungen vom Kodierungsstandard sind nicht zulässig. Das MISRA-C:2012-Projektteam hat diese Mandatory-Regeln als solche definiert, weil aus heutiger Sicht keine Situationen denkbar sind, die ein Übertreten der Regeln rechtfertigen würden.