misra-c: geballtes know-how - electronics goes medical 2012
Post on 27-Jun-2015
1.022 Views
Preview:
DESCRIPTION
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: matthias.kraaz@zuehlke.com
top related