SlideShare una empresa de Scribd logo
1 de 80
Descargar para leer sin conexión
Was Software-Archive
      erzählen


        Stephan Diehl • Universität Trier
        Andreas Zeller • Universität des Saarlandes
        Tom Zimmermann • Universität des Saarlandes
Was Software-Archive
      erzählen


        Stephan Diehl • Universität Trier
        Andreas Zeller • Universität des Saarlandes
        Tom Zimmermann • Universität des Saarlandes
Was Software-Archive
      erzählen


        Stephan Diehl • Universität Trier
        Andreas Zeller • Universität des Saarlandes
        Tom Zimmermann • Universität des Saarlandes
Fehler
Fehler
Fehler   Korrekturen
Fehler • Änderungen • Versionen
Was muss ich
noch ändern?




        Fehler • Änderungen • Versionen
Was muss ich                   Welche Module
noch ändern?                   muss ich testen?




        Fehler • Änderungen • Versionen
Was muss ich                   Welche Module
noch ändern?                   muss ich testen?




        Fehler • Änderungen • Versionen
Entwickler, die diese Methode geändert haben,
haben auch folgende Methoden geändert...
eROSE
Zimmermann et al. (TSE 2005)     funded by IBM Eclipse Innovation Grant
Zimmermann 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)          funded by IBM Eclipse Innovation Grant
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
Was muss ich                   Welche Module
noch ändern?                   muss ich testen?




        Fehler • Änderungen • Versionen
Was muss ich                   Welche Module
noch ändern?                   muss ich testen?




        Fehler • Änderungen • Versionen
Module
Module
Module
Module


Welche sollte man
am meisten testen?
Womit können wir
Fehlschläge vorhersagen?
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)
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)
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)
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)
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)
Metriken @ Microsoft
Nagappan/Ball/Zeller (ICSE 2006)
Metriken @ Microsoft
  Nagappan/Ball/Zeller (ICSE 2006)




                                     Fehler
1. Fehler beim Anwender sammeln
Metriken @ Microsoft
  Nagappan/Ball/Zeller (ICSE 2006)




                                       Fehler
1. Fehler beim Anwender sammeln
2. Fehler auf Codestellen abbilden
                                     Korrekturen
Metriken @ Microsoft
  Nagappan/Ball/Zeller (ICSE 2006)




                                       Fehler
1. Fehler beim Anwender sammeln
2. Fehler auf Codestellen abbilden
                                     Korrekturen
3. Fehler mit Metriken korrelieren
Metriken @ Microsoft
  Nagappan/Ball/Zeller (ICSE 2006)




                                          Fehler
1. Fehler beim Anwender sammeln
2. Fehler auf Codestellen abbilden
                                       Korrekturen
3. Fehler mit Metriken korrelieren
4. Aus Metriken Fehlerträchtigkeit vorhersagen
Projekte

• Internet Explorer 6
• IIS Server
• Windows Process Messaging
• DirectX
• NetMeeting
          >1.000.000 Codezeilen
Projekte


ABCDE
Korrelieren Metriken
 mit Fehlverhalten?
Korrelieren Metriken
   mit Fehlverhalten?
Projekt   Korrelierte Metriken
Korrelieren Metriken
   mit Fehlverhalten?
Projekt      Korrelierte Metriken
  A     #Classes und 5 abgeleitete
Korrelieren Metriken
   mit Fehlverhalten?
Projekt       Korrelierte Metriken
  A     #Classes und 5 abgeleitete
  B     fast alle
Korrelieren Metriken
   mit Fehlverhalten?
Projekt       Korrelierte Metriken
  A     #Classes und 5 abgeleitete
  B     fast alle
  C     alle außer MaxInheritanceDepth
Korrelieren Metriken
   mit Fehlverhalten?
Projekt         Korrelierte Metriken
  A       #Classes und 5 abgeleitete
  B       fast alle
  C       alle außer MaxInheritanceDepth
  D       nur #Lines
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
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
Gibt es universelle
    Metriken?
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
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
Können wir Fehlerorte
    vorhersagen?
Können wir Fehlerorte
    vorhersagen?
• Grundidee: Metriken kombinieren und
  Regressions-Modelle ableiten
Können wir Fehlerorte
    vorhersagen?
• Grundidee: Metriken kombinieren und
  Regressions-Modelle ableiten
• In diese können wir Metriken stecken, um die
  Fehlerwahrscheinlichkeit vorherzusagen
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
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
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
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
                                   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)
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)
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
Imports in Eclipse
        Korrelation mit Fehlschlagen

Compiler-Code • Interna • Core-Funktionalität



GUI-Code • Standard-Java-Klassen • Hilfstexte

            Korrelation mit Erfolg
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
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
~300 Packages   Ergebnis
Ergebnis

                top 5%
~300 Packages
Ergebnis
                         fehlerträchtig     erfolgreich

                top 5%

                                      10%
~300 Packages




                               90%
