was software-archive erzählen
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