MISRA-CMISRA 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 Qualitätssteigerung (insbesondere der Softwarequalitätsaspekte der Zuverlässigkeit und Wartbarkeit) in der Software-Entwicklung führen sollen. GeschichteDer erste MISRA-Standard für die Programmiersprache C „MISRA C“ wurde ursprünglich 1998 definiert. Inzwischen sind weltweit über 7000 Exemplare im Umlauf.[1] Auch in anderen Branchen wird er für sicherheitskritische Produkte zunehmend eingesetzt, z. B. im Flugzeugbau, beim Militär, 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 März 2013 herausgekommen und unterstützt auch C99. Außerdem wurde sie im Hinblick auf Verständlichkeit umstrukturiert und inhaltlich verbessert. Seit 2008 gibt es den MISRA-Standard für C++, MISRA-C++:2008. Ziele des StandardsZiel der MISRA-Regeln ist es, Programme so sicher zu erstellen, dass sie auch in sicherheitskritischen Anwendungen zuverlässig 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 wählen muss, die von Compiler zu Compiler unterschiedlich sein kann und möglicherweise dazu führt, dass der gleiche Quelltext auf unterschiedlichen Compilern zu unterschiedlichen Programmen führt. MISRA-C enthält 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 müssen. Andere MISRA-Veröffentlichungen beschäftigen sich mit weiteren Aspekten der Softwareentwicklung. ComplianceMISRA-C-Compliance einer Codebasis bedeutet die Regelkonformität 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 geprüft wird (z. B. durch Compiler, statische Code-Analyse, Reviews, zusätzliche 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 Prioritäts-Kategorien unterteilt:
Die Zuordnung zu den Prioritäts-Kategorien ist unterschiedlich für manuell implementierten C-Code und für C-Code, der mittels eines Codegenerators erzeugt wurde (siehe Anhang E „Applicability to automatically generated code“). Der technische Gesamtumfang der einzuhaltenden Richtlinien ändert sich daher nicht, sondern nur die geforderte Strenge diese einzuhalten. BeispieleVerschachtelte KommentareKommentare können seit C99 sowohl mit In dem folgenden Beispiel würde die Funktion ( /* Kommentar, ohne Abschluss
<neue Seite>
meineFunktion();
/* Dieser Kommentar hat keine Bedeutung */
Will ein Programmierer diesen Abschnitt durch /* Code testweise deaktivieren
// i um 1 erhöhen
i++
/* Wenn Zähler i gleich a ist, MeineFunktion aufrufen um einen hoch */
if (i==a) { meineFunktion(a) }
* /
Wenn der Compiler das erste Ergebnis von ZuweisungenDie folgende Variante ist schlecht, weil man nicht nachvollziehen kann, ob der Programmierer einen Fehler gemacht hat, oder absichtlich dieses Konstrukt gewählt hat: if ( i = a )
{
/* Anweisung */
}
Der Compiler würde diese Variante erkennen und übersetzen zu: /* Zuweisung */
i = a;
/* dann ein Vergleich */
if ( i != 0 )
{
/* Anweisung */
}
Möglicherweise meinte der Programmierer == und hat versehentlich = geschrieben, so dass die Anweisung nur bei Gleichheit von i und a ausgeführt werden soll: if ( i == a )
{
/* Anweisung */
}
Weitere BeispieleWeitere Beispiele zu MISRA-C-Richtlinien sind:
Prüf-WerkzeugeBei der Programmierung von eingebetteten Systemen im automobilen Umfeld ist MISRA-C-konformer Code üblicherweise vorgeschrieben. Sofern der Compiler nicht optional die MISRA-Konformität überprüfen kann, werden zur Überprüfung Werkzeuge zur statischen Code-Analyse wie Axivion Suite[9], Astrée[10], Lint, QA-C/MISRA oder RuleChecker[11] verwendet. Ein Hersteller für Werkzeuge zur automatischen Code-Generierung verweist darauf, dass einige Regeln von MISRA-C die Ausführungsgeschwindigkeit des Programms verringern können.[12] LiteraturMISRA Veröffentlichungen können teilweise auch als PDF-Datei auf der Homepage erworben werden.
WeblinksEinzelnachweise
|
Portal di Ensiklopedia Dunia