PS

Lehre

Informationen zu Lehrveranstaltungen der Abteilung Programmiersprachen und Übersetzerbau sowie über von uns angebotene Themen für studentische Arbeiten

Prof. Plödereder
Sprechstunde im Wintersemester 2018/2019: Donnerstag 13:30 - 14:30 Uhr

Themen für studentische Arbeiten: Bitte Beachten Sie auch die Aushänge am schwarzen Brett der Abteilung Programmiersprachen (neben Raum 1.217) oder fragen Sie unsere wissenschaftlichen Mitarbeiter.

Lehrveranstaltungen im Wintersemester 2018/2019

LV 020551000
Vorlesung (3V): Prof. Dr. Erhard Plödereder
Zeit: Do. 15:45-17:15 (V38.03) und Fr. 14:00-15:30 (V38.03)
Termine:
18.10.2018
25.10.2018  26.10.2018
02.11.2018 
15.11.2018
22.11.2018  23.11.2018
29.11.2018  30.11.2018
06.12.2018  07.12.2018
13.12.2018  14.12.2018
20.12.2018  21.12.2018
10.01.2019  11.01.2019
17.01.2019  18.01.2019
24.01.2019  25.01.2019
31.01.2019  01.02.2019

LV 020552000
Übung (1Ü): Felix Krause
Zeit:
Mi 14:00-15:30 (14-tg.) (0.124)

Übungstermine:
Die Übungen werden nach Absprache stattfinden.
Informationen hierzu erhalten Sie in der ersten Vorlesung.

Alle Informationen über Termine und Modalitäten stehen im ILIAS.
Der Beitritt ist nur über C@mpus möglich.

Themen für studentische Arbeiten

+-

Hintergrund
Im Rahmen der Softwareanalyse fallen große Datenmengen an, die zwischen verschiedenen Analysephasen serialisiert werden müssen. Um in verschiedenen Analysephasen bereits vorhandene Bibliotheken nutzen zu können, ist es manchmal erforderlich, einzelne Phasen in unterschiedlichen Programmiersprachen zu implementieren. So kann es z. B. vorkommen, dass das Front-End in C++ implementiert ist, eine Analyse in Ada, eine weitere in Python und die Benutzeroberfläche in Java.
Aufgabenstellung
Aufgrund mangelnden Toolsupports ist derzeit die effektivste Methode zum Erstellen werkzeugspezifischer Spezifikationen das Kopieren und Anpassen der Hauptspezifikation. Dies führt zu einem stark erhöhten Wartungsaufwand und erhöht damit die Kosten für an Analyse speziell angepasste APIs.
Um diesem Problem zu begegnen, müssen folgende Aufgaben erledigt werden:

  • Es muss in existierenden Anwendungen untersucht werden, inwieweit sich der in SKilL existierende Werkzeugbegriff und die damit verbundenen Owner- und Provider- Hints für die Lösung des Problems eignen.
  • Es muss durch eine Anpassung von SKilL-Generator und -IDE eine Werkzeugunterstützung geschaffen werden, welche es effektiv erlaubt, maßgeschneiderte APIs zu generieren, die nur die tatsächlich verwendeten Typen und Datenfelder enthalten.
  • Optional kann die SKilL-IDE in die Lage versetzt werden, eine werkzeugspezifische Sicht auf die Spezifikation zu bieten. Dabei sind insbesondere Warnungen und Fehlermeldungen der gerade betrachteten Werkzeugspezifikation entsprechend zu filtern.
  • Optional kann untersucht werden, welche Anpassungen erforderlich sind, falls verschiedene Werkzeuge zueinander inkompatible Anpassungen an der Spezifikation vornehmen.
  • Die Ergebnisse müssen in einem Zwischen- und einem Abschlussvortrag präsentiert werden.

Neben Codegenerator und IDE wird außerdem eine formale Spezifikation der Serialisierungssprache und des Serialisierungsformats sowie eine Reihe von Beispielen, Testfällen und Testdaten und Hilfswerkzeugen zur Verfügung gestellt.
Da die in dieser Arbeit entstehenden Codegeneratoren im Bauhaus-System in beliebigen Kontexten verwendet werden sollen, wird eine Lizenz für die uneingeschränkte Nutzung der Generatoren und des generierten bzw. zugebundenen Codes, wie etwa unter der M.I.T.-Lizenz, erwartet.

Betreuer: Timm Felden
Raum: 1.218
E-Mail
Prüfer: Prof. Dr. Erhard Plödereder

