Transcript
Page 1: Misra-C: geballtes Know-how - Electronics goes Medical 2012

© 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

© 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

© 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

© 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

© 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

© 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

© Zühlke 2012

Page 8: Misra-C: geballtes Know-how - Electronics goes Medical 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

Page 9: Misra-C: geballtes Know-how - Electronics goes Medical 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

Page 10: Misra-C: geballtes Know-how - Electronics goes Medical 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

Page 11: Misra-C: geballtes Know-how - Electronics goes Medical 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

Page 12: Misra-C: geballtes Know-how - Electronics goes Medical 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

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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

© 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

Richtig eingesetzt spart MISRA-C Zeit und Geld und erhöht die

Qualität!

Fazit

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

DANKE

Kontakt: [email protected]


Top Related