warum verwenden softwareentwickler keine werkzeuge zur ...€¦ · warum verwenden...

Post on 18-Oct-2020

2 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Warum verwenden Softwareentwickler keine Werkzeuge zur stati-schen Codeanalyse?

Thies JohannsenFreie Universität Berlin

9. Juli 2015

Übersicht

EinführungWas ist statische Codeanalyse?

Ein einfaches Beispiel: unerreichbarer CodeWerkzeuge zur statischen Codeanalyse

Studie: Why Don’t Software Developers Use Static Analysis Tools to FindBugs?

Schwierigkeiten bei der statischen CodeanalyseFalse PositivesZu viele Meldungenschlechte Fehlermeldungen

Zusammenfassung

,Thies Johannsen, 9. Juli 2015 2/ 44

Was ist statische Codeanalyse?

Was ist statische Codeanalyse?

É wird auch Quellcodeanalyse genanntÉ formale Prüfung des Quellcodes auf FehlerÉ wird ausgeführt bevor der Code übersetzt wird

,Thies Johannsen, 9. Juli 2015 3/ 44

Was ist statische Codeanalyse?

Welche Fehler werden erkannt?

É Typechecking (passen die Datentypen)É Puffer-ÜberläufeÉ Speicherlecks (new ohne delete, verlorene Pointer)É unerreichbarer Code (siehe Beispiel)É Stylechecking (werden bei switch...case... alle Optionen beachet)É ...

,Thies Johannsen, 9. Juli 2015 4/ 44

Beispiel: unerreichbarer Code

Ein einfaches Beispiel:Unerreichbarer Code

,Thies Johannsen, 9. Juli 2015 5/ 44

Beispiel: unerreichbarer Code

1 #include <stdio .h>2 #include <stdint .h>34 int main( ) {5 uint32_t foo ;67 i f (1)8 foo = 0x12345678;9 else

10 foo = 0x89abcdef ;1112 pr int f ( "%x\n" , foo ) ;1314 return 0;15 }

,Thies Johannsen, 9. Juli 2015 6/ 44

Beispiel: unerreichbarer Code

,Thies Johannsen, 9. Juli 2015 7/ 44

Beispiel: unerreichbarer Code

,Thies Johannsen, 9. Juli 2015 7/ 44

Beispiel: unerreichbarer Code

1 0: 55 push %rbp2 1: 48 89 e5 mov %rsp,%rbp3 4: 48 83 ec 10 sub $0x10,%rsp4 8: 48 bf 00 00 00 00 00 movabs $0x0,%rdi5 f: 00 00 006 12: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)7 19: c7 45 f8 78 56 34 12 movl $0x12345678,-0x8(%rbp)8 20: 8b 75 f8 mov -0x8(%rbp),%esi9 23: b0 00 mov $0x0,%al

10 25: e8 00 00 00 00 callq 2a <main+0x2a>11 2a: 31 f6 xor %esi,%esi12 2c: 89 45 f4 mov %eax,-0xc(%rbp)13 2f: 89 f0 mov %esi,%eax14 31: 48 83 c4 10 add $0x10,%rsp15 35: 5d pop %rbp16 36: c3 retq

,Thies Johannsen, 9. Juli 2015 8/ 44

Beispiel: unerreichbarer Code

É Der Code wird ohne Warnungen übersetzt.É Der tote Code wird vom Compiler wegoptimiert.É Das Programm arbeitet genau wie erwartet.

É Also alles in Ordnung?

É Konnte der Code wirklich wegoptimiert werden oder liegt dasProblem eventuell woanders?

É Warum informiert mich der Compiler nicht darüber, dass kompletteCodeblöcke entfernt werden?

É Codezeilen werden üblicherweise nicht ohne Grund geschrieben.

,Thies Johannsen, 9. Juli 2015 9/ 44

Beispiel: unerreichbarer Code

É Der Code wird ohne Warnungen übersetzt.É Der tote Code wird vom Compiler wegoptimiert.É Das Programm arbeitet genau wie erwartet.É Also alles in Ordnung?

É Konnte der Code wirklich wegoptimiert werden oder liegt dasProblem eventuell woanders?

É Warum informiert mich der Compiler nicht darüber, dass kompletteCodeblöcke entfernt werden?

É Codezeilen werden üblicherweise nicht ohne Grund geschrieben.

,Thies Johannsen, 9. Juli 2015 9/ 44

Beispiel: unerreichbarer Code

