was software-archive erzählen

Post on 05-Jul-2015

890 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Presented at SE 2006.

TRANSCRIPT

Was Software-Archive erzählen

Stephan Diehl • Universität TrierAndreas Zeller • Universität des SaarlandesTom Zimmermann • Universität des Saarlandes

Was Software-Archive erzählen

Stephan Diehl • Universität TrierAndreas Zeller • Universität des SaarlandesTom Zimmermann • Universität des Saarlandes

Was Software-Archive erzählen

Stephan Diehl • Universität TrierAndreas Zeller • Universität des SaarlandesTom Zimmermann • Universität des Saarlandes

Fehler

Fehler

Fehler Korrekturen

Fehler • Änderungen • Versionen

Fehler • Änderungen • Versionen

Was muss ich noch ändern?

Fehler • Änderungen • Versionen

Was muss ich noch ändern?

Welche Module muss ich testen?

Fehler • Änderungen • Versionen

Was muss ich noch ändern?

Welche Module muss ich testen?

Entwickler, die diese Methode geändert haben, haben auch folgende Methoden geändert...

funded by IBM Eclipse Innovation Grant

eROSEeROSEZimmermann et al. (TSE 2005)

funded by IBM Eclipse Innovation GrantZimmermann et al. (TSE 2005)

funded by IBM Eclipse Innovation Grant

In 64% aller Änderungen enthalten die besten drei Vorschläge eine korrekte Stelle

Zimmermann et al. (TSE 2005)

Gleichzeitige Änderungen

internal files

icons

public API

Coupling for ComparePreferencePage.java

and plugin.properties

buildnotes_compare.html

EPOSEEwww.eposoft.org

Burch et al. (SoftVis 2005)

Fehler • Änderungen • Versionen

Was muss ich noch ändern?

Welche Module muss ich testen?

Welche Module muss ich testen?

Was muss ich noch ändern?

Fehler • Änderungen • Versionen

Module

Module

Module

Module

Welche sollte manam meisten testen?

Womit können wir Fehlschläge vorhersagen?

wenn wir Fehlschläge haben (und sie uns leisten können)

Früheres Fehlschlagen

15

12

8

14

7

6

2

2

1

1

1

Womit können wir Fehlschläge vorhersagen?

wenn wir Fehlschläge haben (und sie uns leisten können)

Früheres Fehlschlagen

15

12

8

14

7

6

2

2

1

1

1

Womit können wir Fehlschläge vorhersagen?

Früheres Fehlschlagen

wenn wir Fehlschläge haben (und sie uns leisten können)

wenn wir wissen,welche die richtige ist

Komplexitäts-MetrikenFrüheres Fehlschlagen

15

12

8

14

7

6

2

2

1

1

1

Womit können wir Fehlschläge vorhersagen?

Früheres Fehlschlagen

wenn wir Fehlschläge haben (und sie uns leisten können)

wenn wir wissen,welche die richtige ist

Komplexitäts-MetrikenKomplexitäts-Metrikenpublic static void main(String[] args)

