Chair of Software Engineering (CSE)

Moderne Programme und softwarteintensive Systeme halten immer mehr einzug in die Bereich des täglichen Lebens. Sei es die Autosteuerung oder das Zugsicherungssystem, die Steuerung der Hausautomatisierung oder das Finanzprogramm. Ein Ausfall oder die Feherlfunktion solvher Programme versucht meistens hohe Kosten und kann zu Schaden an Leib und Leben führen. Daher müssen solche kritischen Systeme besonders exakt spezifiziert und die fehlerfreie Umsetzung belastbar verifiziert werden. 

In der Vorlesung Spezifikationstechnil werden grundlegende mathematische Methoden und Anwendungen zur Spezifikation von Software und softwareintensiver Systeme vorgestellt. Darüber werden moderne Verifikationsalgorithmen und Tools eingeführt, mit denen die Einhaltung der Spezifikationen auch verfiziert werden kann.

In den Übungen werden  darüber hinaus führende Werkzeuge aus dem Gebiet der formalen Verifikation vorgestellt und praktisch erprobt.

Lernziele
  • Vertrautheit mit Methoden der formalen Spezifikation
  • Befähigung zur Einschätzung, für welche Software-Artefakte der Einsatz formaler Spezifikation sinnvoll ist.
  • Kenntnisse über Potentiale und Grenzen formaler Methoden
Vorlesungsinhalte
  • Formale versus informale Spezifikation
  • Spezifikation, Validierung, Verifikation, Generierung
  • Spezifikation abstrakter Datentypen
  • Spezifikation von zeitlichen Abläufen und Prozessen, Anwendungsbeispiel: Protokollspezifikation
  • Konkrete Spezifikationssprachen und Werkzeuge
  • Motivation und Grundbegriffe
  • Spezifikation abstrakter Datentypen
  • Dynamische und temporale Logik

Today, Modern Code Review (MCR) processes are an established standard all across software development due to perceived and proven benefits regarding quality assurance and knowledge transfer. However, these benefits come at a price: software developers typically spend several hours of their working week with MCR-related activities such as reviewing, commenting, and accepting pull requests! Thankfully, code reviews both within and between large projects exhibit a degree of repetitiveness that could be exploited by contemporary deep-learning algorithms and language models with the ultimate goal of automating different aspects of MCR. Luckily, the data for this endeavor is plentifully available on GitHub, Bitbucket, and the like.

In this science project for individuals (WIP), you will experiment with and learn about bleeding-edge deep learning models for language and program understanding like GPT-2, BERT or CodeBERT that look at source code directly, or with innovative, graph-based neural networks (GNNs) that operate on high-level program representations like ASTs and CFGs.

Both English and German are possible.

Software Engineering ist definiert als die „zielorientierte Bereitstellung und systematische Verwendung von Prinzipien, Methoden und Werkzeugen für die arbeitsteilige, ingenieurmäßige Entwicklung und Anwendung von umfangreichen Softwaresystemen.“ (Balzert). Basierend auf dieser abstrakten Definition, versucht die Lehrveranstaltung den Unterschied zwischen Programmierung und Software-Engineering herauszustellen. Kerninhalt ist hierbei das grundlegende Verständnis von Analyse, Planung und Umsetzung von Problemen in einer Team-Struktur. Vermittelt werden sollen hierbei Techniken und Tools, welche die Entwicklung von großen Softwareprojekten zwangsläufig notwendig machen. Die Veranstaltung richtet sich an alle Informatik-Bachelorstudenten.

Noten und Leistungsnachweis: Zur erfolgreichen Teilnahme an der Veranstaltung ist die Teilnahme an einer Übung verpflichtend. 

Für den Abschluss mit einem unbenoteten Leistungsnachweis müssen 75% der Aufgaben, darunter mindestens fünf Praxisaufgaben, votiert werden,  und Sie müssen mindestens 1x vortragen.

Für für Zulassung zur Klausur müssen ebenfalls mindestens  75% der Aufgaben, darunter mindestens fünf Praxisaufgaben, votiert werden und Sie müssen mindestens 1x vortragen.