É Der Code wird ohne Warnungen übersetzt.É Der tote Code wird vom Compiler wegoptimiert.É Das Programm arbeitet genau wie erwartet.É Also alles in Ordnung?

É Konnte der Code wirklich wegoptimiert werden oder liegt dasProblem eventuell woanders?

É Warum informiert mich der Compiler nicht darüber, dass kompletteCodeblöcke entfernt werden?

É Codezeilen werden üblicherweise nicht ohne Grund geschrieben.

,Thies Johannsen, 9. Juli 2015 9/ 44

Beispiel: unerreichbarer Code

É Der Compiler prüft auf lexikalische/syntaktische Korrektheit.

É Ist der Quellcode korrekt, wird er übersetzt und optimiert.É Semantik wird nicht betrachtet.

Eine mögliche Lösung:

Mit statischer Codeanalyse den Quelltext untersuchen.

,Thies Johannsen, 9. Juli 2015 10/ 44

Beispiel: unerreichbarer Code

É Der Compiler prüft auf lexikalische/syntaktische Korrektheit.É Ist der Quellcode korrekt, wird er übersetzt und optimiert.

É Semantik wird nicht betrachtet.

Eine mögliche Lösung:

Mit statischer Codeanalyse den Quelltext untersuchen.

,Thies Johannsen, 9. Juli 2015 10/ 44

Beispiel: unerreichbarer Code

É Der Compiler prüft auf lexikalische/syntaktische Korrektheit.É Ist der Quellcode korrekt, wird er übersetzt und optimiert.É Semantik wird nicht betrachtet.

Eine mögliche Lösung:

Mit statischer Codeanalyse den Quelltext untersuchen.

,Thies Johannsen, 9. Juli 2015 10/ 44

Beispiel: unerreichbarer Code

É Der Compiler prüft auf lexikalische/syntaktische Korrektheit.É Ist der Quellcode korrekt, wird er übersetzt und optimiert.É Semantik wird nicht betrachtet.

Eine mögliche Lösung:

Mit statischer Codeanalyse den Quelltext untersuchen.

,Thies Johannsen, 9. Juli 2015 10/ 44

Beispiel: unerreichbarer Code

1 #include <stdio .h>2 #include <stdint .h>34 int main( ) {5 uint32_t foo ;67 i f (1)8 foo = 0x12345678;9 else

10 foo = 0x89abcdef ;1112 pr int f ( "%x\n" , foo ) ;1314 return 0;15 }

,Thies Johannsen, 9. Juli 2015 11/ 44

Beispiel: unerreichbarer Code

Clang Static Analyzer

scan-build: Using ’/usr/lib/llvm-3.6/bin/clang’for static analysis

if_true.c:10:11: warning: This statement is never executedfoo = 0x89abcdef;

^~~~~~~~~~1 warning generated.scan-build: 1 bug found.scan-build: Run

’scan-view /tmp/scan-build-2015-07-01-111953-6304-1’to examine bug reports.

,Thies Johannsen, 9. Juli 2015 12/ 44

Beispiel: unerreichbarer Code

,Thies Johannsen, 9. Juli 2015 13/ 44

Beispiel: unerreichbarer Code

,Thies Johannsen, 9. Juli 2015 14/ 44

Übersicht über Werkzeuge zur statischenCodeanalyse

Tabelle: Gängige Analysewerkzeuge

Tool ProgrammierspracheFxCop .NET (prüft CIL)Clang C, C++, Objective-C, Objective-C++Cppcheck C, C++Lint/Splint C, C++Checkstyle JavaFindBugs Java

Plugins sind für diverse IDEs verfügbar

,Thies Johannsen, 9. Juli 2015 15/ 44

Übersicht über Werkzeuge zur statischenCodeanalyse

In die meisten IDEs ist bereits eine einfache Analysefunktion integriert.

Abbildung: Hinweis auf unbenutzte Variable in QtCreator

,Thies Johannsen, 9. Juli 2015 16/ 44

Funktionsweise

1 i f (a > b) {2 nConsec = 0;3 } else {4 s1 = getHexChar(1) ;5 s2 = getHexChar(2) ;6 }7 return nConsec;

,Thies Johannsen, 9. Juli 2015 17/ 44

Funktionsweise

(B. Chess, J. West, “Secure Programming with Static Analysis: Getting Software Security Right with StaticAnalysis“, Addison-Wesley Professional, 2007)

,Thies Johannsen, 9. Juli 2015 18/ 44

