ddchange: fehlerverursachende Änderungen

48
DDchange: Fehlerverursachende Änderungen Martin Burger

Upload: martin-burger

Post on 24-Jun-2015

1.087 views

Category:

Technology


1 download

DESCRIPTION

Ein Programm funktioniert nach einer Reihe von Änderungen nicht mehr - womöglich wurden in einem Projektteam eine Vielzahl von Änderungen durch verschiedene Personen durchgeführt. Was ist die Ursache für diesen Fehler? Im Rahmen meiner Diplomarbeit ist ein Delta-Debugging-Framework entstanden, welches automatisch fehlerrelevante Änderungen am Programmcode bestimmt. Das Framework erlaubt die schnelle und einfache Entwicklung von Werkzeugen, die Programmierer und Projektverantwortliche bei der langwierigen und teuren Fehlersuche unterstützen.Zwei Instanzen dieses Frameworks erlauben es, diese Änderungen während Integrationstests oder lokal am Arbeitsplatz zu bestimmen. Die Fehler-Ursachen werden völlig transparent im Hintergrund ermittelt - stören somit nicht den gewohnten Prozessablauf. DDchange Maven integriert den Debugging-Prozess nahtlos in die "Continuous Integration", DDchange Eclipse erlaubt die sofortige Ursachen-Suche durch den Entwickler.Fokus des Vortrages ist ein Überblick und kurze Einführung in das Framwork sowie Demonstration von DDchange Maven und DDchange Eclipse. Abschließend werden mögliche zukünftige Arbeiten zur Verbesserung des Frameworks vorgestellt.

TRANSCRIPT

Page 1: DDchange: Fehlerverursachende Änderungen

DDchange:Fehlerverursachende

Änderungen

Martin Burger

Page 2: DDchange: Fehlerverursachende Änderungen

Diplomarbeit

• “Eine Plattform zum automatischen Bestimmen von fehlerverursachenden Änderungen”

• In Kooperation

• Lehrstuhl für Softwaretechnik (Prof. Zeller)

• WEB.DE AG, Karlsruhe

Page 3: DDchange: Fehlerverursachende Änderungen

Bisherige Arbeit

Page 4: DDchange: Fehlerverursachende Änderungen

Grundlagen

Page 5: DDchange: Fehlerverursachende Änderungen

Änderungen am Code

JUnit9:30

Kunde PremiumKunde

Page 6: DDchange: Fehlerverursachende Änderungen

Änderungen am Code

JUnit

JUnit14:00

9:30

Kunde PremiumKunde

Zeit

Schuldner

Änderung

fehlerrelevant

Page 7: DDchange: Fehlerverursachende Änderungen

Änderungen am Code

JUnit

JUnit27.10.

30.09.

Zeit??

Page 8: DDchange: Fehlerverursachende Änderungen

Wie finden wirdie alternative Welt?

Delta-Debugging auf Versionsunterschieden

Alte Version

JUnit Test funktioniertAtkuelle Version

JUnit Testfunktioniert nicht

Ursachen

“Why Programs Fail, A Guide to Systematic Debugging” von Andreas Zeller

Page 9: DDchange: Fehlerverursachende Änderungen

• Verfahre nach binärer Suche: Wende die Hälfte der Änderungen an und überprüfe, ob der Fehler noch auftritt.

• Wenn nicht, gehe einen Schritt zurück und wende die andere Hälfte der Änderungen an.

Binäre Suche

Menge der Änderungen

!"!!!"“Why Programs Fail, A Guide to Systematic Debugging” von Andreas Zeller

Page 10: DDchange: Fehlerverursachende Änderungen

Simplifying

"

!Änderungen

!!

!…

Fehler-Ursache

“Why Programs Fail, A Guide to Systematic Debugging” von Andreas Zeller

Page 11: DDchange: Fehlerverursachende Änderungen

Isolating

"

!Änderungen

!

"

!"

……Fehler Ursache

“Why Programs Fail, A Guide to Systematic Debugging” von Andreas Zeller

Page 12: DDchange: Fehlerverursachende Änderungen

DDchangeFramework

Page 13: DDchange: Fehlerverursachende Änderungen

Domain Framework

• Programmrahmen für einen bestimmten Problembereich

• Verfolgt Black-Box-Ansatz

• Wiederverwendbarkeit und Erweiterbarkeit

• Ist Open-Source, nutzt Open-Source

• Muss im Unternehmenseinsatz bestehen

Page 14: DDchange: Fehlerverursachende Änderungen

Allgemeines Vorgehen1. Historie aufbauen

Page 15: DDchange: Fehlerverursachende Änderungen

DDchange: Datenbank

• Domäne: Persistenz von Test-Ergebnissen

• Persistenz-Framework: Hibernate

• Zentrale Datenbank

• “Mitgelieferte” Datenbank HSQLDB

• Hot-Spots: Data Access Object zum Zugriff auf Historie

Page 16: DDchange: Fehlerverursachende Änderungen