Ergebnis
                         fehlerträchtig     erfolgreich

                top 5%

                                      10%
                    Vorhersage
~300 Packages




                 zur Entwurfszeit!
                               90%
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

Más contenido relacionado

Más de Thomas Zimmermann

Characterizing and Predicting Which Bugs Get Reopened
Characterizing and Predicting Which Bugs Get ReopenedCharacterizing and Predicting Which Bugs Get Reopened
Characterizing and Predicting Which Bugs Get ReopenedThomas Zimmermann
 
Data driven games user research
Data driven games user researchData driven games user research
Data driven games user researchThomas Zimmermann
 
Not my bug! Reasons for software bug report reassignments
Not my bug! Reasons for software bug report reassignmentsNot my bug! Reasons for software bug report reassignments
Not my bug! Reasons for software bug report reassignmentsThomas Zimmermann
 
Empirical Software Engineering at Microsoft Research
Empirical Software Engineering at Microsoft ResearchEmpirical Software Engineering at Microsoft Research
Empirical Software Engineering at Microsoft ResearchThomas Zimmermann
 
Security trend analysis with CVE topic models
Security trend analysis with CVE topic modelsSecurity trend analysis with CVE topic models
Security trend analysis with CVE topic modelsThomas Zimmermann
 
Analytics for software development
Analytics for software developmentAnalytics for software development
Analytics for software developmentThomas Zimmermann
 
Characterizing and predicting which bugs get fixed
Characterizing and predicting which bugs get fixedCharacterizing and predicting which bugs get fixed
Characterizing and predicting which bugs get fixedThomas Zimmermann
 
Changes and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development ActivitiesChanges and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development ActivitiesThomas Zimmermann
 
Cross-project defect prediction
Cross-project defect predictionCross-project defect prediction
Cross-project defect predictionThomas Zimmermann
 
Changes and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development ActivitiesChanges and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development ActivitiesThomas Zimmermann
 
Predicting Defects using Network Analysis on Dependency Graphs
Predicting Defects using Network Analysis on Dependency GraphsPredicting Defects using Network Analysis on Dependency Graphs
Predicting Defects using Network Analysis on Dependency GraphsThomas Zimmermann
 
Quality of Bug Reports in Open Source
Quality of Bug Reports in Open SourceQuality of Bug Reports in Open Source
Quality of Bug Reports in Open SourceThomas Zimmermann
 
Predicting Subsystem Defects using Dependency Graph Complexities
Predicting Subsystem Defects using Dependency Graph Complexities Predicting Subsystem Defects using Dependency Graph Complexities
Predicting Subsystem Defects using Dependency Graph Complexities Thomas Zimmermann
 
Got Myth? Myths in Software Engineering
Got Myth? Myths in Software EngineeringGot Myth? Myths in Software Engineering
Got Myth? Myths in Software EngineeringThomas Zimmermann
 
Mining Workspace Updates in CVS
Mining Workspace Updates in CVSMining Workspace Updates in CVS
Mining Workspace Updates in CVSThomas Zimmermann
 
Mining Software Archives to Support Software Development
Mining Software Archives to Support Software DevelopmentMining Software Archives to Support Software Development
Mining Software Archives to Support Software DevelopmentThomas Zimmermann
 
esolang: Esoterische Programmiersprachen
esolang: Esoterische Programmiersprachenesolang: Esoterische Programmiersprachen
esolang: Esoterische ProgrammiersprachenThomas Zimmermann
 

Más de Thomas Zimmermann (20)

Characterizing and Predicting Which Bugs Get Reopened
Characterizing and Predicting Which Bugs Get ReopenedCharacterizing and Predicting Which Bugs Get Reopened
Characterizing and Predicting Which Bugs Get Reopened
 
Klingon Countdown Timer
Klingon Countdown TimerKlingon Countdown Timer
Klingon Countdown Timer
 
Data driven games user research
Data driven games user researchData driven games user research
Data driven games user research
 
Not my bug! Reasons for software bug report reassignments
Not my bug! Reasons for software bug report reassignmentsNot my bug! Reasons for software bug report reassignments
Not my bug! Reasons for software bug report reassignments
 
Empirical Software Engineering at Microsoft Research
Empirical Software Engineering at Microsoft ResearchEmpirical Software Engineering at Microsoft Research
Empirical Software Engineering at Microsoft Research
 
Security trend analysis with CVE topic models
Security trend analysis with CVE topic modelsSecurity trend analysis with CVE topic models
Security trend analysis with CVE topic models
 
Analytics for software development
Analytics for software developmentAnalytics for software development
Analytics for software development
 
Characterizing and predicting which bugs get fixed
Characterizing and predicting which bugs get fixedCharacterizing and predicting which bugs get fixed
Characterizing and predicting which bugs get fixed
 
Changes and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development ActivitiesChanges and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development Activities
 
Cross-project defect prediction
Cross-project defect predictionCross-project defect prediction
Cross-project defect prediction
 
Changes and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development ActivitiesChanges and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development Activities
 