Funktionsweise

É Aufrufgraph für Funktionen wird erzeugtÉ Datenfluss wird kontrolliert

É Wird eine Variable mehrfach beschrieben ohne gelesen zu werden?É Wird aus uninitialisierten Variablen gelesen?

É Mit Hilfe eines Zustandsautomaten wird geprüft, ob auf jedes new eindelete folgt.

É weitere Sprachenabhängige Regeln

,Thies Johannsen, 9. Juli 2015 19/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Why Don’t Software Developers Use Static Analysis Tools toFind Bugs?

Brittany Johnson, Yoonki Song, Emerson Murphy-Hill, Robert BowdidgeICSE 2013

,Thies Johannsen, 9. Juli 2015 20/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

É Analysetools machen das finden von Bugs schneller und günstiger.

É Alle Teilnehmer der Studie sind der Meinung, dass die Verwendungvon Analysetools Vorteile bringt.

É Warum benutzt es trotzdem kaum jemand?

,Thies Johannsen, 9. Juli 2015 21/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

É Analysetools machen das finden von Bugs schneller und günstiger.É Alle Teilnehmer der Studie sind der Meinung, dass die Verwendung

von Analysetools Vorteile bringt.

É Warum benutzt es trotzdem kaum jemand?

,Thies Johannsen, 9. Juli 2015 21/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

É Analysetools machen das finden von Bugs schneller und günstiger.É Alle Teilnehmer der Studie sind der Meinung, dass die Verwendung

von Analysetools Vorteile bringt.

É Warum benutzt es trotzdem kaum jemand?

,Thies Johannsen, 9. Juli 2015 21/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Forschungsfragen:

É What reasons do developers have for using or not using staticanalysis tools to find bugs?

É How well do current static analysis tools fit into the workflows ofdevelopers? We define a workflow as the steps a developer takeswhen writing, inspecting and modifying their code.

É What improvements do developers want to see being made to staticanalysis tools?

,Thies Johannsen, 9. Juli 2015 22/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Forschungsfragen:

É What reasons do developers have for using or not using staticanalysis tools to find bugs?

É How well do current static analysis tools fit into the workflows ofdevelopers? We define a workflow as the steps a developer takeswhen writing, inspecting and modifying their code.

É What improvements do developers want to see being made to staticanalysis tools?

,Thies Johannsen, 9. Juli 2015 22/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Forschungsfragen:

É What reasons do developers have for using or not using staticanalysis tools to find bugs?

É How well do current static analysis tools fit into the workflows ofdevelopers? We define a workflow as the steps a developer takeswhen writing, inspecting and modifying their code.

É What improvements do developers want to see being made to staticanalysis tools?

,Thies Johannsen, 9. Juli 2015 22/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Teilnehmer an der Studie:

É 20 Teilnehmer insgesamtÉ 16 professionelle EntwicklerÉ 4 Studenten (graduate) mit Berufserfahrung

É 2 Teilnehmer hatten Erfahrung im Erstellen von StatischenAnalysetools.

É 2 Teilnehmer wurden per Telefon, bzw. Videochat befragt.

,Thies Johannsen, 9. Juli 2015 23/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

,Thies Johannsen, 9. Juli 2015 24/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?Methodik:

É „halb-strukturiertes“ Interview, 40 - 60 MinutenÉ Es wurde ein Frageboden vorbereitet, aber abhängig von den Antworten

der Teilnehmer wurden spontan weitere Fragen gestellt oder ausgelassen.

É Interaktives InterviewÉ Die Teilnehmer wurden bei ihrer Arbeit beobachtet und gebeten ihren

Arbeitsablauf zu erklären.É Währenddessen wurden Fragen gestellt:

É Now that you have run your tool and gotten your feedback, what is your nextmove(s)?

É Do you configure the settings of your tool from default? If so, how?É Does this static analysis tool aid in assessing what to do about a warning?É Do you feel that ”quick fixes” or code suggestions would be helpful if they

were available?É 6 Teilnehmer konnten aus Vertraulichkeitsgründen nicht am interaktiven

Interview teilnehmen, diese bekamen Aufgaben gestellt.É Den 2 Teilnehmern, die per Telefon, bzw. Videochat befragt wurden,

wurde ein Szenario vorgelegt und es wurde gefragt, wie sie vorgehenwürden.

É Participatory DesignÉ Den Teilnehmern wurde ein leeres Blatt Papier gegeben und sie durften

