Project Details
Projekt Print View

Befactoring and generically controlled changes

Subject Area Software Engineering and Programming Languages
Term from 2014 to 2018
Project identifier Deutsche Forschungsgemeinschaft (DFG) - Project number 258832016
 
Final Report Year 2018

Final Report Abstract

Programmieren wird heute von zahlreichen, in sog. integrierten Entwicklungsumgebungen angebotenen Assistenzfunktionen unterstützt. Diese Assistenzfunktionen basieren grundsätzlich auf der statischen Semantik einer Programmiersprache, wie sie auch in Compilern für die Sprache spezifiziert und umgesetzt ist. Allerdings werden solche Assistenzfunktionen heute noch individuell entworfen und implementiert. Die unmittelbare Folge ist, dass die Assistenzfunktionen sich häufig inkonsistent zu einander und zum Compiler verhalten. Zugleich bedeuten Entwicklung und Pflege (Nachführung bei Weiterentwicklung einer Programmiersprache) dieser Funktionen einen erheblichen Aufwand, so dass sie vor allem für (wenige) weit verbreitete Sprachen und ihre Entwicklungsumgebungen angeboten werden — für kleine und neue Sprachen hinkt die Unterstützung entsprechend hinterher. Nicht besser sieht es mit Assistenzfunktionen für die Verwendung von Frameworks aus — hier ist häufig nicht einmal eine statische Prüfung der korrekten Verwendung verfügbar. Ziel des Projekts war, aus einer einzigen, bestehenden Spezifikation der statischen Semantik einer Sprache eine Vielzahl möglicher, die Änderung eines Programms betreffende Assistenzfunktionen automatisch abzuleiten. Dabei sollte allen Änderungsfunktionen gemein sein, dass sie stets ein bzgl. der statischen Semantik wohlgeformtes Programm liefern. Zu diesem Zweck müssen von der Programmiererin bei Aufruf der Funktion vorgetragene, beabsichtige Änderungen um berechnete, kompensierende Änderungen ergänzt werden, die nötig sind, um die Wohlgeformtheit herzustellen. Solche aus beabsichtigten und kompensierenden Änderungen bestehenden Änderungen werden im Projekt kontrollierte Änderungen genannt; sie umfassen neben Änderungen zur Reparatur und zur Vervollständigung von Programmen auch ursprünglich sogenannte (und für das Projekt mit namensgebende) Befactorings als Umkehrung von Refactorings, also Änderungen des Verhaltens eines Programms, die andere Eigenschaften erhalten (mittlerweile in „robust edits“ umbenannt). Durch die Arbeiten zum Projekt wurde gezeigt, wie sich aus formalen Spezifikationen der statischen Semantik, wie sie in Form einer Referenzattributgrammatik oder von OCL-Ausdrücken vorliegen, kontrollierte Änderungsfunktionen ableiten lassen. Dazu wird aus der Spezifikation, dem zu ändernden Programm und den beabsichtigten Änderungen eine Menge von Constraints erzeugt, deren Variablen anfangs die Werte zugewiesen sind, die das zu ändernde Programm bzw. die beabsichtigten Änderungen repräsentieren und deren Lösung die kompensierenden Änderungen berechnet. Um die Menge der erzeugten Constraints so klein wie möglich zu halten, wird ein Verfahren der constraint-basierten Reparatur verwendet, das lokale Suchstrategien verwendet und das, durch geschickte Einbeziehung constraint-logischer Programmierung, die Constraint-Erzeugung und -Lösung so ineinander verschränkt, dass der technische Aufwand (Speicher- und Zeitbedarf) auch im praktischen Einsatz realistisch bleibt. Die gewonnenen Erkenntnisse wurden verwendet, um  auf Basis eines erweiterbaren, referenzattributgrammatikbasierten Java-Compilers (ExtendJ) ein automatisches Prüf- und Reparatursystem für große Java-Programme, die die Java Persistence API (JPA) verwenden, zu implementieren und umfassend zu evaluieren, um  für in der Object Constraint Language (OLC) vorliegende Spezifikationen der statischen Semantik unter Verwendung von partieller Evaluation praktisch die gesamte Palette bekannter Funktionen (von der Wohlgeformtheitsprüfung bis zur automatischen Generation von Programmen bzw. Modellen) abzudecken und um  für die Language Workbench MPS ein generisches Änderungswerkzeug zu entwickeln, das auf einer einzigen Spezifikation der statischen Semantik basierend den herkömmlichen Editor von MPS sowie alle seine Hilfen für die Eingabe vollständig ersetzt. Das geplante Arbeitsprogramm wurde umfassend abgearbeitet und alle Ergebnisse mit hoher internationaler Sichtbarkeit publiziert.

Publications

 
 

Additional Information

Textvergrößerung und Kontrastanpassung