Dissertation
Constraint-basierte Refaktorisierung von Deklarationen in Java
- Verfasser/in:
- Dipl.-Inform. Andreas Thies
- Betreuer/in:
- Prof. Dr. Friedrich Steimann
- Status:
- abgeschlossen
- Jahr:
- 2014
- Web:
Abstract:
Refaktorisierungen sind Änderungen an einem Programm, ohne sein nach außen hin beobachtbares Programmverhalten zu ändern. Sie unterstützen Softwareentwickler dabei, bestehenden Programmcode zu warten und zu erweitern. Refaktorisierungswerkzeuge können bei dieser Aufgabe helfen, indem sie die für eine Refaktorisierung benötigten Quelltexttransformationen berechnen, anwenden und dabei sicherstellen, dass das Programmverhalten tatsächlich unverändert bleibt. Allerdings weist nach heutigem Stand ein Großteil der im Industrieeinsatz befindlichen Refaktorisierungswerkzeuge hohe Fehlerraten auf, was im Wesentlichen der Komplexität moderner Programmiersprachen geschuldet ist. Die Folge ist, dass teilweise die refaktorisierten Programme entweder ungültig sind oder in ihrem Programmverhalten vom jeweiligen Eingabeprogramm abweichen.
Vorliegende Arbeit verfolgt den Ansatz der constraintbasierten Refaktorisierung. Die Grundidee besteht dabei in der Überführung von Refaktorisierungsproblemen in Bedingungserfüllungsprobleme. In diesen werden mögliche Codeänderungen durch Variablen dargestellt. Die durch diese anzunehmenden Werte werden durch Bedingungen derart eingeschränkt, dass die Menge der möglichen Variablenwerte und somit Programmtransformationen ausschließlich gültigen Refaktorisierungen entspricht. In Verbindung mit einem herkömmlichen Constraintlöser kann dann zu einem derart umgeformten Refaktorisierungsproblem bestimmt werden, ob eine bedeutungserhaltende Programmtransformation möglich ist und welche Änderungen am Quelltext dazu durchgeführt werden müssen.
Anhand der Implementierung einer Suite von fünf Refaktorisierungswerkzeugen zur Refaktorisierung von Deklarationen in Java werden die Stärken des constraintbasierten Ansatzes demonstriert. Insbesondere wird gezeigt, dass sich Autoren von Refaktorisierungswerkzeugen beim verwendeten Ansatz auf die Formulierung nur gering komplexer und vor allem wiederverwendbarer Regeln beschränken können, während die eigentliche Komplexität beim Zusammenwirken aller Bedingungen an bestehende Constraintlöser delegiert wird. Evaluiert werden die implementierten Werkzeuge anhand einer Testsuite bestehend aus mehr als 1.000 handgeschriebenen Tests sowie automatisierten Testläufen, in denen auf quelloffenen, frei verfügbaren Java-Projekten mehr als 120.000 Refaktorisierungen durchgeführt wurden. Die Testergebnisse zeigen, dass die entwickelten Werkzeuge viele Fälle korrekt behandeln, in denen herkömmliche Werkzeuge aufgrund der Komplexität der Sprache Java bisher scheitern.