nach belieben schreiben/zeichnen, welche Verbesserungen an denAnalysewerkzeugen sie gerne hätten.

,Thies Johannsen, 9. Juli 2015 25/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?Methodik:

É „halb-strukturiertes“ Interview, 40 - 60 MinutenÉ Es wurde ein Frageboden vorbereitet, aber abhängig von den Antworten

der Teilnehmer wurden spontan weitere Fragen gestellt oder ausgelassen.É Interaktives Interview

É Die Teilnehmer wurden bei ihrer Arbeit beobachtet und gebeten ihrenArbeitsablauf zu erklären.

É Währenddessen wurden Fragen gestellt:É Now that you have run your tool and gotten your feedback, what is your next

move(s)?É Do you configure the settings of your tool from default? If so, how?É Does this static analysis tool aid in assessing what to do about a warning?É Do you feel that ”quick fixes” or code suggestions would be helpful if they

were available?É 6 Teilnehmer konnten aus Vertraulichkeitsgründen nicht am interaktiven

Interview teilnehmen, diese bekamen Aufgaben gestellt.É Den 2 Teilnehmern, die per Telefon, bzw. Videochat befragt wurden,

wurde ein Szenario vorgelegt und es wurde gefragt, wie sie vorgehenwürden.

É Participatory DesignÉ Den Teilnehmern wurde ein leeres Blatt Papier gegeben und sie durften

nach belieben schreiben/zeichnen, welche Verbesserungen an denAnalysewerkzeugen sie gerne hätten.

,Thies Johannsen, 9. Juli 2015 25/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?Methodik:

É „halb-strukturiertes“ Interview, 40 - 60 MinutenÉ Es wurde ein Frageboden vorbereitet, aber abhängig von den Antworten

der Teilnehmer wurden spontan weitere Fragen gestellt oder ausgelassen.É Interaktives Interview

É Die Teilnehmer wurden bei ihrer Arbeit beobachtet und gebeten ihrenArbeitsablauf zu erklären.

É Währenddessen wurden Fragen gestellt:É Now that you have run your tool and gotten your feedback, what is your next

move(s)?É Do you configure the settings of your tool from default? If so, how?É Does this static analysis tool aid in assessing what to do about a warning?É Do you feel that ”quick fixes” or code suggestions would be helpful if they

were available?É 6 Teilnehmer konnten aus Vertraulichkeitsgründen nicht am interaktiven

Interview teilnehmen, diese bekamen Aufgaben gestellt.É Den 2 Teilnehmern, die per Telefon, bzw. Videochat befragt wurden,

wurde ein Szenario vorgelegt und es wurde gefragt, wie sie vorgehenwürden.

É Participatory DesignÉ Den Teilnehmern wurde ein leeres Blatt Papier gegeben und sie durften

nach belieben schreiben/zeichnen, welche Verbesserungen an denAnalysewerkzeugen sie gerne hätten.

,Thies Johannsen, 9. Juli 2015 25/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Auswerten der Antworten:

É abschreiben aller gegebenen AntwortenÉ Kategorisieren nach R. Gordon „Coding interview responses“

É Tool OutputÉ Supporting TeamworkÉ User Input and CustomizabilityÉ Result UnderstandabilityÉ Developer Workflows

É Jede Antwort wurde markiert, in welche Kategorie sie eingeordnetwerden kann und ob die Antwort positiv oder negativ ist.

,Thies Johannsen, 9. Juli 2015 26/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Auswerten der Antworten:

É abschreiben aller gegebenen AntwortenÉ Kategorisieren nach R. Gordon „Coding interview responses“

É Tool OutputÉ Supporting TeamworkÉ User Input and CustomizabilityÉ Result UnderstandabilityÉ Developer Workflows

É Jede Antwort wurde markiert, in welche Kategorie sie eingeordnetwerden kann und ob die Antwort positiv oder negativ ist.

,Thies Johannsen, 9. Juli 2015 26/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Auswerten der Antworten:

É abschreiben aller gegebenen AntwortenÉ Kategorisieren nach R. Gordon „Coding interview responses“

É Tool OutputÉ Supporting TeamworkÉ User Input and CustomizabilityÉ Result UnderstandabilityÉ Developer Workflows

É Jede Antwort wurde markiert, in welche Kategorie sie eingeordnetwerden kann und ob die Antwort positiv oder negativ ist.

,Thies Johannsen, 9. Juli 2015 26/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

