www.wikidata.de-de.nina.az
MISRA C ist ein C Programmierstandard aus der Automobilindustrie der von der englischen MISRA Motor Industry Software Reliability Association erarbeitet wurde Der MISRA C Programmierstandard definiert eine Untermenge des Sprachumfangs von C d h er umfasst Richtlinien die zu einer Qualitatssteigerung insbesondere der Softwarequalitatsaspekte der Zuverlassigkeit und Wartbarkeit in der Software Entwicklung fuhren sollen Inhaltsverzeichnis 1 Geschichte 2 Ziele des Standards 3 Compliance 4 Beispiele 4 1 Verschachtelte Kommentare 4 2 Ergebnis von Zuweisungen 4 3 Weitere Beispiele 5 Pruf Werkzeuge 6 Literatur 7 Weblinks 8 EinzelnachweiseGeschichte BearbeitenDer erste MISRA Standard fur die Programmiersprache C MISRA C wurde ursprunglich 1998 definiert Inzwischen sind weltweit uber 7000 Exemplare im Umlauf 1 Auch in anderen Branchen wird er fur sicherheitskritische Produkte zunehmend eingesetzt z B im Flugzeugbau beim Militar in der Medizin und im Schienenverkehr Der erste Standard MISRA C 1998 umfasste 127 Regeln davon 93 als Vorschrift required und 34 als Empfehlung advisory Die Ausgabe MISRA C 2004 umfasste 144 Regeln davon 112 required 29 advisory und 3 deprecated veraltet abgelehnt Die beiden Ausgaben nehmen Bezug auf C89 C90 nicht auf die neueren C Standards C99 ISO IEC9899 1999 oder C11 ISO IEC9899 2011 Die aktuelle Ausgabe MISRA C 2012 MISRA C Version 3 ist im Marz 2013 herausgekommen und unterstutzt auch C99 Ausserdem wurde sie im Hinblick auf Verstandlichkeit umstrukturiert und inhaltlich verbessert Seit 2008 gibt es den MISRA Standard fur C MISRA C 2008 Ziele des Standards BearbeitenZiel der MISRA Regeln ist es Programme so sicher zu erstellen dass sie auch in sicherheitskritischen Anwendungen zuverlassig laufen Dazu gibt MISRA C vor allem Empfehlungen zu Sprachkonstrukten die im C Standard unklar spezifiziert sind so dass der Hersteller des Compilers eine eigene Interpretation wahlen muss die von Compiler zu Compiler unterschiedlich sein kann und moglicherweise dazu fuhrt dass der gleiche Quelltext auf unterschiedlichen Compilern zu unterschiedlichen Programmen fuhrt MISRA C enthalt ebenfalls Regeln welche die Lesbarkeit des Quelltextes verbessern und typische Fehler vermeiden sollen Wenn einzelne Regeln im Projekt oder einzelnen Modulen nicht angewendet werden sollen so muss ein vorher definierter formeller Prozess eingehalten werden wobei die Abweichungen auch dokumentiert werden mussen Andere MISRA Veroffentlichungen beschaftigen sich mit weiteren Aspekten der Softwareentwicklung Compliance BearbeitenMISRA C Compliance einer Codebasis bedeutet die Regelkonformitat des Quellcodes eines Projekts zu den Richtlinien des MISRA Standards Um dies nachzuweisen ist eine Compliance Matrix erforderlich also ein Dokument anhand dessen nachvollzogen werden kann welche Richtlinie wo und wie gepruft wird z B durch Compiler statische Code Analyse Reviews zusatzliche Projektdokumentation usw MISRA C Compliance ist nicht gleichbedeutend mit der blinden Einhaltung aller Regeln Auch Abweichungen sind z T erlaubt Dazu sind die MISRA C Richtlinien in drei Prioritats Kategorien unterteilt mandatory Regeln mussen eingehalten werden Abweichungen sind nicht erlaubt required Regeln sollten eingehalten werden Abweichungen mussen uber einen formalen Abweichungsprozess beantragt technisch begrundet gepruft und dokumentiert werden advisory Regeln sollten eingehalten werden Abweichungen mussen nicht formal beantragt werden sollten aber dokumentiert werden Die Zuordnung zu den Prioritats Kategorien ist unterschiedlich fur manuell implementierten C Code und fur C Code der mittels eines Codegenerators erzeugt wurde siehe Anhang E Applicability to automatically generated code Der technische Gesamtumfang der einzuhaltenden Richtlinien andert sich daher nicht sondern nur die geforderte Strenge diese einzuhalten Beispiele BearbeitenVerschachtelte Kommentare Bearbeiten Kommentare konnen seit C99 sowohl mit Kommentar endet stets am Zeilenende als auch mit eingeleitet und in einer beliebigen anderen Zeile mit beendet werden Nach den MISRA Regeln ist der Gebrauch von jedoch nicht erlaubt 2 Ebenso ist es nicht erlaubt innerhalb eines Kommentarblockes ein weiteres Mal zu verwenden verschachtelte Kommentare 3 In dem folgenden Beispiel wurde die Funktion meineFunktion nicht ausgefuhrt da versehentlich ein Kommentarabschluss vergessen wurde Deshalb sind eingebettete nicht erlaubt Kommentar ohne Abschluss lt neue Seite gt meineFunktion Dieser Kommentar hat keine Bedeutung Will ein Programmierer diesen Abschnitt durch und deaktivieren so kommt es auf den Compiler an ob er bei Kommentaren die wie Klammern mitzahlt oder ob er nach dem ersten wieder Code erkennt und kompiliert Code testweise deaktivieren i um 1 erhohen i Wenn Zahler i gleich a ist MeineFunktion aufrufen um einen hoch if i a meineFunktion a Wenn der Compiler das erste als Ende des Kommentars versteht dann wird die Zeile mit dem if kompiliert und spater auch ausgefuhrt Aus diesem Grunde sollte nicht mit geschachtelten Kommentaren gearbeitet werden Ergebnis von Zuweisungen Bearbeiten Die folgende Variante ist schlecht weil man nicht nachvollziehen kann ob der Programmierer einen Fehler gemacht hat oder absichtlich dieses Konstrukt gewahlt hat if i a Anweisung Der Compiler wurde diese Variante erkennen und ubersetzen zu Zuweisung i a dann ein Vergleich if i 0 Anweisung Moglicherweise meinte der Programmierer und hat versehentlich geschrieben so dass die Anweisung nur bei Gleichheit von i und a ausgefuhrt werden soll if i a Anweisung Weitere Beispiele Bearbeiten Weitere Beispiele zu MISRA C Richtlinien sind Konstanten in einem vorzeichenlosen Kontext mussen mit einem U Suffix versehen werden 4 Variablen vom Typ float Gleitkommazahlen sollen nicht mit den Vergleichsoperatoren oder getestet werden 5 goto soll nicht verwendet werden 6 magic numbers vermeiden und stattdessen sinnvoll benannte Konstanten verwenden define MAXSIZE 12 Division durch null verhindern if b 0 a b 7 Compilerunabhangigkeit sicherstellen z B shiften neg Zahlen 3 lt lt 4 gt 3 1 lt lt 4 Operatorrangfolgen sind nicht trivial daher Klammern verwenden a amp amp b c gt a amp amp b c Pointerarithmetik vermeiden und Feldgrenzen prufen Rekursion darf in keiner Form auftreten weder indirekt noch direkt Umsetzung einer starken Typisierung 8 Pruf Werkzeuge BearbeitenBei der Programmierung von eingebetteten Systemen im automobilen Umfeld ist MISRA C konformer Code ublicherweise vorgeschrieben Sofern der Compiler nicht optional die MISRA Konformitat uberprufen kann werden zur Uberprufung Werkzeuge zur statischen Code Analyse wie Axivion Suite 9 Astree 10 Lint QA C MISRA oder RuleChecker 11 verwendet Ein Hersteller fur Werkzeuge zur automatischen Code Generierung verweist darauf dass einige Regeln von MISRA C die Ausfuhrungsgeschwindigkeit des Programms verringern konnen 12 Literatur BearbeitenMISRA Veroffentlichungen konnen teilweise auch als PDF Datei auf der Homepage erworben werden MISRA MISRA C 2004 Guidelines for the use of the C language in critical systems ISBN 0952415623 PDF 095241564X Johannes Heuft Der Weg zuruck zur Software Produktivitat 2007 ISBN 978 3 937446 88 2 Kapitel 5 2 4 S 37 41 Kritik an MISRA C und den anwendenden Qualitatssicherern Weblinks BearbeitenWebsite zu MISRA C Website der MISRAEinzelnachweise Bearbeiten http www misra org uk MISRA 2004 Regel 2 2 MISRA 2004 Regel 2 3 MISRA 2004 Regel 10 6 MISRA 2004 Regel 13 3 MISRA 1998 Regel 56 und MISRA 2004 Regel 10 4 MISRA 2004 Regel 21 1 MISRA C 2012 Rule 10 1 10 8 Produktseite von Axivion Axivion GmbH abgerufen am 14 April 2020 Produktseite von Astree AbsInt Angewandte informatik GmbH abgerufen am 24 November 2017 Produktseite von RuleChecker AbsInt Angewandte Informatik GmbH abgerufen am 24 November 2017 Artikel und Beispiele von dSpace abgerufen am 29 Oktober 2011 PDF 78 kB Abgerufen am 5 November 2011 Abgerufen von https de wikipedia org w index php title MISRA C amp oldid 219573454