Suchen

Abschlussarbeiten

Bachelor- / Masterarbeiten für Studierende aus allen MINT-Studiengängen

Bachelor- oder Masterarbeit: Messung und Darstellung der Kohäsion von Klassen in CODESYS

Problembeschreibung

Kohäsion beschreibt in der Informatik den inhaltlichen Zusammenhang einer Klasse. Idealerweise sollte sich eine Klasse um genau eine Aufgabe kümmern.

Konkret messen kann man die Kohäsion einer Klasse als das Verhältnis zwischen den Daten und den Methoden einer Klasse. Beispielsweise kann man die Methoden einer Klasse nach ihrer Datennutzung ordnen: Zwei Methoden gehören zusammen, wenn sie die gleichen Daten nutzen.

Die Kohäsion einer Klasse kann man dann folgendermaßen in einer Zahl ausdrücken:

1 - (Anzahl der Methoden, die unterschiedliche Daten nutzen / Anzahl der Methoden der Klasse)

Maximale Kohäsion wäre damit 1 (alle Funktionen greifen auf die gleichen Daten zu) und minimale Kohäsion 0 (alle Funktionen greifen auf unterschiedliche Daten zu).

Eine Klasse mit niedriger Kohäsion sollte refaktoriert werden - typischerweise, indem man die Klasse in kleinere Klassen zerlegt.

Zwar ist es einfach, die Kohäsion zu berechnen, die berechnete Zahl ist aber für sich genommen wenig hilfreich, um dem Benutzer eine Hilfestellung zur Refaktorierung einer Klasse zu geben.

Ziel der Arbeit

Das Tool CODESYS Static Analysis soll um eine Funktion erweitert werden, um die Kohäsion von Klassen zu messen. Der Anwender kann dabei eine minimale Kohäsion festlegen. Klassen, die unter diesem Schwellenwert liegen, werden dann als fehlerhaft gemeldet. Zusätzlich soll eine Visualisierung entwickelt werden, um den inhaltlichen Zusammenhang zwischen den Methoden und den Daten einer Klasse darzustellen.

Die Arbeit kann als Bachelor- oder Masterarbeit durchgeführt werden. Bei einer Masterarbeit sollte zusätzlich eine Funktionalität entwickelt werden, um Teile einer Klasse automatisch in eine andere Klasse zu refaktorieren. Diese Funktionalität kann auch auf sinnvolle Spezialfälle eingeschränkt werden, die im Rahmen der Masterarbeit zu bestimmen sind.

Dauer: je nach Studienordnung
Vergütung: ja
Wochenarbeitszeit: 40h
Bewerbungszeichen: MDKK-Student


Info und Bewerbung:
CODESYS Group
Personalabteilung, Frau Sabine Panzer
jobs@codesys.com


Bachelorarbeit / Masterarbeit Compiler-Direktive für „Likeliness“

Problembeschreibung

CODESYS ist ein hardwareunabhängiges Programmiersystem für speicherprogrammierbare Steuerungen. Die verwendeten Programmiersprachen entsprechen dem Standard IEC 61131-3. Sie werden in prozessorspezifischen Code übersetzt. Aktuell existieren für CODESYS Codegenerator-Backends für mehr als 10 Prozessoren.

Moderne Prozessoren verfügen über tiefe Pipelines, um Instruktionen weit vor ihrer eigentlichen Ausführung zu laden und zu bearbeiten. Bei bedingten Sprüngen arbeiten diese Prozessoren mit einfachen Heuristiken, nach denen entschieden wird, welcher Pfad der vermutlich abzuarbeitende ist.

Eine falsche Heuristik kann für die Performance sehr schlecht sein, weil die Pipeline dann unter Umständen vollständig geleert und komplett neu gefüllt werden muss.

Ein effizienter Compiler kann diese Eigenschaften eines Prozessors ausnutzen, um schnelleren Code zu generieren, wenn die Wahrscheinlichkeit bekannt ist, mit der eine Bedingung zutrifft. Es wäre sehr hilfreich, eine Direktive zu implementieren, die dem Programmierer erlaubt, die Wahrscheinlichkeit einer Bedingung festzulegen. Eine solche Direktive könnte zum Beispiel folgendermaßen aussehen:

IF (__UNLIKELY(x > 100000)) THEN
         LOG_Message(‘Variable too big’);
ELSIF (__LIKELY(x < 100)) THEN
          // do this
ELSE
         // do that
END_IF

Neben IF-ELSIF-Anweisungen gibt es in den grafischen Sprachen der IEC 61131-3 auch bedingte Aufrufe, bedingte Sprünge und bedingte Return-Anweisungen. Auch diese sollen mit der __LIKELY-Direktive optimiert werden können.

Ziel der Arbeit

Es soll eine wie oben beschriebene Direktive implementiert und in den CODESYS-Compiler integriert werden. Außerdem soll untersucht werden, wie sich diese Direktive auf den verschiedenen Prozessor-Architekturen (Intel Pentium, ARM, PowerPC, evtl. SH, MIPS und weitere) ausnutzen lässt und welche Performance-Gewinne dadurch zu erzielen sind.

Die Arbeit kann eventuell zu einer Masterarbeit ausgeweitet werden durch Entwicklung einer Runtime-Analyse, die die Häufigkeit misst, mit der eine Bedingung zutrifft, um in einem zweiten Compile-Durchlauf den Code mit __LIKELY / __UNLIKELY – Direktiven zu optimieren.


Dauer: bis 6 Monate
Vergütung: ja
Wochenarbeitszeit: 40h
Bewerbungszeichen: Compiler-Student

Was wir bieten

Wir bieten:

  • Anspruchsvolle Aufgaben und Projekte
  • Persönliche Einarbeitung und Betreuung
  • Kollegiale Arbeitsatmosphäre
  • Chance auf eine Übernahme in ein festes Arbeitsverhältnis nach erfolgreichem Studienabschluss

Voraussetzungen:

  • Studium eines MINT-Fachs
  • Interesse und Engagement
  • Motivation zu eigenverantwortlichem Arbeiten
  • Genaue und zuverlässige Arbeitsweise


Dauer: Dauer der Abschlussarbeit gemäß Studienordnung
Umfang: 40 Stunden/Woche
Beginn: Nach Absprache