Was Software-Archive erzählen

1.416 Aufrufe

Veröffentlicht am

Presented at SE 2006.

Veröffentlicht in: Technologie, Seele & Geist
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.416
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
37
Aktionen
Geteilt
0
Downloads
18
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Was Software-Archive erzählen

  1. 1. Was Software-Archive erzählen Stephan Diehl • Universität Trier Andreas Zeller • Universität des Saarlandes Tom Zimmermann • Universität des Saarlandes
  2. 2. Was Software-Archive erzählen Stephan Diehl • Universität Trier Andreas Zeller • Universität des Saarlandes Tom Zimmermann • Universität des Saarlandes
  3. 3. Was Software-Archive erzählen Stephan Diehl • Universität Trier Andreas Zeller • Universität des Saarlandes Tom Zimmermann • Universität des Saarlandes
  4. 4. Fehler
  5. 5. Fehler
  6. 6. Fehler Korrekturen
  7. 7. Fehler • Änderungen • Versionen
  8. 8. Was muss ich noch ändern? Fehler • Änderungen • Versionen
  9. 9. Was muss ich Welche Module noch ändern? muss ich testen? Fehler • Änderungen • Versionen
  10. 10. Was muss ich Welche Module noch ändern? muss ich testen? Fehler • Änderungen • Versionen
  11. 11. Entwickler, die diese Methode geändert haben, haben auch folgende Methoden geändert...
  12. 12. eROSE Zimmermann et al. (TSE 2005) funded by IBM Eclipse Innovation Grant
  13. 13. Zimmermann et al. (TSE 2005) funded by IBM Eclipse Innovation Grant
  14. 14. In 64% aller Änderungen enthalten die besten drei Vorschläge eine korrekte Stelle Zimmermann et al. (TSE 2005) funded by IBM Eclipse Innovation Grant
  15. 15. 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
  16. 16. Was muss ich Welche Module noch ändern? muss ich testen? Fehler • Änderungen • Versionen
  17. 17. Was muss ich Welche Module noch ändern? muss ich testen? Fehler • Änderungen • Versionen
  18. 18. Module
  19. 19. Module
  20. 20. Module
  21. 21. Module Welche sollte man am meisten testen?
  22. 22. Womit können wir Fehlschläge vorhersagen?
  23. 23. 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)
  24. 24. 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)
  25. 25. 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)
  26. 26. 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)
  27. 27. 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)
  28. 28. Metriken @ Microsoft Nagappan/Ball/Zeller (ICSE 2006)
  29. 29. Metriken @ Microsoft Nagappan/Ball/Zeller (ICSE 2006) Fehler 1. Fehler beim Anwender sammeln
  30. 30. Metriken @ Microsoft Nagappan/Ball/Zeller (ICSE 2006) Fehler 1. Fehler beim Anwender sammeln 2. Fehler auf Codestellen abbilden Korrekturen
  31. 31. Metriken @ Microsoft Nagappan/Ball/Zeller (ICSE 2006) Fehler 1. Fehler beim Anwender sammeln 2. Fehler auf Codestellen abbilden Korrekturen 3. Fehler mit Metriken korrelieren
  32. 32. 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
  33. 33. Projekte • Internet Explorer 6 • IIS Server • Windows Process Messaging • DirectX • NetMeeting >1.000.000 Codezeilen
  34. 34. Projekte ABCDE
  35. 35. Korrelieren Metriken mit Fehlverhalten?
  36. 36. Korrelieren Metriken mit Fehlverhalten? Projekt Korrelierte Metriken
  37. 37. Korrelieren Metriken mit Fehlverhalten? Projekt Korrelierte Metriken A #Classes und 5 abgeleitete
  38. 38. Korrelieren Metriken mit Fehlverhalten? Projekt Korrelierte Metriken A #Classes und 5 abgeleitete B fast alle
  39. 39. Korrelieren Metriken mit Fehlverhalten? Projekt Korrelierte Metriken A #Classes und 5 abgeleitete B fast alle C alle außer MaxInheritanceDepth
  40. 40. Korrelieren Metriken mit Fehlverhalten? Projekt Korrelierte Metriken A #Classes und 5 abgeleitete B fast alle C alle außer MaxInheritanceDepth D nur #Lines
  41. 41. 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
  42. 42. 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
  43. 43. Gibt es universelle Metriken?
  44. 44. 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
  45. 45. 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
  46. 46. Können wir Fehlerorte vorhersagen?
  47. 47. Können wir Fehlerorte vorhersagen? • Grundidee: Metriken kombinieren und Regressions-Modelle ableiten
  48. 48. Können wir Fehlerorte vorhersagen? • Grundidee: Metriken kombinieren und Regressions-Modelle ableiten • In diese können wir Metriken stecken, um die Fehlerwahrscheinlichkeit vorherzusagen
  49. 49. 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
  50. 50. 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
  51. 51. 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
  52. 52. HATARI Sliwerski/Zimmermann/Zeller (Demo@FSE 2005)
  53. 53. HATARI
  54. 54. HATARI
  55. 55. Imports in Eclipse Schröter/Zimmermannl/Zeller (Tech. Report)
  56. 56. 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)
  57. 57. 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)
  58. 58. 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)
  59. 59. 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
  60. 60. Imports in Eclipse Korrelation mit Fehlschlagen Compiler-Code • Interna • Core-Funktionalität GUI-Code • Standard-Java-Klassen • Hilfstexte Korrelation mit Erfolg
  61. 61. 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
  62. 62. Vorhersage fehlerträchtiger Module
  63. 63. Vorhersage fehlerträchtiger Module • Analog zu Microsoft-Ansatz, aber Imports statt Metriken
  64. 64. Vorhersage fehlerträchtiger Module • Analog zu Microsoft-Ansatz, aber Imports statt Metriken • Basis: Eclipse mit Fehlerdatenbank (Bugzilla) und Versionsdatenbank (CVS)
  65. 65. 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)
  66. 66. 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
  67. 67. Ergebnis
  68. 68. ~300 Packages Ergebnis
  69. 69. Ergebnis top 5% ~300 Packages
  70. 70. Ergebnis fehlerträchtig erfolgreich top 5% 10% ~300 Packages 90%
  71. 71. Ergebnis fehlerträchtig erfolgreich top 5% 10% Vorhersage ~300 Packages zur Entwurfszeit! 90%
  72. 72. Fazit
  73. 73. Fazit Software-Archive erzählen viel über ein Projekt
  74. 74. Fazit Software-Archive erzählen viel über ein Projekt Wertvolle Daten für neue Anwendungen:
  75. 75. Fazit Software-Archive erzählen viel über ein Projekt Wertvolle Daten für neue Anwendungen: Vorhersage verwandter Änderungen
  76. 76. Fazit Software-Archive erzählen viel über ein Projekt Wertvolle Daten für neue Anwendungen: Vorhersage verwandter Änderungen Vorhersage fehlerträchtiger Module
  77. 77. 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

×