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

679 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.

0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
679
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
10
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • Ich möchte Ihnen eine weitere Möglichkeit zur Beschleunigung und Effizienzsteigerung Ihrer Software-Tests vorstellen.Kaufen Sie einen Code-Checker und setzen Sie alle seine Fähigkeiten nutzbringend ein.Oder vielleicht verwenden Sie schon einen Code-Checker, reizen ihn aber nicht aus?Gerade dann sitzen Sie gerade im richtigen Vortrag.
  • Die 10er Regel nach Tilo Pfeiffer
  • Prüfung auf Stil und Kodierregeln auch gut und wichtig.Aber wenn es um Bugs pro Meldung gibt, liegt die Anomalien-Suche vorn!
  • 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

    ×