Predicting Defects using Network Analysis on Dependency Graphs
Predicting Defects using Network Analysis on Dependency GraphsPredicting Defects using Network Analysis on Dependency Graphs
Predicting Defects using Network Analysis on Dependency Graphs
 
Quality of Bug Reports in Open Source
Quality of Bug Reports in Open SourceQuality of Bug Reports in Open Source
Quality of Bug Reports in Open Source
 
Meet Tom and his Fish
Meet Tom and his FishMeet Tom and his Fish
Meet Tom and his Fish
 
Predicting Subsystem Defects using Dependency Graph Complexities
Predicting Subsystem Defects using Dependency Graph Complexities Predicting Subsystem Defects using Dependency Graph Complexities
Predicting Subsystem Defects using Dependency Graph Complexities
 
Got Myth? Myths in Software Engineering
Got Myth? Myths in Software EngineeringGot Myth? Myths in Software Engineering
Got Myth? Myths in Software Engineering
 
Mining Workspace Updates in CVS
Mining Workspace Updates in CVSMining Workspace Updates in CVS
Mining Workspace Updates in CVS
 
Mining Software Archives to Support Software Development
Mining Software Archives to Support Software DevelopmentMining Software Archives to Support Software Development
Mining Software Archives to Support Software Development
 
Unit testing with JUnit
Unit testing with JUnitUnit testing with JUnit
Unit testing with JUnit
 
esolang: Esoterische Programmiersprachen
esolang: Esoterische Programmiersprachenesolang: Esoterische Programmiersprachen
esolang: Esoterische Programmiersprachen
 

Was Software-Archive erzählen

  • 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
  • 4.
  • 7. Fehler Korrekturen
  • 8. Fehler • Änderungen • Versionen
  • 9. Was muss ich noch ändern? Fehler • Änderungen • Versionen
  • 10. Was muss ich Welche Module noch ändern? muss ich testen? Fehler • Änderungen • Versionen
  • 11. Was muss ich Welche Module noch ändern? muss ich testen? Fehler • Änderungen • Versionen
  • 12.
  • 13.
  • 14. Entwickler, die diese Methode geändert haben, haben auch folgende Methoden geändert...
  • 15. eROSE Zimmermann et al. (TSE 2005) funded by IBM Eclipse Innovation Grant
  • 16. Zimmermann et al. (TSE 2005) funded by IBM Eclipse Innovation Grant
  • 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
  • 24. Module Welche sollte man am meisten testen?
  • 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)
  • 32. Metriken @ Microsoft Nagappan/Ball/Zeller (ICSE 2006) Fehler 1. Fehler beim Anwender sammeln
  • 33. Metriken @ Microsoft Nagappan/Ball/Zeller (ICSE 2006) Fehler 1. Fehler beim Anwender sammeln 2. Fehler auf Codestellen abbilden Korrekturen
  • 34. Metriken @ Microsoft Nagappan/Ball/Zeller (ICSE 2006) Fehler 1. Fehler beim Anwender sammeln 2. Fehler auf Codestellen abbilden Korrekturen 3. Fehler mit Metriken korrelieren
  • 35. Metriken @ Microsoft Nagappan/Ball/Zeller (ICSE 2006) Fehler 1. Fehler beim Anwender sammeln 2. Fehler auf Codestellen abbilden Korrekturen 3. Fehler mit Metriken korrelieren 4. Aus Metriken Fehlerträchtigkeit vorhersagen
  • 36. Projekte • Internet Explorer 6 • IIS Server • Windows Process Messaging • DirectX • NetMeeting >1.000.000 Codezeilen
  • 38. Korrelieren Metriken mit Fehlverhalten?
  • 39. Korrelieren Metriken mit Fehlverhalten? Projekt Korrelierte Metriken
  • 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
  • 49. Können wir Fehlerorte vorhersagen?
  • 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
  • 59. 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)
  • 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
  • 66. Vorhersage fehlerträchtiger Module • Analog zu Microsoft-Ansatz, aber Imports statt Metriken
  • 67. Vorhersage fehlerträchtiger Module • Analog zu Microsoft-Ansatz, aber Imports statt Metriken • Basis: Eclipse mit Fehlerdatenbank (Bugzilla) und Versionsdatenbank (CVS)
  • 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
  • 71. ~300 Packages Ergebnis
  • 72. Ergebnis top 5% ~300 Packages
  • 73. Ergebnis fehlerträchtig erfolgreich top 5% 10% ~300 Packages 90%
  • 74. Ergebnis fehlerträchtig erfolgreich top 5% 10% Vorhersage ~300 Packages zur Entwurfszeit! 90%
  • 75. Fazit
  • 77. Fazit Software-Archive erzählen viel über ein Projekt Wertvolle Daten für neue Anwendungen:
  • 78. Fazit Software-Archive erzählen viel über ein Projekt Wertvolle Daten für neue Anwendungen: Vorhersage verwandter Änderungen
  • 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