Theses

Refactoring to Dependency Injection

Masterarbeit in der Abteilung Softwaretechnik



Motivation

Isolierbare Softwarekomponenten sind insbesondere für eine bessere Testbarkeit eines Softwaresystems wünschenswert. Nur so ist z.B. der Einsatz von Unit-Tests möglich, die einzelne Klassen auf vorher festgelegte Spezifikationen testen. Zur Realisierung solcher voneinander isolierbaren Komponenten hat sich Dependency Injection (DI) als mögliches Pattern etabliert. Hierbei werden benötigte Abhängigkeiten zu anderen Komponenten des Systems nicht innerhalb der Komponenten selbst erzeugt, sondern von außen übergeben. Dies erlaubt etwa den Austausch dieser Abhängigkeiten in Tests. Es ist somit wünschenswert, auch für bereits existierenden Code den Einsatz von DI zu ermöglichen.


Aufgabenstellung

Diese Arbeit bildet eine Wissensgrundlage, anhand derer Entwickler diese notwendigen Änderungen vornehmen können. Hierfür werden Code Smells für die Programmiersprache Java (Version 8) identifiziert, die nicht dem Prinzip der DI entsprechen. Für diese werden Refactorings angegeben, mit denen Entwickler sie durch DI-freundliche Alternativen ersetzen können. Mittels einer Implementierung in Form eines Plugins wird darüber hinaus eine Möglichkeit betrachtet, die Entwickler bei diesem Vorgehen zu unterstützen. In der Evaluation wird schließlich untersucht, ob es Entwicklern mit den Ergebnissen der Arbeit möglich ist, Code Smells in einer existierenden Codebasis selbsttätig zu identifizieren und aufzulösen.


Betreuer
Prof. Dr. Andreas Winter ()
M.Sc. Johannes Meier ()

Related Projects
Metamodeling and Model Based Engineering
Modeling and Metamodeling allow the graph-based creation, analysis, and storage of information. Model Based Engineering summerizes these and further techniques which use models as first-order objects. This research area targets approaches, techniques, and tools to create, improve, analyze, and store models conform to metamodels among the whole software life cycle.
 
Software Quality and Testing
The Quality is an important aspect of software and has high impact on the evolution of software and the possibilities of their modernization. Testing is an important technique to improve the quality of software. This research area targets approaches, techniques, and tools to detect, measure, and improve the quality of software among the whole software life cycle.
 


(Changed: 2021-04-30)