Beschreibung
Die Aktualisierung von Bibliotheken, das Beheben von Programmfehlern und andere Wartungsarbeiten zwingen Entwickler häufig dazu, die gleiche Quelltextänderung an verschiedenen Stellen in ihren Projekten anzuwenden. Sind die Stellen einander sehr unähnlich, ist es äußerst zeitaufwändig, jede zu finden. Außerdem kann es selbst bei ausreichend Zeit passieren, dass Entwickler Stellen übersehen. Ist eine Quelltextänderung an einer Stelle jedoch zwingend erforderlich, kann dies zu schweren Konsequenzen führen. Die manuelle Durchführung von Quelltextänderungen stellt eine weitere Herausforderung dar. Wenn solche Änderungen sehr umfangreich sind, müssen Entwickler diese schrittweise an jeder Quelltextstelle durchführen. Im schlimmsten Fall vergessen sie dabei einen der Änderungsschritte und fügen ihren Projekten dadurch weitere Fehler hinzu.
Diverse beispielbasierte Empfehlungssysteme unterstützen Entwickler bei der Durchführung solcher sich wiederholenden Änderungen. Diese Programmierwerkzeuge benutzen als Eingabe eine oder mehrere Quelltextänderungen und erzeugen daraus Muster. Mittels solcher Muster suchen die Programmierwerkzeuge nach Quelltextstellen, die Ähnlichkeiten mit den Eingabebeispielen aufweisen. Wenn die Programmierwerkzeuge eine passende Stelle finden, wenden sie das Muster an und präsentieren den Entwicklern den geänderten Quelltext als Vorschlag. Die Verwendung eines Empfehlungssystems automatisiert somit die Suche und benötigt weniger Zeit als eine manuelle Durchführung. Die Programmierwerkzeuge führen auch die Quelltextänderung automatisch durch und verursachen damit weniger Fehler als bei einermanuellen Einarbeitung. Die aktuellen Programmierwerkzeuge haben jedoch zwei Probleme. Erstens generieren sie häufig Vorschläge, die syntaktisch oder semantisch falsch sind, was bedeutet, dass Entwickler diese nicht direkt in ihr Projekt einbauen können. Die deshalb nötige Anpassung der Vorschläge bedeutet zusätzliche Arbeit. Zweitens müssen Entwickler die Eingabebeispiele selbst bereit stellen. Dies ist zusätzlicher Mehraufwand für Entwickler, was den breiten Einsatz dieser Programmierwerkzeuge zu aufwändig macht. Als Lösung für das erste Problem präsentiert die vorliegende Arbeit das Empfehlungssystem ARES. Es verwendet ein neues Musterdesign, das im Vergleich zu früheren Ansätzen zu genaueren Empfehlungen führt. Sein Musterdesign erlaubt es ARES, Abweichungen in den Eingabebeispielen sowie Quelltextverschiebungen genauer auszudrücken. Die ARES-Evaluierung verwendet historische Daten aus Quelltextprojektarchiven. Dies ermöglicht es, die generierten Empfehlungen mit realen Quelltextänderungen zu vergleichen. Dabei erreicht ARES eine durchschnittliche Genauigkeit von 96%. Mit dem Programmierwerkzeug C3 präsentiert diese Arbeit auch eine Lösung für das zweite Problem. ARES benötigt als Eingabe Gruppen aus zwei oder mehr einander ähnlichen Quelltextänderungen. C3 extrahiert solche Gruppen aus Quelltextprojektarchiven. Um die Gruppen zu identifizieren, verwendet C3 zwei unterschiedliche syntaktische Ähnlichkeitsmaße und zwei unterschiedliche Clustering-Verfahren, die speziell auf Quelltextänderungen angepasst wurden.
ARES, C3 und ähnliche Programmierwerkzeuge basieren darauf, dass Quelltextänderungen als Listen von Änderungsoperationen dargestellt werden. Die Erstellung von kompakten (genauer: kurzen) Listen von Änderungsoperationen aus Projektarchivdaten benötigt komplexe Lösungen. Da die bisher veröffentlichten Ansätze für ARES und C3 unzureichend waren, präsentiert diese Arbeit außerdem MTDIFF, einen neuen Ansatz zur Ermittlung von Unterschieden in Bäumen. MTDIFF beinhaltet sechs allgemeine Optimierungsschritte, die auch für andere baumbasierte Verfahren zur Ermittlung von Unterschieden geeignet sind. Die Evaluierung in dieser Arbeit zeigt, dass diese Optimierungen die Änderungsoperationslisten anderer Ansätze verkürzen. Im Vergleich zu anderen optimierten Verfahren erzeugt MTDIFF nochmals kürzere Listen.
Bewertungen
Es gibt noch keine Bewertungen.