misra-c: geballtes know-how - electronics goes medical 2012

23
© Zühlke 2012 Matthias Kraaz Dr. Bernd Löchner Matthias Kraaz – Dr. Bernd Löchner MISRA-C Geballtes Know-how 11. Oktober 2012

Upload: zuehlke

Post on 27-Jun-2015

1.022 views

Category:

Technology


1 download

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

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]