,Thies Johannsen, 9. Juli 2015 27/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Einige beispielhafte Antworten:

É ”...like I mentioned with FlexLint it gives you so many warnings andsifting through them is so, arduous that whenever I just look at it I’mlike ehhh forget this.”

É ”so now I wanna know why raising a string exception is bad. Likewhat should I be doing instead?”

É ”I find that the information they provide is not very useful, so I tendto ignore them.”

É ”Clang is my favorite. Its built into the compiler. You don’t have toinvoke anything special.”

,Thies Johannsen, 9. Juli 2015 28/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Einige beispielhafte Antworten:

É ”...like I mentioned with FlexLint it gives you so many warnings andsifting through them is so, arduous that whenever I just look at it I’mlike ehhh forget this.”

É ”so now I wanna know why raising a string exception is bad. Likewhat should I be doing instead?”

É ”I find that the information they provide is not very useful, so I tendto ignore them.”

É ”Clang is my favorite. Its built into the compiler. You don’t have toinvoke anything special.”

,Thies Johannsen, 9. Juli 2015 28/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Einige beispielhafte Antworten:

É ”...like I mentioned with FlexLint it gives you so many warnings andsifting through them is so, arduous that whenever I just look at it I’mlike ehhh forget this.”

É ”so now I wanna know why raising a string exception is bad. Likewhat should I be doing instead?”

É ”I find that the information they provide is not very useful, so I tendto ignore them.”

É ”Clang is my favorite. Its built into the compiler. You don’t have toinvoke anything special.”

,Thies Johannsen, 9. Juli 2015 28/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Einige beispielhafte Antworten:

É ”...like I mentioned with FlexLint it gives you so many warnings andsifting through them is so, arduous that whenever I just look at it I’mlike ehhh forget this.”

É ”so now I wanna know why raising a string exception is bad. Likewhat should I be doing instead?”

É ”I find that the information they provide is not very useful, so I tendto ignore them.”

É ”Clang is my favorite. Its built into the compiler. You don’t have toinvoke anything special.”

,Thies Johannsen, 9. Juli 2015 28/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Einige beispielhafte Antworten:

É ”...like I mentioned with FlexLint it gives you so many warnings andsifting through them is so, arduous that whenever I just look at it I’mlike ehhh forget this.”

É ”so now I wanna know why raising a string exception is bad. Likewhat should I be doing instead?”

É ”I find that the information they provide is not very useful, so I tendto ignore them.”

É ”Clang is my favorite. Its built into the compiler. You don’t have toinvoke anything special.”

,Thies Johannsen, 9. Juli 2015 28/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

What reasons do developers have for using or not using static analysistools to find bugs?

+ Bugs können automatisch gefunden werden.É ”anything that will automate a mundane task is great.”

+ Das Tool ist bereits in der IDE integriert.

+ Es motiviert in Teams auf „dumme Fehler“ zu achten.

- false positives- schlechte/unverständliche Fehlermeldungen

É ”it’s one thing to give an error message, it’s another thing to give auseful error message.”

- umständliches Arbeiten in Teams

É Einstellungen lassen sich nicht kopieren

- schwer zu konfigurieren

- ”quick fixes” fehlen oder sind schlecht implementiert

,Thies Johannsen, 9. Juli 2015 29/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

What reasons do developers have for using or not using static analysistools to find bugs?

+ Bugs können automatisch gefunden werden.É ”anything that will automate a mundane task is great.”

+ Das Tool ist bereits in der IDE integriert.

+ Es motiviert in Teams auf „dumme Fehler“ zu achten.

- false positives- schlechte/unverständliche Fehlermeldungen

É ”it’s one thing to give an error message, it’s another thing to give auseful error message.”

- umständliches Arbeiten in TeamsÉ Einstellungen lassen sich nicht kopieren

- schwer zu konfigurieren

- ”quick fixes” fehlen oder sind schlecht implementiert

,Thies Johannsen, 9. Juli 2015 29/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

How well do current static analysis tools fit into the workflows ofdevelopers?

É 19 der 20 Teilnehmer ist eine gute Integration in den Arbeitsablaufwichtig.É gute Integration in die IDEÉ gute Integration in den Compiler

É Arbeitsumgebung sollte nicht gewechselt werden müssen

É ”if it disrupts your flow, you’re not gonne use it.”

,Thies Johannsen, 9. Juli 2015 30/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

How well do current static analysis tools fit into the workflows ofdevelopers?

