Abschlussarbeiten/Projekte

Last changed on April 15, 2019

Die hier aufgeführten Bachelor- und Masterarbeiten können in Absprache auch in Form von Bachelor- bzw. Masterprojekten bearbeitet werden. Dabei wird ggf. der Umfang des Projektes an die Gegebenheiten des Projektes angepasst. Falls Sie sich für andere Themen aus den Bereichen moderne Methoden der Softwareentwicklung, Compilerbau, Programmiersprachen, Algorithmen oder Sicherheit interessieren, wenden Sie sich bitte einfach per Mail an mich. Unter Anforderungen bei einer Abschlussarbeit finden Sie eine Auflistung von Anforderungen bei der Durchführung einer Abschlussarbeit/eines Projektes.

Algorithmen

Gewichtete Mehrheitsspiele in funktionalen Sprachen

In dieser Arbeit soll eine Implementierung von gewichteten Mehrheitsspielen in einer funktionalen Sprache umgesetzt werden. Gewichtete Mehrheitsspiele werden genutzt, um Wahlen zu modellieren und zu analysieren. Es soll eine bestehende Implementierung in JavaScript in eine funktionale Programmiersprache überführt werden. Dabei soll insbesondere darauf geachtet werden, dass die Implementierung effizient ist — im Sinne der Komplexität der Implementierung. Die Komplexitäten der einzelnen Algorithmen sollen jeweils erarbeitet werden.

Voraussetzungen: grundlegende Kenntnisse einer funktionalen Programmiersprache, z.B. Haskell, gutes Verständnis für Komplexitäten
Geeignet als: Masterarbeit

Compilerbau

Illustration komplexer Modelle

Die Sprache GAMS wird in einigen wissenschaftlichen Bereichen genutzt, um komplexe Systems zu modellieren. In dieser Arbeit soll es darum gehen, Laien die mit GAMS erstellten Modelle zu illustrieren. Dazu sollen einfache GAMS-Programme in TypeScript übersetzt werden. Auf Grundlage der Übersetzung soll in einer weiteren Arbeit eine Web-Anwendung entwickelt werden, in der solche Modelle illustriert werden. Dazu soll dann das Model in TypeScript übersetzt und im Frontend ausgeführt werden. Die Übersetzung soll in Form eines Haskell-Programmes entwickelt werden, das ein einfaches GAMS-Programm einliest und in ein TypeScript-Programm übersetzt.

Voraussetzungen: grundlegende Kenntnisse einer funktionalen Programmiersprache, z.B. Haskell
Geeignet als: Bachelor- oder Masterarbeit

Implementierung einer Compiler-Optimierung

Die Programmiersprache Curry ist eine Erweiterung der funktionalen Konzepte der Programmiersprache Haskell um sogenannte logische Konstrukte. Der am weitesten verbreitete Compiler für diese Programmiersprache, KiCS2, übersetzt Curry-Programme in Haskell-Programme. In dieser Arbeit soll die Erzeugung des Haskell-Codes verbessert werden. Zu diesem Zweck soll eine Technik namens Fusion implementiert werden. Diese Technik wird zum Beispiel in Haskell eingesetzt, um zu verhindern, dass Datenstrukturen wiederholt auf- und wieder abgebaut werden. Die Fusion sorgt dafür, dass die Datenstrukturen nur ein einziges Mal auf- und abgebaut werden. Diese Technik soll beispielhaft bei der Übersetzung von Curry nach Haskell eingesetzt werden.

Voraussetzungen: grundlegende Kenntnisse einer funktionalen Programmiersprache, z.B. Haskell, Elm oder Coq, Interesse am Thema Compilerbau
Geeignet als: Masterarbeit

Reaktive Programmierung eines Microcontrollers

Die Programmiersprache Elm nutzt eine reaktive Architektur zur Implementierung von Frontend-Web-Anwendungen. In dieser Arbeit soll untersucht werden, wie diese Architektur genutzt werden kann, um Anwendungen für Microcontroller zu entwickeln. Der Elm-Compiler ist in Haskell geschrieben und übersetzt Elm nach JavaScript. Um eine Elm-Anwendung auf einem Microcontroller ausführen zu können, muss der Elm-Compiler so erweitert werden, dass an Stelle von JavaScript-Code C-Code erzeugt wird. Außerdem muss ein Konzept entwickelt werden, wie sich die Elm-Architektur auf die Entwicklung von Anwendungen für Microcontroller anwenden lässt. Neben der eigentlichen Übersetzung müssen unter Umständen Optimierungen für den Elm-Compiler implementiert werden. So führt der Elm-Compiler zum Beispiel keine dead code elimination durch, das heißt, Code, der nicht genutzt wird, ist trotzdem im erzeugten JavaScript enthalten. Dadurch sind die Programme, die durch den Elm-Compiler erzeugt werden, zu groß, um sie direkt auf einem Microcontroller ausführen zu können.

Voraussetzungen: grundlegende Kenntnisse einer funktionalen Programmiersprache, z.B. Haskell, Elm oder Coq, Interesse an Microcontrollern
Geeignet als: Bachelor- oder Masterarbeit

Transformation von Haskell-Programmen

Wenn ein Compiler ein Programm übersetzt, wird das textuelle Programm mit Hilfe eines Parsers in eine Datenstruktur, einen sogenannten abstrakten Syntaxbaum, überführt. In dieser Arbeit soll eine Haskell-Bibliothek entwickelt werden, die verschiedene Umformungen auf dem abstrakten Syntaxbaum für Haskell durchführt. Dabei soll zum Beispiel das Pattern-Matching in Form von Funktionsregeln in Pattern-Matching in Form von case-Ausdrücken umgeformt werden. Für die Implementierung soll eine vorhandene Haskell-Bibliothek verwendet werden, die einen abstrakten Syntaxbaum zur Darstellung von Haskell-Programmen zur Verfügung stellt.

