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 Sommersemester 2018: Mittwoch 13:15 - 14:15 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 Sommersemester 2018

LV 020511000
Vorlesung (3V): Prof. Dr. Erhard Plödereder
Zeit: Di. 14:00-15:30 (V38.01) und Mi. 11:30-13:00 (V38.01)
Termine:
10.04.2018   17.04.2018
18.04.2018   24.04.2018
25.04.2018   02.05.2018
08.05.2018   09.05.2018
15.05.2018   16.05.2018
29.05.2018   30.05.2018
05.06.2018   12.06.2018
13.06.2018   26.06.2018
27.06.2018   03.07.2018
04.07.2018   11.07.2018
17.07.2018

LV 020512000
Übung (1Ü): Felix Krause
Zeit: 
Do 14:00-15:30 (14-tg.) (0.447 u. 0.463)
Fr 09:45-11:15 (14-tg.) (0.457 u. 0.463)
Fr 14:00-15:30 (14-tg.) (0.363 u. 0.447)

Übungstermine:

Gruppe 1: 14:00 - 15:30 Uhr 0.447
03.05. 17.05. 07.06. 21.06. 05.07. 19.07.

Gruppe 2: 14:00 - 15:30 Uhr 0.447
03.05. 17.05. 14.06. 28.06. 12.07. 19.07.

Gruppe 3: 14:00 - 15:30 Uhr 0.463
03.05. 17.05. 07.06. 21.06 . 05.07. 19.07.

Gruppe 4: 14:00 - 15:30 Uhr 0.463
03.05. 17.05. 14.06. 28.06. 12.07. 19.07.

Gruppe 5: 09:45 - 11:15 Uhr 0.457
04.05. 18.05. 08.06. 22.06. 06.07. 20.07.

Gruppe 6: 09:45 - 11:15 Uhr 0.457
11.05. 01.06. 15.06. 29.06. 13.07. 20.07.

Gruppe 7: 09:45 - 11:15 Uhr 0.463
04.05. 18.05. 08.06. 22.06. 06.07. 20.07.

Gruppe 8: 09:45 - 11:15 Uhr 0.463
11.05. 01.06. 15.06. 29.06. 13.07. 20.07.

Gruppe 9: 14:00 - 15:30 Uhr 0.363
04.05. 18.05. 08.06. 22.06. 06.07. 20.07.

Gruppe 10: 14:00 - 15:30 Uhr 0.363
11.05. 01.06. 15.06. 29.06. 13.07. 20.07.

Gruppe 11: 14:00 - 15:30 Uhr 0.447
04.05. 18.05. 08.06. 22.06. 06.07. 20.07.

Gruppe 12: 14:00 - 15:30 Uhr 0.447
11.05. 01.06. 15.06. 29.06. 13.07. 20.07.

Alle Informationen über Termine und Modalitäten stehen im ILIAS.
Die Abgabe erfolgt über ILIAS.
Beachten Sie unbedingt die Abgaberichtlinien (in ILIAS).

Bitte melden Sie sich in genau einer Übungsgruppe an. Abgaben von Studenten, die zu keiner Übungsgruppe angemeldet sind, werden nicht berücksichtigt und ergeben keine Punkte für den Schein.

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. Als Zwischendarstellung innerhalb der Werkzeugkette dient derzeit IML. Um leichter Änderungen an der IMLSpezifikation durchführen zu können, wurde IML durch SKilL ersetzt. SKilL bietet neben umfangreichen Kompatibilitätseigenschaften auch weitreichende Sprach- und Plattformunabhängigkeit und ermöglicht dadurch eine einfachere Erweiterung von Bauhaus. Ferner erlaubt es SKilL, für jeden Typ der Zwischendarstellung dessen Instanzen mittels Pooltraversierung effizient zu besuchen.

Aufgabenstellung
Es soll untersucht werden, wie sich verschiedene Arten der Nutzung einer Zwischendarstellung
auf die Performance der in Bauhaus implementierten Zeigeranalyse auswirken. Hierfür
müssen folgende Aufgaben erledigt werden:

  • Es müssen auf Basis der bestehenden IML-basierten Bauhaus-Implementierung des Werkzeugs
    von Bauhaus losgelöste SKilL-basierte Implementierungen geschaffen werden.
    Dabei muss mindestens eine auf StoragePool-Traversierung basierte Implementierung
    für Ada und C++ entstehen. Ebenso soll eine auf StoragePool-Traversierung
    basierte Implementierung für eine geeignet reduzierte Spezifikation erzeugt werden.
    Ferner muss eine auf Graphtraversierung basierende Implementierung in C++ entstehen.
  • Optional kann die Migration des Werkzeugs auf die SKilL-basierte Bauhausimplementierung
    abgeschlossen werden, um ein weiteres Vergleichswerkzeug zu erhalten.
  • Optional kann untersucht werden, ob sich durch die Wahl anderer Datenstrukturen performantere
    Implementierungen erzielen lassen.
  • Es muss anhand realistischer Testprogramme gezeigt werden, dass die Werkzeuge für
    gleiche Eingaben gleiche Ergebnisse produzieren.
  • Es muss anhand realistischer Testprogramme die Laufzeit der Analysen untersucht werden.
  • Die Ergebnisse müssen in einem Zwischen- und einem Abschlussvortrag präsentiert
    werden.

Die erforderlichen Codegeneratoren und Spezifikationen sowie eine Reihe von Testdaten und
Hilfswerkzeugen werden zur Verfügung gestellt.
Da die in dieser Arbeit entstehende Software im Bauhaus-System in beliebigen Kontexten
verwendet werden soll, wird eine Lizenz für die uneingeschränkte Nutzung der Software 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