É 19 der 20 Teilnehmer ist eine gute Integration in den Arbeitsablaufwichtig.É gute Integration in die IDEÉ gute Integration in den Compiler

É Arbeitsumgebung sollte nicht gewechselt werden müssenÉ ”if it disrupts your flow, you’re not gonne use it.”

,Thies Johannsen, 9. Juli 2015 30/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

What improvements do developers want to see being made to staticanalysis tools?

É bessere Darstellung von ”quick fixes”É es sollte eine Vorschau geben, wie der Code geändert wird, z.B. geteilte

AnsichtenÉ ”three option dialog” (anwenden, abbrechen, Schritt für Schritt)

É Feedback sollte schneller kommen

É Analyse sollte immer im Hintergrund laufenÉ Analyse sollte bei jedem Compile-Vorgang durchgeführt werden

É gefundene Fehler sollten einfach temporär zurückgestellt und mitanderen geteilt werden können

É eine Übersicht, wo im Code sich viele Fehler befinden (ähnlichCodeCity)

É statt verschiedener Farben für unterschiedlich schwere Fehler liebereine Farbe mit unterschiedlicher Intensität

,Thies Johannsen, 9. Juli 2015 31/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

What improvements do developers want to see being made to staticanalysis tools?

É bessere Darstellung von ”quick fixes”É es sollte eine Vorschau geben, wie der Code geändert wird, z.B. geteilte

AnsichtenÉ ”three option dialog” (anwenden, abbrechen, Schritt für Schritt)

É Feedback sollte schneller kommenÉ Analyse sollte immer im Hintergrund laufenÉ Analyse sollte bei jedem Compile-Vorgang durchgeführt werden

É gefundene Fehler sollten einfach temporär zurückgestellt und mitanderen geteilt werden können

É eine Übersicht, wo im Code sich viele Fehler befinden (ähnlichCodeCity)

É statt verschiedener Farben für unterschiedlich schwere Fehler liebereine Farbe mit unterschiedlicher Intensität

,Thies Johannsen, 9. Juli 2015 31/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

What improvements do developers want to see being made to staticanalysis tools?

É bessere Darstellung von ”quick fixes”É es sollte eine Vorschau geben, wie der Code geändert wird, z.B. geteilte

AnsichtenÉ ”three option dialog” (anwenden, abbrechen, Schritt für Schritt)

É Feedback sollte schneller kommenÉ Analyse sollte immer im Hintergrund laufenÉ Analyse sollte bei jedem Compile-Vorgang durchgeführt werden

É gefundene Fehler sollten einfach temporär zurückgestellt und mitanderen geteilt werden können

É eine Übersicht, wo im Code sich viele Fehler befinden (ähnlichCodeCity)

É statt verschiedener Farben für unterschiedlich schwere Fehler liebereine Farbe mit unterschiedlicher Intensität

,Thies Johannsen, 9. Juli 2015 31/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

What improvements do developers want to see being made to staticanalysis tools?

É bessere Darstellung von ”quick fixes”É es sollte eine Vorschau geben, wie der Code geändert wird, z.B. geteilte

AnsichtenÉ ”three option dialog” (anwenden, abbrechen, Schritt für Schritt)

É Feedback sollte schneller kommenÉ Analyse sollte immer im Hintergrund laufenÉ Analyse sollte bei jedem Compile-Vorgang durchgeführt werden

É gefundene Fehler sollten einfach temporär zurückgestellt und mitanderen geteilt werden können

É eine Übersicht, wo im Code sich viele Fehler befinden (ähnlichCodeCity)

É statt verschiedener Farben für unterschiedlich schwere Fehler liebereine Farbe mit unterschiedlicher Intensität

,Thies Johannsen, 9. Juli 2015 31/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

What improvements do developers want to see being made to staticanalysis tools?

É bessere Darstellung von ”quick fixes”É es sollte eine Vorschau geben, wie der Code geändert wird, z.B. geteilte

AnsichtenÉ ”three option dialog” (anwenden, abbrechen, Schritt für Schritt)

É Feedback sollte schneller kommenÉ Analyse sollte immer im Hintergrund laufenÉ Analyse sollte bei jedem Compile-Vorgang durchgeführt werden

É gefundene Fehler sollten einfach temporär zurückgestellt und mitanderen geteilt werden können

É eine Übersicht, wo im Code sich viele Fehler befinden (ähnlichCodeCity)

