Veröffentlichung

Titel:
Reparatur von Programmen mithilfe der Object Constraint Language
AutorInnen:
Bastian Ulke
Kategorie:
Dissertationen
erschienen in:
Dissertation (FernUniversität in Hagen, 2017)
Abstract:

Gängige Entwicklungsumgebungen (engl. Integrated Development Environments, IDEs) verfügen über ausgereifte Möglichkeiten, Fehler in Programmen einer Programmiersprache wie etwa Java (einer General Purpose Language, GPL) zu erkennen und zu korrigieren. Für viele Aufgaben, die unabhängig von einer spezifischen Anwendungsdomäne sind, liefern Frameworks heute jedoch standardisierte, wiederverwendbare Lösungen. Die Java Persistence API (JPA), die eine Schnittstelle zur Abbildung der Anwendungsobjekte auf Datensätze einer relationalen Datenbank definiert, ist hierfür ein typisches Beispiel. Während IDEs genaue Kenntnis der Wohlgeformtheitsregeln der GPL haben (sodass sie in einem Programm Fehler erkennen und Korrekturen vorschlagen können), sind ihnen die Regeln, an die das Programm bei Nutzung eines Frameworks gebunden ist, zumeist unbekannt. Bei der Implementierung werden Fehler daher schnell übersehen, sodass der Entwickler erst auf sie aufmerksam wird, wenn es zu einem Laufzeitfehler gekommen ist.

Gleichwohl könnte eine statische Code-Analyse viele Fehler bereits während der Entwicklungszeit aufdecken, sodass man von einer IDE erwarten darf, dass sie ebenso bei der Einhaltung der Framework-spezifischen Regeln Unterstützung bietet, wie sie es bei denen der GPL tut. Dieser Dissertation liegt die Annahme zugrunde, dass sich an der eingeschränkten Unterstützung bei der Verwendung eines Frameworks nichts ändert, solange kein Weg gefunden wird, die Verantwortlichkeiten zur Definition der Wohlgeformtheitsregeln eines Frameworks (die dem Anbieter des Frameworks zukommt) und zur Implementierung der Algorithmen zur Validierung und Korrektur (die dem Anbieter der IDE zukommt) voneinander zu trennen.

Diese Arbeit zeigt, dass Constraint-basierte Entwicklungswerkzeuge, die ein Problem der Softwareentwicklung auf den Formalismus eines Constraint Satisfaction Problems (CSP) abbilden, die Grundlage zu dieser Verteilung der Verantwortlichkeiten bilden können. Solche Werkzeuge basieren auf der deklarativen Definition einer bestimmten Programmeigenschaft (etwa der Wohlgeformtheit) sowie der Suche nach Programmtransformationen, die dieser genügen; zur Suche können hierbei Algorithmen der künstlichen Intelligenz zur Anwendung kommen.

Diese Ausarbeitung präsentiert (a) einen Satz von Wohlgeformtheitsregeln für die Java Persistence API, die als Invarianten in der Object Constraint Language (OCL) angegeben werden; (b) ein Verfahren zur Übersetzung von OCL-Ausdrücken in Constraints eines CSP; (c) einen Algorithmus zur Bestimmung und Lokalisierung von Fehlern auf der Grundlage dieser Constraints; (d) eine Methode zur Bestimmung von Korrekturvorschlägen zu einem Fehler, das Shallow Fixing, bei dem ein Fehler in Isolation betrachtet wird und hiebei – wie es auch die Quick Fixes gängiger IDEs tun – die Gefahr birgt, neue Fehler in ein Programm einzubringen, und (e) drei Ansätze, die dieses Risiko eliminieren, indem sie weitere Constraints bei der Suche nach Korrekturvorschlägen mit einbeziehen, was Deep Fixing genannt wird. Schließlich werden diese Ansätze (f) auf der Grundlage von 14 Open-Source-Projekten evaluiert. Die Ergebnisse zeigen, dass der präsentierte Regelsatz ernsthafte Implementierungsfehler aufdecken kann und die präsentierten Lösungsansätze zu ihrer Reparatur geeignet sind

Download:
Reparatur von Programmen mithilfe der Object Constraint Language
Michael Paap | 08.04.2024