Voraussetzungen: grundlegende Kenntnisse der Programmiersprache Haskell
Geeignet als: Bachelor- oder Masterarbeit

Verifikation

Analyse von freien Theoremen in Java

Ein freies Theorem ist eine Aussage über eine Funktion/Methode, die allein an Hand des Typs der Funktion/Methode getroffen werden kann. Eine Einführung zu freien Theoremen im Kontext von Java bietet zum Beispiel dieser Vortrag. Die Idee der freien Theoreme stammt aus dem Bereich der funktionalen Programmierung, da Seiteneffekte diese Art von Aussagen häufig zunichte machen. In dieser Arbeit soll geklärt werden, welche Sprachkonstrukte freie Theorem in der Programmiersprache Java zerstören. So kann man zum Beispiel durch Typumwandlungen die Aussagen zerstören. Daher soll in dieser Arbeit in Form einer Fallstudie untersucht werden, welche der Java-Sprachkonstrukte freie Theoreme zerstören und unter welchen zusätzlichen Randbedingungen die Aussagen wieder gelten.

Voraussetzungen: gute Kenntnisse der Programmiersprache Java, Grundverständnis für formale Aussagen
Geeignet als: Bachelor- oder Masterarbeit

Verifikation von Haskell-Programmen

Um zu garantieren, dass Programme sich mit absoluter Sicherheit wie gewünscht verhalten, werden Eigenschaften von Programmen mit Hilfe von Theorembeweisern bewiesen. In dieser Arbeit sollen Eigenschaften von Haskell-Programmen im interaktiven Theorembeweiser Coq bewiesen werden.

Voraussetzungen: grundlegende Kenntnisse in einem interaktiven Theorembeweiser, z.B. Coq
Geeignet als: Masterarbeit

Neuronale Netze im Software-Engineering

Sammeln und Aufbereiten von Code-Beispielen

In dieser Arbeit soll eine Anwendung entwickelt werden, die genutzt werden kann, um Code-Beispiele aus öffentlichen Datenquellen zu generieren. Ein Code-Beispiel besteht dabei aus einer Methode, die in zwei verschiedenen Programmiersprachen umgesetzt wurde. Die Anwendung soll große Mengen solchen Daten sammeln und aufbereiten. Dazu sollen verschiedene Ansätze evaluiert werden, um solchen Daten zu sammeln. Die Daten sollen in einem späteren Schritt genutzt werden, um ein neuronales Netz darin zu trainieren, Methoden in einer Programmiersprache in eine andere Programmiersprache zu übersetzen.

Voraussetzungen: keine
Geeignet als: Bachelorarbeit

Generieren von Namen aus Funktionsdefinitionen in Haskell

In dieser Arbeit soll eine bestehende Technik zur Generierung von Methodennamen aus der Definition der Methode aus der Publikation code2vec: Learning Distributed Representations of Code angewendet werden. Diese Technik soll auf die Programmiersprache Haskell übertragen werden. Im ersten Schrit müssen dazu Traniningsdaten gesammelt werden, am besten von Hackage einer Platform für Haskell-Pakete. Die Implementierungen von Haskell-Funktionen mit gesammelt und für das neuronale Netz aufbereitet werden. Je nachdem, ob dieses Thema als Bachelor- oder Masterarbeit durchgeführt wird, werden die Daten nur gesammelt oder auch das neuronale Netz trainiert.

Voraussetzungen: keine
Geeignet als: Bachelor- oder Masterarbeit

Anwendungen

iOS-App zur Förderung nachhaltigen Einkaufens

In dieser Arbeit soll eine mobile Anwendung für die Platform iOS entwickelt werden. Mit Hilfe der Anwendung kann der Nutzer beim Kauf von Gemüse die Kilometer, die das Gemüse zurückgelegt hat, verwalten. Auf diese Weise sollen Nutzer dazu animiert werden, beim Kauf von Gemüse auf regionale Waren zu achten. Das Interface der Anwendung muss eine sehr schnelle Eingabe der Informationen erlauben.

Voraussetzungen: gute Kenntnisse mobiler Entwicklung unter Android oder iOS
Geeignet als: Bachelorarbeit

Erweiterung einer Anwendung zur Visualisierung sozialer Interaktionen

In einer zuvor durchgeführten Bachelorarbeit wurde eine Anwendung entwickelt, um bei einer Veranstaltung wie einer Messe oder einer wissenschaftlichen Konferenz zu analysieren, welche Personen miteinander kommunizieren. Dazu wird jedem Teilnehmer ein Beacon um den Hals gehängt. Die Beacons senden schache Signale, die nur wenige Meter weit reichen und durch den Körper abgeschirmt werden. Wenn einer der anderen Beacons ein solches Signal empfängt wird diese Information an eine Basisstation weitergereicht. Die Anwendung wurde in JavaScript für den PuckJS-Beacon entwickelt. Die Basistation liefert momentan eine prototypische Visualisierung der Daten. In diesem Projekt soll die bestehende Anwendungen in verschiedenen Hinsichten erweitert werden. Dazu soll im ersten Schritt evaluiert werden, wie gut die aktuelle Implementierung bei einer kleinen Veranstaltung funktioniert. Im zweiten Schritt soll eine Visualisierung der gesammelten Daten entwickelt werden.

Voraussetzungen: Fähigkeit zur selbstständigen Einarbeitung in Technologien
Geeignet als: Bachelorarbeit