É statt verschiedener Farben für unterschiedlich schwere Fehler liebereine Farbe mit unterschiedlicher Intensität

,Thies Johannsen, 9. Juli 2015 31/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Externe Gültigkeit:

É nur 20 TeilnehmerÉ Mehr Teilnehmer hätten andererseits den Aufwand der Auswertung

enorm erhöht und dadurch hätte eventuell die Sorgfalt gelitten.

É Alle Teilnehmer arbeiten auch außerhalb der Studie mit Werkzeugenzur statischen Analyse.

É 2 Teilnehmer haben bereits selbst Werkzeuge zur statischen Analyseentwickelt und haben so eventuell eine nicht repräsentative Sicht.

,Thies Johannsen, 9. Juli 2015 32/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Externe Gültigkeit:

É nur 20 TeilnehmerÉ Mehr Teilnehmer hätten andererseits den Aufwand der Auswertung

enorm erhöht und dadurch hätte eventuell die Sorgfalt gelitten.

É Alle Teilnehmer arbeiten auch außerhalb der Studie mit Werkzeugenzur statischen Analyse.

É 2 Teilnehmer haben bereits selbst Werkzeuge zur statischen Analyseentwickelt und haben so eventuell eine nicht repräsentative Sicht.

,Thies Johannsen, 9. Juli 2015 32/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Externe Gültigkeit:

É nur 20 TeilnehmerÉ Mehr Teilnehmer hätten andererseits den Aufwand der Auswertung

enorm erhöht und dadurch hätte eventuell die Sorgfalt gelitten.

É Alle Teilnehmer arbeiten auch außerhalb der Studie mit Werkzeugenzur statischen Analyse.

É 2 Teilnehmer haben bereits selbst Werkzeuge zur statischen Analyseentwickelt und haben so eventuell eine nicht repräsentative Sicht.

,Thies Johannsen, 9. Juli 2015 32/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Interne Gültigkeit:

É 2 Teilnehmer waren nicht vor Ort und mussten überTelefon/Videochat befragt werden.

É 6 Teilnehmer durften nicht an ihrem normalen Arbeitsplatz arbeitenund bekamen daher andere Aufgaben.

É Zu Beginn wurden den Teilnehmern die Ziele der Studie genannt.

,Thies Johannsen, 9. Juli 2015 33/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Interne Gültigkeit:

É 2 Teilnehmer waren nicht vor Ort und mussten überTelefon/Videochat befragt werden.

É 6 Teilnehmer durften nicht an ihrem normalen Arbeitsplatz arbeitenund bekamen daher andere Aufgaben.

É Zu Beginn wurden den Teilnehmern die Ziele der Studie genannt.

,Thies Johannsen, 9. Juli 2015 33/ 44

Why Don’t Software Developers Use StaticAnalysis Tools to Find Bugs?

Interne Gültigkeit:

É 2 Teilnehmer waren nicht vor Ort und mussten überTelefon/Videochat befragt werden.

É 6 Teilnehmer durften nicht an ihrem normalen Arbeitsplatz arbeitenund bekamen daher andere Aufgaben.

É Zu Beginn wurden den Teilnehmern die Ziele der Studie genannt.

,Thies Johannsen, 9. Juli 2015 33/ 44

False Positive

1 #include <stdio .h>23 int main( int argc , char *argv [ ] )4 {5 pr int f ( "%s \n" , argv [0 ] ) ;6 return 0;7 }

,Thies Johannsen, 9. Juli 2015 34/ 44

False Positive

1 #include <stdio .h>23 int main( int argc , char *argv [ ] )4 {5 pr int f ( "%s \n" , argv [0 ] ) ;6 return 0;7 }

unused.c: (in function main)unused.c:3:14: Parameter argc not usedA function parameter is not used in the body of the function. If theargument is needed for type compatibility or future plans, use/*@unused@*/ in the argument declaration. (Use -paramuse to inhibitwarning)

,Thies Johannsen, 9. Juli 2015 34/ 44

False Positive