{

! //{{{ Check for Java 1.4 or later

! String javaVersion = System.getProperty("java.version");

! if(javaVersion.compareTo("1.4") < 0)

! {

! ! System.err.println("You are running Java version "

! ! ! + javaVersion + ".");

! ! System.err.println("jEdit requires Java 1.4 or later.");

! ! System.exit(1);

! } //}}}

! // later on we need to know if certain code is called from

! // the main thread

! mainThread = Thread.currentThread();

! settingsDirectory = ".jedit";

! ...

Früheres Fehlschlagen

15

12

8

14

7

6

2

2

1

1

1

Womit können wir Fehlschläge vorhersagen?

Früheres Fehlschlagen

wenn wir Fehlschläge haben (und sie uns leisten können)

wenn wir wissen,welche die richtige ist

Komplexitäts-MetrikenKomplexitäts-Metrikenpublic static void main(String[] args)

{

! //{{{ Check for Java 1.4 or later

! String javaVersion = System.getProperty("java.version");

! if(javaVersion.compareTo("1.4") < 0)

! {

! ! System.err.println("You are running Java version "

! ! ! + javaVersion + ".");

! ! System.err.println("jEdit requires Java 1.4 or later.");

! ! System.exit(1);

! } //}}}

! // later on we need to know if certain code is called from

! // the main thread

! mainThread = Thread.currentThread();

! settingsDirectory = ".jedit";

! ...

Komplexitäts-Metrikenpublic static void main(String[] args)

{

! //{{{ Check for Java 1.4 or later

! String javaVersion = System.getProperty("java.version");

! if(javaVersion.compareTo("1.4") < 0)

! {

! ! System.err.println("You are running Java version "

! ! ! + javaVersion + ".");

! ! System.err.println("jEdit requires Java 1.4 or later.");

! ! System.exit(1);

! } //}}}

! // later on we need to know if certain code is called from

! // the main thread

! mainThread = Thread.currentThread();

! settingsDirectory = ".jedit";

! ...

Nested Block Depth ! ! ! ! 5

Number of parameters ! ! ! ! 1

McCabe Cylcomatic Complexity!! 62

Method Lines of Code ! ! ! 301

Früheres Fehlschlagen

15

12

8

14

7

6

2

2

1

1

1

Womit können wir Fehlschläge vorhersagen?

Früheres Fehlschlagen

Metriken @ MicrosoftNagappan/Ball/Zeller (ICSE 2006)

Metriken @ Microsoft

1. Fehler beim Anwender sammeln Fehler

Nagappan/Ball/Zeller (ICSE 2006)

Metriken @ Microsoft

1. Fehler beim Anwender sammeln

2. Fehler auf Codestellen abbildenKorrekturen

Fehler

Nagappan/Ball/Zeller (ICSE 2006)

Metriken @ Microsoft

1. Fehler beim Anwender sammeln

2. Fehler auf Codestellen abbilden

3. Fehler mit Metriken korrelierenKorrekturen

Fehler

Nagappan/Ball/Zeller (ICSE 2006)

Metriken @ Microsoft

1. Fehler beim Anwender sammeln

2. Fehler auf Codestellen abbilden

3. Fehler mit Metriken korrelieren

4. Aus Metriken Fehlerträchtigkeit vorhersagen

Korrekturen

Fehler

Nagappan/Ball/Zeller (ICSE 2006)

Projekte

• Internet Explorer 6

• IIS Server

• Windows Process Messaging

• DirectX

• NetMeeting

>1.000.000 Codezeilen

Projekte

A B C D E

Korrelieren Metrikenmit Fehlverhalten?

Korrelieren Metrikenmit Fehlverhalten?

Projekt Korrelierte Metriken

Korrelieren Metrikenmit Fehlverhalten?

Projekt Korrelierte MetrikenA #Classes und 5 abgeleitete

Korrelieren Metrikenmit Fehlverhalten?

Projekt Korrelierte MetrikenA #Classes und 5 abgeleiteteB fast alle

Korrelieren Metrikenmit Fehlverhalten?

Projekt Korrelierte MetrikenA #Classes und 5 abgeleiteteB fast alleC alle außer MaxInheritanceDepth

Korrelieren Metrikenmit Fehlverhalten?

Projekt Korrelierte MetrikenA #Classes und 5 abgeleiteteB fast alleC alle außer MaxInheritanceDepthD nur #Lines

Korrelieren Metrikenmit Fehlverhalten?

Projekt Korrelierte MetrikenA #Classes und 5 abgeleiteteB fast alleC alle außer MaxInheritanceDepthD nur #LinesE #Functions, #Arcs, McCabe

Projekt Korrelierte MetrikenA #Classes und 5 abgeleiteteB fast alleC alle außer MaxInheritanceDepthD nur #LinesE #Functions, #Arcs, McCabe

Korrelieren Metrikenmit Fehlverhalten?

JA

Gibt es universelle Metriken?

Gibt es universelle Metriken?

Projekt Korrelierte MetrikenA #Classes und 5 abgeleiteteB fast alleC alle außer MaxInheritanceDepthD nur #LinesE #Functions, #Arcs, McCabe

Projekt Korrelierte MetrikenA #Classes und 5 abgeleiteteB fast alleC alle außer MaxInheritanceDepthD nur #LinesE #Functions, #Arcs, McCabe

Gibt es universelle Metriken?

NEIN

Können wir Fehlerorte vorhersagen?

Können wir Fehlerorte vorhersagen?

• Grundidee: Metriken kombinieren undRegressions-Modelle ableiten

Können wir Fehlerorte vorhersagen?

• Grundidee: Metriken kombinieren undRegressions-Modelle ableiten

• In diese können wir Metriken stecken, um die Fehlerwahrscheinlichkeit vorherzusagen

Können wir Fehlerorte vorhersagen?

• Grundidee: Metriken kombinieren undRegressions-Modelle ableiten

• In diese können wir Metriken stecken, um die Fehlerwahrscheinlichkeit vorherzusagen

• Module können anhand der Fehlerwahrscheinlichkeit sortiert werden

Können wir Fehlerorte vorhersagen?

Projekt #Komponenten R2-WertA 9 0.741B 6 0.779C 7 0.579D 7 0.684E 5 0.919

Projekt #Komponenten R2-WertA 9 0.741B 6 0.779C 7 0.579D 7 0.684E 5 0.919

JA

Können wir Fehlerorte vorhersagen?

HATARI

Sliwerski/Zimmermann/Zeller (Demo@FSE 2005)

HATARI

HATARI

Imports in Eclipse

Schröter/Zimmermannl/Zeller (Tech. Report)

Imports in Eclipse

import org.eclipse.jdt.internal.compiler.lookup.*;import org.eclipse.jdt.internal.compiler.*;import org.eclipse.jdt.internal.compiler.ast.*;import org.eclipse.jdt.internal.compiler.util.*;...import org.eclipse.pde.core.*;import org.eclipse.jface.wizard.*;import org.eclipse.ui.*;

Schröter/Zimmermannl/Zeller (Tech. Report)

Imports in Eclipse

import org.eclipse.jdt.internal.compiler.lookup.*;import org.eclipse.jdt.internal.compiler.*;import org.eclipse.jdt.internal.compiler.ast.*;import org.eclipse.jdt.internal.compiler.util.*;...import org.eclipse.pde.core.*;import org.eclipse.jface.wizard.*;import org.eclipse.ui.*;

71% aller Komponenten, die compiler importieren, müssen korrigiert werden

Schröter/Zimmermannl/Zeller (Tech. Report)

Imports in Eclipse

import org.eclipse.jdt.internal.compiler.lookup.*;import org.eclipse.jdt.internal.compiler.*;import org.eclipse.jdt.internal.compiler.ast.*;import org.eclipse.jdt.internal.compiler.util.*;...import org.eclipse.pde.core.*;import org.eclipse.jface.wizard.*;import org.eclipse.ui.*;

14% aller Komponenten, die ui importieren, müssen korrigiert werden

71% aller Komponenten, die compiler importieren, müssen korrigiert werden

Schröter/Zimmermannl/Zeller (Tech. Report)

Imports in Eclipse

Korrelation mit Fehlschlagen

Korrelation mit Erfolg

import org.eclipse.jdt.internal.compiler.lookup.*;import org.eclipse.jdt.internal.compiler.*;import org.eclipse.jdt.internal.compiler.ast.*;import org.eclipse.jdt.internal.compiler.util.*;...import org.eclipse.pde.core.*;import org.eclipse.jface.wizard.*;import org.eclipse.ui.*;

Imports in Eclipse

Korrelation mit Fehlschlagen

Korrelation mit Erfolg

Compiler-Code • Interna • Core-Funktionalität

GUI-Code • Standard-Java-Klassen • Hilfstexte

Imports in Eclipse

Korrelation mit Fehlschlagen

Korrelation mit Erfolg

Compiler-Code • Interna • Core-Funktionalität

GUI-Code • Standard-Java-Klassen • Hilfstexte

Welche sollte manam meisten testen?

Vorhersage fehlerträchtiger Module

Vorhersage fehlerträchtiger Module

• Analog zu Microsoft-Ansatz,aber Imports statt Metriken

Vorhersage fehlerträchtiger Module

• Analog zu Microsoft-Ansatz,aber Imports statt Metriken

• Basis: Eclipse mit Fehlerdatenbank (Bugzilla) und Versionsdatenbank (CVS)

Vorhersage fehlerträchtiger Module

• Analog zu Microsoft-Ansatz,aber Imports statt Metriken

• Basis: Eclipse mit Fehlerdatenbank (Bugzilla) und Versionsdatenbank (CVS)

• 36% der Packages waren fehlerträchtig(= mussten nachträglich korrigiert werden)

Vorhersage fehlerträchtiger Module

• Analog zu Microsoft-Ansatz,aber Imports statt Metriken

• Basis: Eclipse mit Fehlerdatenbank (Bugzilla) und Versionsdatenbank (CVS)

• 36% der Packages waren fehlerträchtig(= mussten nachträglich korrigiert werden)

• Vorhersage mit Support-Vektor-Maschine

Ergebnis

Ergebnis~

300

Pack

ages

Ergebnis~

300

Pack

ages

top 5%

Ergebnis~

300

Pack

ages

10%

90%

fehlerträchtig erfolgreich

top 5%

Ergebnis~

300

Pack

ages

10%

90%

fehlerträchtig erfolgreich

top 5%

Vorhersagezur Entwurfszeit!

Fazit

Fazit

Software-Archive erzählen viel über ein Projekt

Fazit

Software-Archive erzählen viel über ein Projekt

Wertvolle Daten für neue Anwendungen:

Fazit

Software-Archive erzählen viel über ein Projekt

Wertvolle Daten für neue Anwendungen:

Vorhersage verwandter Änderungen

Fazit

Software-Archive erzählen viel über ein Projekt

Wertvolle Daten für neue Anwendungen:

Vorhersage verwandter Änderungen

Vorhersage fehlerträchtiger Module

Fazit

Software-Archive erzählen viel über ein Projekt

Wertvolle Daten für neue Anwendungen:

Vorhersage verwandter Änderungen

Vorhersage fehlerträchtiger Module

Wenig zusätzlicher Aufwand nötig

top related