Your SlideShare is downloading. ×
0
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Misra-C: geballtes Know-how - Electronics goes Medical 2012
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

1,011

Published on

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 …

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,011
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Sehr geehrte Damen, herzlich willkommen zum Vortrag „…“Dem hier gezeigten Tier wird ein phänomenales Gedächtnis nachgesagt.Jede Erfahrung wird sicher aufbewahrt – zumindest bis das Individuum stirbt.Wir Menschen haben eine Alternative gefunden – wir schreiben Erfahrungen nieder.Das hat klare Vorteile für die Weitergabe.Darum soll es nun im Kern gehen – um die Weitergabe von Erfahrung.
  • Mitglieder sind Vertreter der Automotive Industrie, Berater (TRW, …) und Forschung (University of Leeds)Mittlerweile verwenden auch viele andere Branchen MISRA-C für sicherheitskritischen Code: Flug, Medizin, Raumfahrt, …Auf die Mitgliederzusammensetzung hat sich das noch nicht niedergeschlagen.MISRA started in the early 1990s as a project in the UK government's "SafeIT " programme. This programme funded projects across a broad range of industries concerned with safety-related electronic systems. The MISRA project was conceived to develop guidelines for the creation of embedded software in road vehicle electronic systems. In November 1994 Development guidelines for vehicle based software was published. This document was significant representing industry consensus and also as the first automotive industry interpretation of the principles of the emerging standard IEC 61508.Once the official funding had finished, the MISRA members decided to continue working together on an informal basis, an arrangement that has continued ever since. One of the first results of this ongoing collaboration was MISRA C, which came about when Ford and Rover decided to combine their individual efforts to create a C language subset.
  • C ist eine großartige, tolle Sache!
  • Wenn man dann in den Standard guckt, wird aus dem großartigen C eine ziemlich löchrige Angelegenheit.
  • Und trotzdem kann man umfangreiche, sicherheitskritische Software mit C schreiben!Der von JPL eingesetzte Kodierstandard (frei verfügbar im Netz) setzt auch auf MISRA-C.Siehe auch:http://win-dms-ms1.caltech.edu/five/Viewer/?peid=476727664f1b4d8390d3ab37670ababd
  • Wie also schützt man sich vor diesen Kameraden, wenn man C für sicherheitskritische Software verwendet?Wie also verhindert man, dass diese Kameraden mit auf den Mars fliegen?
  • MISRA-C ist eine prima Sache – löst aber keine menschlichen Probleme.
  • Aber jetzt kommt Ernst Hartmann von der Methodenpolizei…Durch Einhaltung von MISRA-C ist nicht automatisch ein wie auch immer beschaffenes Niveau der Code-Qualität sichergestellt.MISRA-C schützt uns vor bestimmten Fehlern, macht unseren Code aber nicht fehlerfrei.Und sichert auch nicht, dass der Code übersichtlich, gut verständlich, gut strukturiert ist.Blindwütige Einhaltung von MISRA-C führt nicht zum Ziel.Man muss die MISRA-C Regeln verstehen und sie dann mit Augenmaß einsetzen.Abweichungen müssen erlaubt bleiben und im Ermessen der Entwickler liegen.
  • Johnny Cool hat ganz andere Sachen im Kopf…
  • 19.7 A functionshouldbeused in preferenceto a function-likemacro.12.7 Bitwiseoperatorsshall not beappliedtooperandswhoseunderlying type issigned.12.13 The incrementanddecrementoperatorsshould not bemixedwithotheroperators in an expression.19.4 C macrosshallonlyexpandto … parenthesisedexpression …1.2 Norelianceshallbeplaced on undefinedorunspecifiedbehaviour.(catch all ruleifnootherapplies)12.1 Limited dependenceshouldbeplaced on C‘soperatorprecedencerules in expressions.
  • Und dann noch ein paar Probleme, die auch MISRA nicht geschafft hat, in Regeln zu fassen.
  • Und er hat den totalen Durchblick. Sitzt aber noch spät nachts am Debugger mit einem Dutzend Tassen Kaffee intus.+ bindet stärker als <<.
  • Kleines Quiz: Welche Seite ist richtig?Links binden die Vergleichsoperatoren stärker als die Bitoperatoren.Rechts binden die Bitoperatoren stärker als die Vergleichsoperatoren.Die linke Seite ist richtig.
  • Rückbesinnung darauf, was wir eigentlich wollen, wenn wir versuchen- Entwickler mit Regeln zu strangulieren oder- coolen Code zu schreiben oder- den totalen Durchblick zu demonstrieren:Gute Software schreiben!Dazu gehört ein bisschen Demut vor der Schwierigkeit und der Komplexität.Nur mit dieser Einsicht kann mir MISRA-C helfen.
  • Das Abnehmen von Ausnahmen und Kontrolle auf noch nicht abgenommene Ausnahmen etc. kann natürlich auch vom Tool implementiert werden.Der Gag mit lint –e* am Anfang jeder Datei.Testen, ob Warnungen wirklich rauskommen.
  • Über diese Probleme kann man viel diskutieren – und sollte das auch tun!
  • Koenig Andrew, C Traps andPitfalls, Addison-Wesley, 1988(eine der Quellen von Regeln, die von MISRA-C übernommen wurden)Hatton Les, Safer C – Developing Software for High-IntegrityandSafety-Critical Systems, McGraw-Hill, 1994(eine der Referenzen von MISRA-C)
  • Transcript

    • 1. MISRA-CGeballtes Know-howMatthias Kraaz – Dr. Bernd Löchner 11. Oktober 2012 Matthias Kraaz Dr. Bernd Löchner © Zühlke 2012
    • 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. 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. C ist aber auch…• heimtückisch• komplex• lückenhaft spezifiziert• ohne Laufzeit- Überprüfungen• schnell unwartbar © Zühlke 2012
    • 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. ~3.500.000 Zeilen C!MISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
    • 7. © Zühlke 2012
    • 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. 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. 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. 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. 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. Seien wir mal ehrlich: Wie fit sind wir?assert( 4<<4 + 2 == 0x42); © Zühlke 2012
    • 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. 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. 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. 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. 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. 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. 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. Empfohlene LektüreMISRA-C - Geballtes Know-how | Matthias Kraaz, Dr. Bernd Löchner 11. Oktober 2012 © Zühlke 2012
    • 22. FazitRichtig eingesetzt spart MISRA-C Zeit und Geld und erhöht die Qualität!
    • 23. DANKEKontakt: matthias.kraaz@zuehlke.com

    ×