Allgemeines Vorgehen1. Historie aufbauen

2. Im Fehlerfall Änderungen ermitteln

Page 17: DDchange: Fehlerverursachende Änderungen

DDchange: Di!/Patch

• Domäne: Erstellung von Diffs und Patches

• Zerlegt diff in “hunks”

• Hot-Spots: Erstellen und Anwenden der Deltas

Page 18: DDchange: Fehlerverursachende Änderungen

DDchange: Subversion

• Domäne: Working Copy und Repository

• update, revert, diff

• Kann JavaSVN oder SvnClientAdapter nutzen

• Hot-Spots: Durch Interface abstrahiert

Page 19: DDchange: Fehlerverursachende Änderungen

Allgemeines Vorgehen1. Historie aufbauen

2. Im Fehlerfall Änderungen ermitteln

3. Delta Debugging Test

1. Änderungen anwenden

Page 20: DDchange: Fehlerverursachende Änderungen

Allgemeines Vorgehen1. Historie aufbauen

2. Im Fehlerfall Änderungen ermitteln

3. Delta Debugging Test

1. Änderungen anwenden

2. Bauen

Page 21: DDchange: Fehlerverursachende Änderungen

DDchange - Debugger

• Framework enthält AntCompiler

• Übersetzen von veränderten Klassen

scrub! ! - ! Baut alle Klassen neu

depend" - " Betrachtet Abhängigkeiten " " " " " " der (geänderten) Klassen

• Hot-Spots: Interfaces für Builder

Page 22: DDchange: Fehlerverursachende Änderungen

Allgemeines Vorgehen1. Historie aufbauen

2. Im Fehlerfall Änderungen ermitteln

3. Delta Debugging Test

1. Änderungen anwenden

2. Bauen

3. Test ausführen

Page 23: DDchange: Fehlerverursachende Änderungen

DDchange: Test

• Domäne: Ausführen von Tests

• Führt JUnit-Tests in eigener VM via RMI aus

• Verteilte Tests

• Eigener Class Loader lädt veränderte Klassen neu

• Hot-Spots: Interfaces für Tester, Beschreibung und Ergebnis

Page 24: DDchange: Fehlerverursachende Änderungen

Allgemeines Vorgehen1. Historie aufbauen

2. Im Fehlerfall Änderungen ermitteln

3. Delta Debugging Test

1. Änderungen anwenden

2. Bauen

3. Test ausführen

4. Änderungen rückgängig machen

Page 25: DDchange: Fehlerverursachende Änderungen

Allgemeines Vorgehen1. Historie aufbauen

2. Im Fehlerfall Änderungen ermitteln

3. Delta Debugging Test

1. Änderungen anwenden

2. Bauen

3. Test ausführen

4. Änderungen rückgängig machen

5. Ergebnis zurück geben

Page 26: DDchange: Fehlerverursachende Änderungen

DD-Algorithmus

• Implementierung des Algorithmus von Philipp Bouillon “A Framework for Delta Debugging in Eclipse”

• Änderungen für DDchange

• Abhängigkeit von Eclipse gelöst

• Um Cache-Interface und Implementierung erweitert (Hashtable und LRU)

Page 27: DDchange: Fehlerverursachende Änderungen

Test-Abdeckung

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

Conditionals Statements Methods TOTAL

Clover-Coverage

78 %84 % 86 % 84 %

Page 28: DDchange: Fehlerverursachende Änderungen

DDchangeMaven

Page 29: DDchange: Fehlerverursachende Änderungen

Apache Maven

• Software-Werkzeug für einfach(er)en Build-Prozess und Projektmanagement

• Einheitliches Buildsystem - vom Projektbeginn bis zum Deployment

• Einfaches Erstellen der Projekt-dokumentation

• Durch Plugins erweiterbar

Page 30: DDchange: Fehlerverursachende Änderungen

Lebenszyklus

Compilieren, Testen

test

Projekt initialisieren

eclipsescm

Codemetriken für QS

checkstyleclover

Integrationstest

jbosscactus

Report-Generierung

sitechanges

Deployment

distjar

Page 31: DDchange: Fehlerverursachende Änderungen

Lebenszyklus

Compilieren, Testen

testddchange

Projekt initialisieren

eclipsescm

Codemetriken für QS

checkstyleclover

Integrationstest

jbosscactus

Report-Generierung

sitechanges

Deployment

distjar

Page 32: DDchange: Fehlerverursachende Änderungen

CruiseControl

• Framework zur kontinuierlichen Integration

• Automatisiertes und reproduziertes Bauen von Projekten

Page 33: DDchange: Fehlerverursachende Änderungen

DDchange in CruiseControl

Cruise Control Repository

Entwicklungsteam

Commit

Update

Ant /Maven

Bauen / Testen

Ergebniss

“Publisher” Email

Informieren

Nach demBauen / Testen

Page 34: DDchange: Fehlerverursachende Änderungen