Hintergrund
Im Rahmen der Softwareanalyse fallen große Datenmengen an, die zwischen verschiedenen Analysephasen serialisiert werden müssen. Um in verschiedenen Analysephasen bereits vorhandene Bibliotheken nutzen zu können, ist es manchmal erforderlich, einzelne Phasen in unterschiedlichen Programmiersprachen zu implementieren. So kann es z. B. vorkommen, dass das Front-End in C++ implementiert ist, eine Analyse in Ada, eine weitere in Python und die Benutzeroberfläche in Java.
Um dieser Problematik zu begegnen, wurde die Sprache SKilL entworfen, die es erlaubt, Datenformate zu beschreiben. Diese eignen sich zur plattform- und sprachunabhängigen Serialisierung und sind, im Gegensatz zu existierenden Lösungen wie etwa XML, auf sehr große Datenmengen ausgelegt.
Aufgabenstellung
Die derzeit existierende SKilL-Anbindung für C++ verfügt über ein Reflection API. Dieses steht im Verdacht einen zu großen negativen Einfluss auf die Größe der resultierenden Executables sowie deren Laufzeit und Speichernutzung zu haben.
Um diesem Problem zu begegnen, müssen folgende Aufgaben erledigt werden:

  • Für den C++-Generator sollen diverse SKilL-Spezifikationen und Tests erzeugt oder ausgewählt werden, deren Verhalten für die Evaluation des Ressourcenbedarfs interessant ist.
  • Der Ressourcenbedarf für die erzeugten Testfälle und -werkzeuge muss untersucht werden.
  • Die Beobachtungen müssen in Designvorschläge umgesetzt werden, die zu effizienteren Bindings führen. Die Vorschläge müssen in den C++-Generator integriert werden.
  • Die Effektivität der Vorschläge muss durch Tests verifiziert und der veränderte Ressourcenverbrauch dokumentiert werden.
  • Optional kann untersucht werden, inwieweit sich eine Abkehr von einer für Menschen leicht verständlichen Implementierung des Reflection-APIs positiv auf den Ressourcenverbrauch auswirkt.
  • Die Ergebnisse müssen in einem Zwischen- und einem Abschlussvortrag präsentiert werden.

Ein Codegenerator wird zur Verfügung gestellt. Ferner gibt es eine formale Spezifikation der Serialisierungssprache und des Serialisierungsformats sowie eine Reihe von Beispielen,
Testfällen und Testdaten.
Da die in dieser Arbeit entstehenden Codegeneratoren im Bauhaus-System in beliebigen Kontexten verwendet werden sollen, wird eine Lizenz für die uneingeschränkte Nutzung der Generatoren und des generierten bzw. zugebundenen Codes, wie etwa unter der M.I.T.-Lizenz, erwartet.

Betreuer: Timm Felden
Raum: 1.218
E-Mail
Prüfer: Prof. Dr. Erhard Plödereder

Hintergrund
Bauhaus ist eine Werkzeugkette, die zahlreiche Programmanalysen von Architekturanalyse bis Zeigeranalyse bietet. Die Zeigeranalyse nach Vineet Kahlon kombiniert die Verfahren von Steensgaard und Andersen in zwei Stufen, um so die Vorteile beider Verfahren zu erhalten. Die Verfahren von Steensgaard und Andersen sind in Bauhaus bereits implementiert und gut getestet.
Aufgabenstellung
Im Rahmen dieser Arbeit soll ein Zeigeranalysewerkzeug basierend auf dem Verfahren von Kahlon implementiert werden. Als Ausgangspunkt sollen zunächst vollständig gelinkte CProgramme, die in Bauhaus-SKilL-Binärdateien vorliegen, analysiert werden:

  • Es muss ein Werzkeug für die Zeigeranalyse nach Kahlon implementiert werden. Die Analyseergbnisse müssen im Austauschformat repräsentiert werden. Es dürfen keine temporären Daten der Werkzeuge in Austauschdateien gespeichert werden.
  • Es muss ein Werkzeug geschaffen werden, das die entstehenden Zeigerzielmengen mit der existierenden Andersenanalyse vergleicht.
  • Optional kann ein Werkzeug geschaffen werden, das die entstehenden Zeigerzielmengen mit der existierenden Steensgaardanalyse vergleicht.
  • Es muss anhand realistischer Testprogramme die Laufzeit der Analysen nach Andersen und Kahlon untersucht werden.
  • Es muss anhand realistischer Testprogramme untersucht werden, ob die Zeigerzielmengen nach Kahlon eine Teilmenge der Zeigerzielmengen nach Andersen sind.
  • Optional kann untersucht werden, inwiefern sich die Partitionierung in Äquivalenzklassen für eine Parallelisierung der Analyse eignet.
  • Optional können Vorschläge gemacht werden, den Testdatensatz zu erweitern.

