misra-c: geballtes know-how - electronics goes medical 2012
DESCRIPTION
Die Programmiersprache C ist sehr flexibel und ressourcenschonend und wird deshalb gerne in Embedded-Projekten eingesetzt. C erlaubt, gut verständlichen, strukturierten Code mit zuverlässig vorhersagbarem Verhalten zu schreiben, erzwingt es allerdings nicht. Die Flexibilität von C birgt aber auch Probleme: Winzige Tippfehler des Programmierers können Code mit gänzlich anderem Verhalten ergeben. Der Programmierer kann die mitunter schwierigen Sprachregeln von C leicht missverstehen. Laufzeitüberprüfungen finden oft nicht statt. Der C-Standard lässt Programme zu, deren Eigenschaften nicht vollständig durch den Standard erfasst sind. Mit dem Argument der Performanz kommt die Sicherheit und Eindeutigkeit bei C oft zu kurz. Über die Jahre hat sich ein reicher Schatz an Erfahrungen angesammelt, wie man C dennoch erfolgreich für sicherheitskritische Software einsetzt. C hat Schwächen, diese sind aber wohlbekannt. MISRA-C definiert ein Regelwerk für die Verwendung von C: man behält die Performanz und gewinnt an Sicherheit und Eindeutigkeit. Was lernen die Zuhörer in dem Vortrag: MISRA-C birgt geballtes Know-how über guten C-Code. Dieses Wissen motiviert und befähigt Entwickler, Programmierrichtlinien aktiv zu gestalten statt hinzunehmen. Programmierrichtlinien müssen auf dem Stand der Zeit gehalten und bei Änderungen der Randbedingungen überprüft und angepasst werden. Dabei werden Tools wie PC-Lint zu wertvollen Hilfsmitteln in der Entwicklung.TRANSCRIPT
© Zühlke 2012
Matthias KraazDr. Bernd Löchner
Matthias Kraaz – Dr. Bernd Löchner
MISRA-CGeballtes Know-how
11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Wer ist eigentlich MISRA?
The Motor Industry Software Reliability Association
• Ursprünglich Projekt im SafeIT Programm (UK)
• Mitglieder u. a.: Bentley, Ford, Jaguar, Land Rover, Lotus, TRW, University of Leeds
MISRA’s Mission Statement:
• To provide assistance to the automotive industry in the application and creation within vehicle systems of safe and reliable software.
Bekannteste Veröffentlichung: MISRA-C
• Umgesetzt in zahlreichen Werkzeugen
11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
C
Warum verwenden wir C?
Es ist standardisiert: C89, C99 und C11
• Zur Not mit dem Compiler-Hersteller schimpfen!
Es ist flexibel – gerade für Hardware-nahe Bereiche
• Das fordert aber auch verantwortlichen Umgang!
Es ist effizient und ressourcenschonend
• Da hat keiner was dagegen
Es ist mitunter die einzige Alternative zu Assembler
• Gibt es Ada für Ihren Lieblings-Prozessor?
Es erlaubt verständlichen, wartbaren Code
• Erzwingt es aber nicht…
11. Oktober 2012
© Zühlke 2012
C ist aber auch…
• heimtückisch• komplex• lückenhaft
spezifiziert• ohne Laufzeit-
Überprüfungen• schnell
unwartbar
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Unterschiedliche Unbestimmtheits-Maße in ISO-C (Annex G)
Implementation defined behavior
• Die Implementierung legt fest, wie gewisse Dinge definiert sind: Die Implementierung macht immer dasselbe.Beispiel: Modulo bei signed int
Unspecified behavior
• Es ist nicht festgelegt, wie bestimmte Dinge zu realisieren sind:Die Implementierung kann nach Situation entscheiden. Beispiel: Auswertungsreihenfolge bei Ausdrücken
Undefined behavior
• Fehlerhaftes Programmfragment, für das ISO-C kein Verhalten festlegt. Die Implementierung dürfte die Festplatte formatieren.Beispiel: a[i++] = b[i];
C
C
C
C
11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
~3.500.000 Zeilen C!
11. Oktober 2012
© Zühlke 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
MISRA-C macht alles gut?
WerkzeugeStandard
bewährt
bündelt viel Erfahrung
weit verbreitet
Regeln undRichtlinien
bewahrt Vorteilevon C
lizenzfrei
11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Ernst Hartmann von der Methodenpolizei
Mit MISRA-C haben wir eine Möglichkeit, die Code-Qualität sicherzustellen und Abweichungen unserer Entwickler zügig und rigoros zu unterbinden!
11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Johnny Cool – der neue Kollege frisch von der Uni
Klasse, was man mit C so alles machen kann:#define SWAP(x,y)\ x^=y^=x^=yViel besser als Java!
11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Was sagt denn MISRA-C:2004 zu Johnny Cools Beispiel?
#define SWAP(x,y)\ x^=y^=x^=y
Kein ++ oder -- beim Aufruf
(Regel 12.13)
Klammern um die Argumente (Regel 12.1)
Kein undefiniertes Verhalten (Regel 1.2)
Keine vorzeichen- behaftete
Argumente (Regel 12.7)
#define nur wenn wirklich nötig(Regel 19.7)
Klammern um Gesamtausdruck
(Regel 19.4)
Kein undefiniertes Verhalten (Regel 1.2)
11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Was kann denn MISRA-C:2004 zu Johnny Cools Beispiel nicht sagen?
#define SWAP(x,y)\ x^=y^=x^=y
Fehler, wenn x und y auf den gleichen Speicher verweisen!
Nicht offensichtlich:SWAP(a[i],a[j])
11. Oktober 2012
© Zühlke 2012
Seien wir mal ehrlich:Wie fit sind wir?
assert( 4<<4 + 2 == 0x42);
© Zühlke 2012
f() . [] -> x++ x--
++x --x +x –x ! ~ *x &x (cast) sizeof
* / %
+ -
<< >>
< <= >= >
== !=
&
^
|
&&
||
?:
= *= /= %= >>= <<= += -= &= |= ^=
,
Kennen Sie die Operatorpräzedenzen?
f() . [] -> x++ x--
++x --x +x –x ! ~ *x &x (cast) sizeof
* / %
+ -
<< >>
&
^
|
< <= >= >
== !=
&&
||
?:
= *= /= %= >>= <<= += -= &= |= ^=
,
assert( 4<<4 | 2 == 0x42); )(( )
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Die zentrale Einsicht
Es kommt nicht darauf an,
• dass wir die Entwickler knechten,
• oder wie cool ich bin,
• oder welchen Durchblick ich meine zu haben…
Der wesentlich Punkt ist:
Wir wollen gute Software schreiben!
Deshalb suchen wir Hilfe,
• um die Zahl der Fehler zu minimieren
• und um die Wartbarkeit zu erhöhen.11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Zum Einsatz entsprechender Werkzeuge
Aus der Erfahrung bisheriger Projekte
• Gerne im Entwickler-Build
• Immer im Continuous Build
• Von Anfang an – nicht später
• Hygiene: Code sauber halten
Je nach Projektsituation
• Nur sauberen Code einchecken
• Warnungen oder Abbruch
• Legacy Code belassen oder bereinigen
11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Werkzeuge sind gelegentlich aber auch sehr störrisch
Aus einem aktuellen Projekt:
bool isEmpty; uint16_t S_StackFill;
• isEmpty = (0U == S_StackFill); Implicit conversion of integer to smaller type (Regel 10.1)
• isEmpty = (bool) (0U == S_StackFill); Cast of complex expression changes signedness
(Regel 10. 3)
• isEmpty = (0U == S_StackFill) ? true : false; OK, aber Lesbarkeit? 11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Augenmaß beim Einsatz
Es ist nicht sinnvoll, endlos den Code zu verbiegen („tot-linten“)
Ausnahmen an das Tool signalisieren
Solche Ausnahmen müssen Ausnahmen bleiben
• Abnehmen jeder Ausnahme im Peer Review
• Continuous Build sucht Ausnahmen, gleicht sie mitabgenommen ab.
• Teste Build Setting, ob das auch funktioniert.
• Möglichkeit, Legacy Code sukzessive zu migrieren.
11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
MISRA-C ist wichtig für das Team
Diskussion über MISRA-C fördert
• Team Alignment
• Wissenstransfer
• Know-how-Aufbau
• Sensibilisierung für sichere Software
• Verständigung über Werte und Ziele
Die pdf-Version von MISRA-C ist nicht teuer – lohnt aber unbedingt die Lektüre!
11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Und was ist mit C++?
Man bekommt
• Stärkere Typisierung
• Prüfungen zur Kompilierungszeit statt zur Laufzeit
• Schnelleren Code
… oder auch
• Unverständlichen Code
• Komplexere Compiler
• Langsameren Code
Wenn C++, dann MISRA-C++ !11. Oktober 2012
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Empfohlene Lektüre
11. Oktober 2012
Richtig eingesetzt spart MISRA-C Zeit und Geld und erhöht die
Qualität!
Fazit
DANKE
Kontakt: [email protected]