DDchange in CruiseControl

Cruise Control Repository

Entwicklungsteam

Commit

UpdateErgebniss

DDchange Maven

“Publisher”

EmailInformieren

Bauen / Testen

Nach demBauen / Testen

Ant /Maven

Page 35: DDchange: Fehlerverursachende Änderungen

Erweiterungen am Framework

• Keine Erweiterungen

• “Out-of-the-Box”

• Bezieht Änderungen von Subversion

• Zentrale MySQL-Datenbank bei WEB.DE

Page 36: DDchange: Fehlerverursachende Änderungen

DDchange Maven: Nutzen

• Automatische Fehlersuche im automatischen Buildprozess

• Frühzeitiges Aufzeigen von Fehlern und deren Ursache

• Zentral und automatisch bei der ständigen Integration

• Für den Entwickler transparent

• Ergebnis (XML) kann weiter verarbeitet werden

Page 37: DDchange: Fehlerverursachende Änderungen

DDchangeEclipse

Page 38: DDchange: Fehlerverursachende Änderungen

Erweiterungen am Framework

• Local History statt Subversion

• Subversion denkbar

• Compiler von Eclipse statt AntCompiler

• Sehr schnell, inkrementell

Page 39: DDchange: Fehlerverursachende Änderungen

DDchange Eclipse: Nutzen

• Automatische Fehlersuche im Hintergrund

• Schneller als DDchange Maven

• Frühzeitiges Aufzeigen von Fehlern und deren Ursache

• Fehlerrelevante Änderungen können auf Knopf-Druck zurückgenommen werden

• Nahtlose Integration in Eclipse

Page 40: DDchange: Fehlerverursachende Änderungen

Lines of Code

0

7.000

14.000

21.000

28.000

35.000

Framework Maven Plugin Eclipse Plugin

Lines of Code

Page 41: DDchange: Fehlerverursachende Änderungen

Zusammenfassung• Framework zur automatischen Bestimmung

von fehlerrelevanten Änderungen

• Schnelle und einfache Entwicklung von Werkzeugen

• Sich ergänzende Werkzeuge vorhanden

• DDchange EclipseLocal History "- lokal am Arbeitsplatz

• DDchange MavenSubversion "" - kontinuierliche Integration

Page 42: DDchange: Fehlerverursachende Änderungen

Ausblick

Page 43: DDchange: Fehlerverursachende Änderungen

Möglichkeiten

• Änderungen in Bezug auf funktionierenden Test

• “diff” (isolation) statt “min” (simplification)

• Verteilte bzw. parallele Fehlersuche

• Ergebnis verwandter Arbeiten nutzen

Page 44: DDchange: Fehlerverursachende Änderungen

Optimierungen• Historie" Gruppierung von Änderungen anhand der " zeitlichen Abfolge

• Bauen / Compilieren" Übersetzte Klassen cachen

• Gruppieren" “Gültigkeitsbereich” beachten

• Auflösung von Fehlern" Fehlermeldungen geben Hinweis auf " Beseitigung

Page 45: DDchange: Fehlerverursachende Änderungen

Continuous Testing

Stand:"Nicht alle Tests werden ständig " " " " " ausgeführtFolge: " Fehlschlagen fällt erst später auf, mehr " " " Änderungen

• Continuous Testing führt Tests im Hintergrund aus

• Nutzen: Suchraum wird kleiner

“Continuous testing in Eclipse” von David Saff und Michael D. Ernst

Page 46: DDchange: Fehlerverursachende Änderungen

Change Impact Analysis

Stand:" Syntaktische Abhängigkeiten der " " " " " Änderungen werden ignoriertFolge:" Interferenz und Innkonsistenz

• Analyse bestimmt voneinander abhängige Änderungen anhand des AST

• Nutzen: Anzahl der “unresolved” Ergebnisse wird kleiner und somit die Anzahl der Tests

“Chianti: A tool for change impact analysis of Java programs”by Xiaoxia Ren, Fenil Shah, Frank Tip, Barbara Ryder, and Ophelia Chesley

Page 47: DDchange: Fehlerverursachende Änderungen

Change Impact Analysis

Stand:" Änderungen ohne Einfluss auf den Test " " " werden betrachtetFolge:" Unnötig große Menge der Änderungen

• Analyse bestimmt Änderungen mit Einfluss auf den Call Graph der Tests

• Nutzen: Suchraum wird kleiner

Page 48: DDchange: Fehlerverursachende Änderungen

Change Classification

Stand:" Historie der Testläufe wird nur sehr " " " " eingeschränkt betrachtetFolge:" Vorhandenes Wissen wird nicht " " " " " eingebracht

• Klassifizierung bestimmt Wahrscheinlichkeit der Fehlerrelevanz von Änderungen

• Nutzen: Suchraum wird kleiner

“Finding Failure-Inducing Changes using Change Classification”Maximilian Stoerzer, Barbara Ryder, Xiaoxia Ren, Frank Tip