Moderne Java-Anwendungen besitzen meist nicht nur einen (Haupt-)einstiegspunkt, sondern eine Reihe von Callback-Methoden, die bei Ausführung von einem Framework ausgeführt werden. Beispiele hierfür sind Swing-Anwendungen, Servlets oder auch Android Apps.
Eine statische Programmanalyse, die möglichst viele der möglichen Ausführungen des zu analysierenden Programms in Betracht ziehen soll, erfordert für Framework-basierte Anwendungen ein Modell, das spezifiziert, wie die Callbacks benutzte werden.
In dieser Arbeit soll eine Sprache entwickelt werden, mit deren Hilfe solche Modelle spezifiziert werden können. Idealerweise erlaubt es diese Sprache, allgemeine, framework-spezifische oder auch vom gegebenen Programm abhängige Modelle zu spezifizieren, welche insbesondere folgende Fragen beantworten:
- Welche Callbacks werden ausgeführt?
- In welcher Reihenfolge werden die Callbacks ausgeführt?
- Welche Beziehungen gelten zwischen den Parametern der jeweils aufgerufenen Methoden?
Insbesondere soll es in der zu entwickelnden Sprache möglich sein, Objekte, auf denen die Callbacks aufgerufen werden, zu instanziieren oder auf Objekte in zu analysierenden Anwendungen zu verweisen (zum Beispiel: "Rufe für jedes im Programm erzeugte Objekt vom Typ ActionListener die Methode actionPerformed mit einem künstlich erzeugten Objekt o vom Typ ActionEvent auf, dessen source gerade o ist").
Außerdem sollen ein oder mehrere Backends für die Sprache entwickelt werden (beispielsweise für Java- bzw. Dalvik-Bytecode oder auch die interne Representation von WALA, einem Open-Source-Programmanalyse-Framework von IBM) mit deren Hilfe sich Code erzeugen lässt, der das beschriebene Modell umsetzt. Auch sollen einige beispielhafte Modelle in der Sprache spezifiziert und anhand von Beispielprogrammen evaluiert werden, wie vollständig die entstandenen Modelle sind.
Schlüsselworte
Programmanalyse, Lebenszyklen, Programmsynthese
Veröffentlichungen
Betreuer
Studenten