MISRA-CGeballtes Know-howMatthias Kraaz – Dr. Bernd Löchner                                     11. Oktober 2012          ...
Wer ist eigentlich MISRA?The Motor Industry Software Reliability Association•      Ursprünglich Projekt im SafeIT Programm...
Warum verwenden wir C?Es ist standardisiert: C89, C99 und C11•      Zur Not mit dem Compiler-Hersteller schimpfen!Es ist f...
C ist aber auch…• heimtückisch• komplex• lückenhaft  spezifiziert• ohne Laufzeit-  Überprüfungen• schnell   unwartbar     ...
Unterschiedliche Unbestimmtheits-Maßein ISO-C (Annex G)Implementation defined behavior                                    ...
~3.500.000 Zeilen C!MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner   11. Oktober 2012   © Zühlke 2012
© Zühlke 2012
MISRA-C macht alles gut?                             Standard                                                             ...
Ernst Hartmann von der MethodenpolizeiMit MISRA-C haben wir eineMöglichkeit, die Code-Qualitätsicherzustellen und Abweichu...
Johnny Cool –der neue Kollege frisch von der Uni                                                                          ...
Was sagt denn MISRA-C:2004zu Johnny Cools Beispiel?             #define nur wenn                                          ...
Was kann denn MISRA-C:2004zu Johnny Cools Beispiel nicht sagen?                                                           ...
Seien wir mal ehrlich:          Wie fit sind wir?assert( 4<<4 + 2 == 0x42);                             © Zühlke 2012
Kennen Sie die Operatorpräzedenzen? f() . [] -> x++ x--         f() . [] -> x++ x-- ++x --x +x –x ! ~ *x &x     ++x --x +x...
Die zentrale EinsichtEs kommt nicht darauf an,•      dass wir die Entwickler knechten,•      oder wie cool ich bin,•      ...
Zum Einsatz entsprechender WerkzeugeAus der Erfahrung bisheriger Projekte•      Gerne im Entwickler-Build•      Immer im C...
Werkzeuge sind gelegentlich aber auchsehr störrischAus einem aktuellen Projekt:bool isEmpty; uint16_t S_StackFill;•       ...
Augenmaß beim EinsatzEs ist nicht sinnvoll, endlos den Code zu verbiegen („tot-linten“) Ausnahmen an das Tool signalisier...
MISRA-C ist wichtig für das TeamDiskussion über MISRA-C fördert•      Team Alignment•      Wissenstransfer•      Know-how-...
Und was ist mit C++?Man bekommt•      Stärkere Typisierung•      Prüfungen zur Kompilierungszeit statt zur Laufzeit•      ...
Empfohlene LektüreMISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner   11. Oktober 2012   © Zühlke 2012
FazitRichtig eingesetzt spart MISRA-C Zeit  und Geld und erhöht die Qualität!
DANKEKontakt: matthias.kraaz@zuehlke.com
Nächste SlideShare
Wird geladen in …5
×

Misra-C: geballtes Know-how - Electronics goes Medical 2012

1.445 Aufrufe