1 void foo (char c) {2 unsigned uppercase = 0;3 unsigned keycode = 0;45 switch(c ) {6 case ’A ’ : uppercase = 1;7 case ’a ’ : keycode = 65;8 break;9 case ’B ’ : uppercase = 1;

10 case ’b ’ : keycode = 66;11 break;12 /* . . . * /13 }14 /* stuf f * /15 }

,Thies Johannsen, 9. Juli 2015 35/ 44

False Positive

1 void foo (char c) {2 unsigned uppercase = 0;3 unsigned keycode = 0;45 switch(c ) {6 case ’A ’ : uppercase = 1;7 case ’a ’ : keycode = 65;8 break;9 case ’B ’ : uppercase = 1;

10 case ’b ’ : keycode = 66;11 break;12 /* . . . * /13 }14 /* stuf f * /15 }

fallthrough.c: (in function foo)fallthrough.c:7:10: Fall through case (no preceding break)Execution falls through from the previous case (use /*@fallthrough@*/to mark fallthrough cases). (Use -casebreak to inhibit warning)fallthrough.c:10:10: Fall through case (no preceding break)

(Hoffmann, „Software-Qualität“, Springer Vieweg, 2013)

,Thies Johannsen, 9. Juli 2015 35/ 44

False Positive

Können false positives verhindert werden?

É Schwierig bis unmöglichÉ Code, der in einem Fall korrekt ist, kann in einem anderen Fall ein

Fehler seinÉ es ist möglich einzelne Meldungen zu unterdrücken

,Thies Johannsen, 9. Juli 2015 36/ 44

False Positive

1 void foo (char c) {2 unsigned uppercase = 0;3 unsigned keycode = 0;45 switch(c ) {6 case ’A ’ : uppercase = 1;7 /*@fallthrough@* /8 case ’a ’ : keycode = 65;9 break;

10 case ’B ’ : uppercase = 1;11 /*@fallthrough@* /12 case ’b ’ : keycode = 66;13 break;14 /* . . . * /15 }16 /* stuf f * /17 }

,Thies Johannsen, 9. Juli 2015 37/ 44

False Positive

Können false positives verhindert werden?

É schwierig bis unmöglichÉ Code, der in einem Fall korrekt ist, kann in einem anderen Fall ein

Fehler seinÉ es ist möglich einzelne Meldungen zu unterdrücken

É nicht sehr komfortabelÉ der Code wird unübersichtlich

,Thies Johannsen, 9. Juli 2015 38/ 44

Überflutung

Was passiert, wenn eine neue Klasse hinzugefügt wird?

É Wir bekommen für jede nicht benutzte Funktion eine Warnung.

,Thies Johannsen, 9. Juli 2015 39/ 44

Überflutung

Was passiert, wenn eine neue Klasse hinzugefügt wird?

É Wir bekommen für jede nicht benutzte Funktion eine Warnung.

,Thies Johannsen, 9. Juli 2015 39/ 44

Überflutung

,Thies Johannsen, 9. Juli 2015 40/ 44

Quick Fixes

Abbildung: quick fix in eclipse (help.eclipse.org)

É Vorschläge, den Code automatisch anzupassenÉ bei größeren Änderungen sehr riskant

É Ist die Semantik erhalten geblieben?É Kommt es dadurch zu neuen Fehlern?

,Thies Johannsen, 9. Juli 2015 41/ 44

Quick Fixes

Abbildung: quick fix in eclipse (help.eclipse.org)

É Vorschläge, den Code automatisch anzupassenÉ bei größeren Änderungen sehr riskant

É Ist die Semantik erhalten geblieben?É Kommt es dadurch zu neuen Fehlern?

,Thies Johannsen, 9. Juli 2015 41/ 44

schlechte Fehlermeldungen

É ”D’oh! A nonsensical method invocation”É This partical method invocation doesn’t make sense, for reasons that

should be apparent from inspection.

É Wäre der Funktionsaufruf so offensichtlich sinnlos, dann hätte derProgrammierer ihn nicht gemacht.

,Thies Johannsen, 9. Juli 2015 42/ 44

schlechte Fehlermeldungen

É ”D’oh! A nonsensical method invocation”É This partical method invocation doesn’t make sense, for reasons that

should be apparent from inspection.

É Wäre der Funktionsaufruf so offensichtlich sinnlos, dann hätte derProgrammierer ihn nicht gemacht.

,Thies Johannsen, 9. Juli 2015 42/ 44

Zusammenfassung

É statische Codeanalyse kann eine Wertvolle Hilfe seinÉ statische Codeanalyse ist kein Allheilmittel, die eigentliche Arbeit

liegt weiter beim ProgrammiererÉ die größten Probleme

É Anzahl der FehlermeldungenÉ False PositivesÉ umständliche Konfiguration

,Thies Johannsen, 9. Juli 2015 43/ 44

,Thies Johannsen, 9. Juli 2015 44/ 44

top related