1. Was Software-Archive
erzählen
Stephan Diehl • Universität Trier
Andreas Zeller • Universität des Saarlandes
Tom Zimmermann • Universität des Saarlandes
2. Was Software-Archive
erzählen
Stephan Diehl • Universität Trier
Andreas Zeller • Universität des Saarlandes
Tom Zimmermann • Universität des Saarlandes
3. Was Software-Archive
erzählen
Stephan Diehl • Universität Trier
Andreas Zeller • Universität des Saarlandes
Tom Zimmermann • Universität des Saarlandes
17. In 64% aller Änderungen enthalten die besten
drei Vorschläge eine korrekte Stelle
Zimmermann et al. (TSE 2005) funded by IBM Eclipse Innovation Grant
18. Gleichzeitige Änderungen
buildnotes_compare.html
public API
internal files
Coupling for
ComparePreferencePage.java
and plugin.properties
Burch et al.
(SoftVis 2005)
EPOSEE
icons
www.eposoft.org
19. Was muss ich Welche Module
noch ändern? muss ich testen?
Fehler • Änderungen • Versionen
20. Was muss ich Welche Module
noch ändern? muss ich testen?
Fehler • Änderungen • Versionen
26. Womit können wir
Fehlschläge vorhersagen?
Früheres Fehlschlagen
7 2
12 1
6
8
15 1
2
14
1
wenn wir Fehlschläge haben
(und sie uns leisten können)
27. Womit können wir
Fehlschläge vorhersagen?
Früheres Fehlschlagen
7 2
12 1
6
8
15 1
2
14
1
wenn wir Fehlschläge haben
(und sie uns leisten können)
28. Womit können wir
Fehlschläge vorhersagen?
Früheres Fehlschlagen Komplexitäts-Metriken
7 2
12 1
6
8
15 1
2
14
1
wenn wir wissen,
wenn wir Fehlschläge haben
welche die richtige ist
(und sie uns leisten können)
29. Womit können wir
Fehlschläge vorhersagen?
Früheres Fehlschlagen Komplexitäts-Metriken
public static void main(String[] args)
{
7 2 ! //{{{ Check for Java 1.4 or later
12 1 ! String javaVersion = System.getProperty(quot;java.versionquot;);
! if(javaVersion.compareTo(quot;1.4quot;) < 0)
!{
! ! System.err.println(quot;You are running Java version quot;
6
8
15 1 ! ! ! + javaVersion + quot;.quot;);
2 ! ! System.err.println(quot;jEdit requires Java 1.4 or later.quot;);
! ! System.exit(1);
! } //}}}
14 ! // later on we need to know if certain code is called from
1 ! // the main thread
! mainThread = Thread.currentThread();
! settingsDirectory = quot;.jeditquot;;
! ...
wenn wir wissen,
wenn wir Fehlschläge haben
welche die richtige ist
(und sie uns leisten können)
30. Womit können wir
Fehlschläge vorhersagen?
Früheres Fehlschlagen Komplexitäts-Metriken
public static void main(String[] args)
{
7 2 ! //{{{ Check for Java 1.4 or later
12 1 ! String javaVersion = System.getProperty(quot;java.versionquot;);
Method Lines of Code ! ! ! 301
! if(javaVersion.compareTo(quot;1.4quot;) < 0)
!{
! ! System.err.println(quot;You are running Java version quot;
6 ! ! ! + javaVersion Block Depth
Nested + quot;.quot;); !! ! ! 5
8
15 1
2 ! ! System.err.println(quot;jEdit requires Java 1.4 or later.quot;);
! ! System.exit(1);
McCabe Cylcomatic Complexity!! 62
! } //}}}
14 ! // later on we need to know if certain code is called from
1 ! // the main thread
Number of parameters ! ! ! ! 1
! mainThread = Thread.currentThread();
! settingsDirectory = quot;.jeditquot;;
! ...
wenn wir wissen,
wenn wir Fehlschläge haben
welche die richtige ist
(und sie uns leisten können)
40. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
41. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
B fast alle
42. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
43. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
D nur #Lines
44. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
D nur #Lines
E #Functions, #Arcs, McCabe
45. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
JA
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
D nur #Lines
E #Functions, #Arcs, McCabe
47. Gibt es universelle
Metriken?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
D nur #Lines
E #Functions, #Arcs, McCabe
48. Gibt es universelle
Metriken?
Projekt Korrelierte Metriken
NEIN
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
D nur #Lines
E #Functions, #Arcs, McCabe
50. Können wir Fehlerorte
vorhersagen?
• Grundidee: Metriken kombinieren und
Regressions-Modelle ableiten
51. Können wir Fehlerorte
vorhersagen?
• Grundidee: Metriken kombinieren und
Regressions-Modelle ableiten
• In diese können wir Metriken stecken, um die
Fehlerwahrscheinlichkeit vorherzusagen
52. Können wir Fehlerorte
vorhersagen?
• Grundidee: Metriken kombinieren und
Regressions-Modelle ableiten
• In diese können wir Metriken stecken, um die
Fehlerwahrscheinlichkeit vorherzusagen
• Module können anhand der
Fehlerwahrscheinlichkeit sortiert werden
53. Können wir Fehlerorte
vorhersagen?
Projekt #Komponenten R 2-Wert
A 9 0.741
B 6 0.779
C 7 0.579
D 7 0.684
E 5 0.919
54. Können wir Fehlerorte
vorhersagen?
Projekt #Komponenten R 2-Wert
JA
A 9 0.741
B 6 0.779
C 7 0.579
D 7 0.684
E 5 0.919
60. Imports in Eclipse
71% aller Komponenten, die compiler importieren,
müssen korrigiert werden
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)
61. Imports in Eclipse
71% aller Komponenten, die compiler importieren,
müssen korrigiert werden
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
Schröter/Zimmermannl/Zeller (Tech. Report)
62. Imports in Eclipse
Korrelation mit Fehlschlagen
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.*;
Korrelation mit Erfolg
63. Imports in Eclipse
Korrelation mit Fehlschlagen
Compiler-Code • Interna • Core-Funktionalität
GUI-Code • Standard-Java-Klassen • Hilfstexte
Korrelation mit Erfolg
64. Imports in Eclipse
Korrelation mit Fehlschlagen
Compiler-Code • Interna • Core-Funktionalität
Welche sollte man
am meisten testen?
GUI-Code • Standard-Java-Klassen • Hilfstexte
Korrelation mit Erfolg
68. 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)
69. 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
79. Fazit
Software-Archive erzählen viel über ein Projekt
Wertvolle Daten für neue Anwendungen:
Vorhersage verwandter Änderungen
Vorhersage fehlerträchtiger Module
80. 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