Misra-C: geballtes Know-how - Electronics goes Medical 2012
-
Upload
zuehlke -
Category
Technology
-
view
1.021 -
download
1
description
Transcript of Misra-C: geballtes Know-how - Electronics goes Medical 2012
![Page 1: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/1.jpg)
© Zühlke 2012
Matthias KraazDr. Bernd Löchner
Matthias Kraaz – Dr. Bernd Löchner
MISRA-CGeballtes Know-how
11. Oktober 2012
![Page 2: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/2.jpg)
© 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
![Page 3: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/3.jpg)
© 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
![Page 4: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/4.jpg)
© Zühlke 2012
C ist aber auch…
• heimtückisch• komplex• lückenhaft
spezifiziert• ohne Laufzeit-
Überprüfungen• schnell
unwartbar
![Page 5: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/5.jpg)
© 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
![Page 6: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/6.jpg)
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
~3.500.000 Zeilen C!
11. Oktober 2012
![Page 7: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/7.jpg)
© Zühlke 2012
![Page 8: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/8.jpg)
© 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
![Page 9: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/9.jpg)
© 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
![Page 10: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/10.jpg)
© 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
![Page 11: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/11.jpg)
© 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
![Page 12: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/12.jpg)
© 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
![Page 13: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/13.jpg)
© Zühlke 2012
Seien wir mal ehrlich:Wie fit sind wir?
assert( 4<<4 + 2 == 0x42);
![Page 14: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/14.jpg)
© 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); )(( )
![Page 15: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/15.jpg)
© 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
![Page 16: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/16.jpg)
© 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
![Page 17: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/17.jpg)
© 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
![Page 18: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/18.jpg)
© 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
![Page 19: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/19.jpg)
© 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
![Page 20: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/20.jpg)
© 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
![Page 21: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/21.jpg)
© Zühlke 2012MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner
Empfohlene Lektüre
11. Oktober 2012
![Page 22: Misra-C: geballtes Know-how - Electronics goes Medical 2012](https://reader035.fdocuments.us/reader035/viewer/2022062313/558deffa1a28ab257e8b473a/html5/thumbnails/22.jpg)
Richtig eingesetzt spart MISRA-C Zeit und Geld und erhöht die
Qualität!
Fazit