23
© Zühlke 2012 Matthias Kraaz Code-Checker ausreizen 11. Oktober 2012

Code Checker ausreizen - Electronics goes Medical 2012

  • Upload
    zuehlke

  • View
    408

  • Download
    1

Embed Size (px)

Citation preview

© Zühlke 2012

Matthias Kraaz

Code-Checker ausreizen

11. Oktober 2012

© Zühlke 2012

Wie kann man Software testen?

Software Tests

Statische Tests

Reviews Statische Analyse

Dynamische Tests

© Zühlke 2012

Wie kann man Software analysieren?

Statische Analyse

Architektur Metriken Code-

Checker

Stil Kodier-regeln

Anomalien

Sicherheits-

probleme

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

Später ist teurer – 10er Regel nach Tilo Pfeiffer

11. Oktober 2012

Während Entwicklungx 1 Während Testphase

x 10

Beim Anwenderx 100

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

Später ist teurer – Statische Analyse im V-Modell

11. Oktober 2012

Anforderungs-

spezifikation

Architektur-design

Komponenten-

spezifikation

Implementierung

Komponenten-tests

Integrations-tests

Validierung

Dyn

amis

che

Test

s

Statische Analyse

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

Statisch vs. dynamisch – Fehlerzustand und Fehlerwirkung

Fehlerzustand

result = NULL;

if(a%2){ result="a";}

if (b % 2){ result="b";}

output(result);

Fehlerwirkung

• a=1,b=2 „a“

• a=2,b=1 „b“

• a=2,b=2 ?

11. Oktober 2012

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

Code-Checker im Vergleich – Bugs pro Meldung

Fehlerzustand

result = NULL;

if(a%2){ result="a";}

if (b % 2){ result="b";}

output(result);

Bugs pro Meldung

• Stil: x Meldungen, 0 Bugs

• Kodierregeln: x Meldungen, 0 Bugs

• Anomalien: 1 Meldung, 1 Bug

11. Oktober 2012

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

Datenflussanalyseur-Anomalie

int i;array[i] = 1;

11. Oktober 2012

undefined

referenced

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

Datenflussanalysedu-Anomalie

int complicated(void){ int result; int tmp = 0; result = tmp; tmp = 100 x T + 4; return result;}

11. Oktober 2012

defined

undefined

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

Datenflussanalysedd-Anomalie

int complicated(void){ int tmp = 22; tmp = 100 x T + 4; return tmp;}

11. Oktober 2012

defined

defined

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

Unerreichbarer Code Endlos-Schleife

void complicated(uint8_t i){ if ( i >= 256 ) { … }}

uint8_t i;for ( i = 0; i < 256; i++ ){ …}

KontrollflussanalyseAnomalien

11. Oktober 2012

3 Tage Fehlersuche

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

void 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 */ }}

Value Tracking

11. Oktober 2012

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

void complicated( int i ){ static bool array[2]; array[i] = true;}

Interprozedurale Analyse

complicated( 0 );

complicated( 1 );

complicated( 2 );

11. Oktober 2012

complicated( 0 );

complicated( 1 );

complicated( 0 );

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

Force_mN force(Pressure_Pa p){ return p * MY_AREA_mm2 * 1000;}

Dimensionsanalyse

11. Oktober 2012

Richtig?

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

1. Definition des Einheitensystems

DimensionsanalyseFunktionsprinzip

11. Oktober 2012

Einheit

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

2. Zuordnung von Datentypen

DimensionsanalyseFunktionsprinzip

11. Oktober 2012

Einheit Datentyp

MY_AREA_mm2

Pressure_Pa

Force_mN

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

3. Zurückleitung auf Produkt der Basiseinheiten

DimensionsanalyseFunktionsprinzip

11. Oktober 2012

Force_mN p * MY_AREA_mm2 * 1000

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

• Datenflussanalyse: ein bisschen

• Kontrollflussanalyse: ein bisschen

• Value Tracking: eher nicht

• Interprozedurale Analyse: eher nicht

• Dimensionsanalyse: Boost.Units

• Mit ausgeschalteten Warnungen: sowieso nicht!

Das macht mein Compiler doch schon!

11. Oktober 2012

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

• 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?

PraxisbeispielAssessment von Alt-Code

11. Oktober 2012

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

• Tool kaufen und in Betrieb nehmen

• Entwickler schulen (buy-in!)

• Meldungen aus altem Code wegschaffen

• Neue Meldungen während Entwicklung untersuchen

Investition

11. Oktober 2012

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

• Abraxas CodeCheck

• Coverity

• Findbugs

• Gimpel PC-Lint

• Klocwork

• Parasoft CodeWizard

• PMD

• ProgrammingResearch QA/C, QA/C++

• MathWorks Polyspace

• Microsoft FxCop

• Splint

• …

Tools am Markt

11. Oktober 2012

© Zühlke 2012Code-Checker ausreizen | Matthias Kraaz

Statische Analyse auf Anomalien ist

• früher einsetzbar als dynamische Tests

• ergiebiger als Kodierregeln zu prüfen

• eventuell mit vorhandenen Tools möglich

und erleichtert die Fehlersuche.

Nutzen / Fazit

11. Oktober 2012

DANKE

Kontakt: [email protected]