Die entstehenden Werkzeuge dürfen jeweils frei nach Wahl in Ada, C++, Java oder Scala geschrieben werden. Außerdem müssen die Ergebnisse in einem Zwischen- und einem Abschlussvortrag präsentiert werden. Ein Satz an unterschiedlich großen Testdaten, sowie deren bereits übersetzte und gelinkte SKilLdateien stehen zur Verfügung und soll erfolgreich analysiert werden.
Da der in dieser Arbeit entstehende Code im Bauhaus-System in beliebigen Kontexten verwendet werden sollen, wird eine Lizenz für die uneingeschränkte Nutzung des Codes, wie etwa unter der M.I.T.-Lizenz, erwartet.

Betreuer: Dr. Timm Felden
Raum: 1.218
E-Mail
Prüfer: Prof. Dr. Erhard Plödereder

Hintergrund
Im Rahmen der Softwareanalyse fallen große Datenmengen an, die zwischen verschiedenen Analysephasen serialisiert werden müssen. Um in Analysen bereits vorhandene Bibliotheken nutzen zu können, ist es manchmal erforderlich, einzelne Phasen in unterschiedlichen Programmiersprachen zu implementieren. Um dieser Problematik zu begegnen, wurde die Sprache SKilL entworfen, die es erlaubt, Datenformate zu beschreiben. Diese eignen sich zur plattform- und sprachunabhängigen Serialisierung und sind, im Gegensatz zu existierenden Lösungen wie etwa XML, auf sehr große Datenmengen ausgelegt. Die in SKilL verwendete Zustandsverwaltung setzt in erster Linie auf vollständig generierte und kontrollierte Typdefinitionen. Für die Anbindung von existierendem Code an SKilL wäre es jedoch wünschenswert, wenn man existierende Typdefinitionen direkt serialisieren könnte.
Siehe auch https://github.com/skill-lang/skill
Aufgabenstellung
Im Rahmen dieser Arbeit ist ein Werkzeug für SKilL zu entwickeln, das den Inhalt einer SKilL-Datei graphisch effizient darstellt. Dabei sind folgende Punkte zu beachten:

  • Es muss eine übersichtliche Visualisierung des serialisierten Typsystems existieren.
  • Es muss eine navigierbare Visualisierung serialisierter Objekte existieren. Dabei müssen insbesondere Referenzen auf andere Objekte übersichtlich dargestellt werden. Ferner muss es eine Erkennung und geeignete Darstellung planarer Graphen geben.
  • Es muss eine Strategie entwickelt werden, die es erlaubt, den aktuell sichtbaren Teilgraphen zu explorieren. Dabei muss es möglich sein, einen äquivalenten Teilgraphen zu untersuchen, indem man den Wurzelknoten des Teilgraphen durch einen anderen Knoten desselben Typs ersetzt. Außerdem soll beim Ein-/Ausblenden von Knoten das Layout unverändert sichtbarer Knoten zumindest strukturell gleich bleiben.
  • Es muss ein Weg geschaffen werden, dargestellte Objekte in ein geeignetes Vektorgrafikformat zu exportieren.
  • Es muss untersucht werden, wie Kantenbeschriftungen so platziert werden können, dass sie nicht mit Knoten oder Kanten überlappen und den Kanten sowie der Richtung leicht zugeordnet werden können.
  • Optional kann eine Suchfunktion implementiert werden, die Objekte mit bestimmten Feldwerten bzw. Objekte, die gegebene andere Objekte referenzieren, findet.
  • Optional kann untersucht werden, wie nebenläufige Aktionen, wie das faule Lesen von Felddaten
    oder das Berechnen eines geeigneten Layouts, sinnvoll dargestellt werden können.
  • Optional kann die Nützlichkeit verschiedener Layouts evaluiert werden.
  • Die Ergebnisse müssen in einem Zwischen- und einem Abschlussvortrag präsentiert werden. Eine SKilL Anbindung an C++ wird zur Verfügung gestellt. Ferner gibt es ein in Scala implementiertes vergleichbares Werkzeug (siehe https://github.com/skill-lang/skillView) sowie eine Reihe von Beispielen, Testfällen und Testdaten.

Da die in diesem Projekt entstehenden Implementierungen im Bauhaus-System in beliebigen
Kontexten verwendet werden sollen, wird eine Lizenz für die uneingeschränkte Nutzung der Software
(bzw. zugebundene Codes Dritter), wie etwa unter der M.I.T.-Lizenz, erwartet.

Betreuer: Timm Felden
Raum: 1.218
E-Mail
Prüfer: Prof. Dr. Erhard Plödereder

Kontakt

Dieses Bild zeigt Plödereder
Prof. Dr. rer. nat./Harvard Univ.

Erhard Plödereder

Abteilungsleiter Programmiersprachen und Übersetzerbau

Dr. rer. nat.

Timm Felden

Wissenschaftlicher Mitarbeiter

Dipl.-Inf.

Felix Krause

Wissenschaftlicher Mitarbeiter