Veröffentlicht am

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.

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Misra-C: geballtes Know-how - Electronics goes Medical 2012

  1. 1. MISRA-CGeballtes Know-howMatthias Kraaz – Dr. Bernd Löchner 11. Oktober 2012 Matthias Kraaz Dr. Bernd Löchner © Zühlke 2012
  2. 2. 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 LeedsMISRA’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 WerkzeugenMISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  3. 3. 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 dagegenEs 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…MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  4. 4. C ist aber auch…• heimtückisch• komplex• lückenhaft spezifiziert• ohne Laufzeit- Überprüfungen• schnell unwartbar © Zühlke 2012
  5. 5. Unterschiedliche Unbestimmtheits-Maßein ISO-C (Annex G)Implementation defined behavior C• Die Implementierung legt fest, wie gewisse Dinge definiert sind: Die Implementierung macht immer dasselbe. Beispiel: Modulo bei signed intUnspecified behavior• Es ist nicht festgelegt, wie bestimmte Dinge zu realisieren sind: Die Implementierung kann nach Situation entscheiden. Beispiel: Auswertungsreihenfolge bei AusdrückenUndefined behavior C• Fehlerhaftes Programmfragment, für das ISO-C kein Verhalten festlegt. Die Implementierung dürfte die Festplatte formatieren. Beispiel: a[i++] = b[i]; C CMISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  6. 6. ~3.500.000 Zeilen C!MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  7. 7. © Zühlke 2012
  8. 8. MISRA-C macht alles gut? Standard Werkzeuge bewährt weit verbreitet Regeln und bewahrt Vorteile Richtlinien von C bündelt lizenzfrei viel ErfahrungMISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  9. 9. Ernst Hartmann von der MethodenpolizeiMit MISRA-C haben wir eineMöglichkeit, die Code-Qualitätsicherzustellen und Abweichungenunserer Entwickler zügig und rigoroszu unterbinden!MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  10. 10. 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^=y Viel besser als Java!MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  11. 11. Was sagt denn MISRA-C:2004zu Johnny Cools Beispiel? #define nur wenn Keine vorzeichen- wirklich nötig behaftete Argumente Kein ++ oder -- beim (Regel 19.7) (Regel 12.7) Aufruf (Regel 12.13) #define SWAP(x,y) x^=y^=x^=y Klammern um Klammern um die Kein undefiniertes Argumente Gesamtausdruck Verhalten (Regel 12.1) (Regel 19.4) (Regel 1.2)MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  12. 12. Was kann denn MISRA-C:2004zu Johnny Cools Beispiel nicht sagen? Fehler, wenn x und y auf den gleichen Speicher verweisen! #define SWAP(x,y) x^=y^=x^=y Nicht offensichtlich: SWAP(a[i],a[j])MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  13. 13. Seien wir mal ehrlich: Wie fit sind wir?assert( 4<<4 + 2 == 0x42); © Zühlke 2012
  14. 14. Kennen Sie die Operatorpräzedenzen? f() . [] -> x++ x-- f() . [] -> x++ x-- ++x --x +x –x ! ~ *x &x ++x --x +x –x ! ~ *x &x (cast) sizeof (cast) sizeof * / % * / % + - + - << >> << >> < <= >= > & == != ^ & assert( (4<<4 )|| 2)== 0x42); ( ^ < <= >= > | == != && && || || ?: ?: = *= /= %= >>= <<= += -= &= = *= /= %= >>= <<= += -= &= |= ^= |= ^= , , © Zühlke 2012
  15. 15. Die zentrale EinsichtEs 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.MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  16. 16. Zum Einsatz entsprechender WerkzeugeAus der Erfahrung bisheriger Projekte• Gerne im Entwickler-Build• Immer im Continuous Build• Von Anfang an – nicht später• Hygiene: Code sauber haltenJe nach Projektsituation• Nur sauberen Code einchecken• Warnungen oder Abbruch• Legacy Code belassen oder bereinigenMISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  17. 17. Werkzeuge sind gelegentlich aber auchsehr störrischAus 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?MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  18. 18. Augenmaß beim EinsatzEs ist nicht sinnvoll, endlos den Code zu verbiegen („tot-linten“) Ausnahmen an das Tool signalisierenSolche Ausnahmen müssen Ausnahmen bleiben• Abnehmen jeder Ausnahme im Peer Review• Continuous Build sucht Ausnahmen, gleicht sie mit abgenommen ab.• Teste Build Setting, ob das auch funktioniert.• Möglichkeit, Legacy Code sukzessive zu migrieren.MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  19. 19. MISRA-C ist wichtig für das TeamDiskussion ü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!MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  20. 20. 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++ !MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  21. 21. Empfohlene LektüreMISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
  22. 22. FazitRichtig eingesetzt spart MISRA-C Zeit und Geld und erhöht die Qualität!
  23. 23. DANKEKontakt: matthias.kraaz@zuehlke.com

×