Code-Checker ausreizen                         11. Oktober 2012                         Matthias Kraaz                    ...
Wie kann man Software testen?                                    Software                                     Tests       ...
Wie kann man Software analysieren?                       Statische                       Analyse                          ...
Später ist teurer –10er Regel nach Tilo Pfeiffer                                                                          ...
Später ist teurer –Statische Analyse im V-Modell      Anforderungs-                                                       ...
Statisch vs. dynamisch –Fehlerzustand und FehlerwirkungFehlerzustand                             Fehlerwirkungresult = NUL...
Code-Checker im Vergleich –Bugs pro MeldungFehlerzustand                             Bugs pro Meldungresult = NULL;       ...
Datenflussanalyseur-Anomalieint i;                                    undefinedarray[i] = 1;                              ...
Datenflussanalysedu-Anomalieint complicated(void)                     defined{    int result;    int tmp = 0;    result = ...
Datenflussanalysedd-Anomalieint complicated(void)                     defined{    int tmp = 22;    tmp = 100 x T + 4;    r...
KontrollflussanalyseAnomalien  Unerreichbarer Code                     Endlos-Schleife  void complicated(uint8_t i)       ...
Value Trackingvoid complicated(bool b1, bool b2, bool b3){    int a = 1;             if ( b1 ) a = a + 2;             if (...
Interprozedurale Analysevoid complicated( int i ){  static bool array[2];  array[i] = true;}                              ...
Dimensionsanalyse                                          Richtig?Code-Checker ausreizen | Matthias Kraaz   11. Oktober 2...
DimensionsanalyseFunktionsprinzip1. Definition des Einheitensystems  EinheitCode-Checker ausreizen | Matthias Kraaz   11. ...
DimensionsanalyseFunktionsprinzip2. Zuordnung von Datentypen  Einheit                                 Datentyp            ...
DimensionsanalyseFunktionsprinzip3. Zurückleitung auf Produkt der BasiseinheitenCode-Checker ausreizen | Matthias Kraaz   ...
Das macht mein Compiler doch schon!•      Datenflussanalyse: ein bisschen•      Kontrollflussanalyse: ein bisschen•      V...
PraxisbeispielAssessment von Alt-Code•      60.000 Zeilen Code•      Produkt 10+ Jahre auf dem Markt•      4 Datenflussano...
Investition•      Tool kaufen und in Betrieb nehmen•      Entwickler schulen (buy-in!)•      Meldungen aus altem Code wegs...
Tools am Markt•      Abraxas CodeCheck•      Coverity•      Findbugs•      Gimpel PC-Lint•      Klocwork•      Parasoft Co...
Nutzen / FazitStatische Analyse auf Anomalien ist•      früher einsetzbar als dynamische Tests•      ergiebiger als Kodier...
DANKEKontakt: matthias.kraaz@zuehlke.com
Nächste SlideShare
Wird geladen in …5
×

Code Checker ausreizen - Electronics goes Medical 2012

749 Aufrufe

Veröffentlicht am

Werkzeuge zur statischen Code-Analyse („Code-Checker“) werden oft nur verwendet, um die Einhaltung von MISRA-C etc. zu prüfen. Dabei werden die Anwender oftmals mit Meldungen überschüttet und selten wird ein echter Bug gefunden. Dabei unterstützen diese Werkzeuge weitere Verfahren zur Code-Analyse, die wesentlich weniger Falschmeldungen erzeugen und wesentlich mehr echte Bugs finden.
Mittels Daten- und Kontrollflussanalyse können diese Tools Bugs finden, die durch Testen vielleicht nie gefunden werden – und das mit einem Bruchteil des Aufwandes:

- Verwendung von Null-Zeigern
- Überlauf über Feldgrenzen
- Überlauf von Datentypen
- Schleifen, die manchmal nicht mehr terminieren
- konkurrierender Zugriff aus mehreren Threads ohne ausreichenden Schutz

Features wie inter-procedural analysis, value tracking und dimensional analysis werden erklärt, um die Features eines Code-Checkers besser ausschöpfen zu können.
Was lernen die Zuhörer in dem Vortrag:
Die Zuhörer lernen die Fähigkeiten moderner, mächtiger Code-Checker kennen und wie diese implementiert werden. Mit diesem Wissen können die Fähigkeiten des eigenen Code-Checkers besser ausgereizt werden oder die Auswahl eines geeigneten Code-Checkers vorgenommen werden.

  • Als Erste(r) kommentieren

Code Checker ausreizen - Electronics goes Medical 2012

  1. 1. Code-Checker ausreizen 11. Oktober 2012 Matthias Kraaz © Zühlke 2012
  2. 2. Wie kann man Software testen? Software Tests Statische Dynamische Tests Tests Statische Reviews Analyse © Zühlke 2012
  3. 3. Wie kann man Software analysieren? Statische Analyse Code- Architektur Metriken Checker Kodier- Sicherheits- Stil Anomalien regeln probleme © Zühlke 2012
  4. 4. Später ist teurer –10er Regel nach Tilo Pfeiffer Beim Anwender x 100 Während Entwicklung x1 Während Testphase x 10Code-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  5. 5. Später ist teurer –Statische Analyse im V-Modell Anforderungs- Validierung spezifikation Architektur- Integrations- design tests Komponenten- Komponenten- spezifikation tests Implementierung Statische AnalyseCode-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  6. 6. Statisch vs. dynamisch –Fehlerzustand und FehlerwirkungFehlerzustand Fehlerwirkungresult = NULL; • a=1,b=2  „a“if(a%2){ • a=2,b=1  „b“ result="a"; • a=2,b=2  ?}if (b % 2){ result="b";}output(result);Code-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  7. 7. Code-Checker im Vergleich –Bugs pro MeldungFehlerzustand Bugs pro Meldungresult = NULL; • Stil: x Meldungen, 0 Bugsif(a%2){ • Kodierregeln: x Meldungen, 0 Bugs result="a"; • Anomalien: 1 Meldung, 1 Bug}if (b % 2){ result="b";}output(result);Code-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  8. 8. Datenflussanalyseur-Anomalieint i; undefinedarray[i] = 1; referencedCode-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  9. 9. Datenflussanalysedu-Anomalieint complicated(void) defined{ int result; int tmp = 0; result = tmp; tmp = 100 x T + 4; undefined return result;}Code-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  10. 10. Datenflussanalysedd-Anomalieint complicated(void) defined{ int tmp = 22; tmp = 100 x T + 4; return tmp;} definedCode-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  11. 11. KontrollflussanalyseAnomalien Unerreichbarer Code Endlos-Schleife void complicated(uint8_t i) uint8_t i; { for ( i = 0; i < 256; i++ ) if ( i >= 256 ) { { … … } } } 3 Tage FehlersucheCode-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  12. 12. Value Trackingvoid complicated(bool b1, bool b2, bool b3){ int a = 1; if ( b1 ) a = a + 2; if ( b2 ) a = a + 3; if ( b3 ) a = a + 4; if ( a > 10 ) { /* Dead code */ }}Code-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  13. 13. Interprozedurale Analysevoid complicated( int i ){ static bool array[2]; array[i] = true;} complicated( 2 ); complicated( 1 ); complicated( 0 ); complicated( 0 ); complicated( 0 ); complicated( 1 );Code-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  14. 14. Dimensionsanalyse Richtig?Code-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  15. 15. DimensionsanalyseFunktionsprinzip1. Definition des Einheitensystems EinheitCode-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  16. 16. DimensionsanalyseFunktionsprinzip2. Zuordnung von Datentypen Einheit Datentyp MY_AREA_mm2 Pressure_Pa Force_mNCode-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  17. 17. DimensionsanalyseFunktionsprinzip3. Zurückleitung auf Produkt der BasiseinheitenCode-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  18. 18. Das macht mein Compiler doch schon!• Datenflussanalyse: ein bisschen• Kontrollflussanalyse: ein bisschen• Value Tracking: eher nicht• Interprozedurale Analyse: eher nicht• Dimensionsanalyse: Boost.Units• Mit ausgeschalteten Warnungen: sowieso nicht!Code-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  19. 19. PraxisbeispielAssessment von Alt-Code• 60.000 Zeilen Code• Produkt 10+ Jahre auf dem Markt• 4 Datenflussanomalien – Variable wird ohne Initialisierung verwendet – Abhängig von mehreren Konfigurationsoptionen• Bisher unerkannt – Passte die zufällige „Initialisierung“ immer? – Kommt kritische Konfiguration nicht vor? – Wurden Fehler nicht erkannt / nicht gemeldet?Code-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  20. 20. Investition• Tool kaufen und in Betrieb nehmen• Entwickler schulen (buy-in!)• Meldungen aus altem Code wegschaffen• Neue Meldungen während Entwicklung untersuchenCode-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  21. 21. Tools am Markt• Abraxas CodeCheck• Coverity• Findbugs• Gimpel PC-Lint• Klocwork• Parasoft CodeWizard• PMD• ProgrammingResearch QA/C, QA/C++• MathWorks Polyspace• Microsoft FxCop• Splint• …Code-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  22. 22. Nutzen / FazitStatische Analyse auf Anomalien ist• früher einsetzbar als dynamische Tests• ergiebiger als Kodierregeln zu prüfen• eventuell mit vorhandenen Tools möglichund erleichtert die Fehlersuche.Code-Checker ausreizen | Matthias Kraaz 11. Oktober 2012 © Zühlke 2012
  23. 23. DANKEKontakt: matthias.kraaz@zuehlke.com

×