Learning Code Transformations from Repositories

Language
en
Document Type
Doctoral Thesis
Issue Date
2018-11-27
Issue Year
2018
Authors
Dotzler, Georg
Editor
Publisher
FAU University Press
ISBN
978-3-96147-142-3
Abstract

Library updates, program errors, and maintenance tasks in general force developers to apply the same code change to different locations within their projects. If the locations are very different to each other, it is very time-consuming to identify all of them. Even with sufficient time, there is no guarantee that a manual search reveals all locations. If the change is critical, each missed location can lead to severe consequences. The manual application of the code change to each location can also get tedious. If the change is larger, developers have to execute several transformation steps for each code location. In the worst case, they forget a required step and thus add new errors to their projects.

To support developers in this task, this thesis presents the recommendation system ARES. It leads to more accurate recommendations compared to previous approaches. ARES achieves this by conserving variations in the training examples in more detail due to its pattern design and by an improved handling of code movements. With the tool C3, this thesis also presents an extension to ARES that allows the extraction of training examples from code repositories. In combination, both tools create a recommendation system that automatically learns code recommendation patterns from repositories.

ARES, C3, and similar tools rely on lists of edit operations to express code changes. However, creating compact (i.e., short) lists of edit operations from data in repositories is difficult. As previous approaches produce too long lists for ARES and C3, this thesis presents a novel tree differencing approach called MTDIFF. The evaluation shows that MTDIFF shortens the edit operation lists compared to other state-of-the-art approaches.

Abstract

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.

Series
FAU Studien aus der Informatik
Series Nr.
5
Notes
Parallel erschienen als Druckausgabe bei FAU University Press, ISBN: 978-3-96147-141-6
Faculties & Collections
Zugehörige ORCIDs