Analyse, Redesign und Refactoring einer Computergrafik-Anwendung

Bachelorarbeit von Jan-Hendrik Göllner

Motivation

Insbesondere im akademischen Umfeld entstandene Software startet ihren Weg ins Leben häufig mit Prototypcharakter, also ohne große Planung der Architektur und nur mit dem Ziel, die Umsetzbarkeit einer Idee zu zeigen. Im Idealfall wird der Prototyp, nachdem der Mehrwert seiner Funktionalität erwiesen ist, nochmals als von Grund auf neu gestaltete Software umgesetzt. Es kommt aber auch vor, dass die Entwicklung schlicht direkt mit dem Prototypen fortgeführt wird. Das im Fachbereich Computergrafik für die Visualisierung medizinischer Daten entwickelte Volume Studio ist so ein Programm.

Volume Studio ist eine monolithisch gewachsene Software, deren Funktionen von Studenten der Universität Paderborn im Rahmen von Studien- oder sonstigen Arbeiten erstellt werden. Das bedeutet eine gewisse Fluktuation von Entwicklern und eine eher schubweise Entwicklung. Das undurchdachte Design und die wenig vorrausschauende Planung der Software haben zu einem Programm geführt, dass nur schwer zu verstehen, zu ändern und zu erweitern ist.

Zielsetzung

Ziel der Arbeit ist es, die monolithische Struktur von Volume Studio aufzubrechen und zu modularisieren. Ein Redesign soll zu einer leichter zu wartenden und zu erweiternden Software führen, so dass gewährleistet ist, dass auch in Zukunft Erweiterungen - etwa im Rahmen von Studienarbeiten - mit minimalem Aufwand möglich sind. Desweiteren sind die schwerwiegensten Designmängel, die der Designqualität der Software schaden, zu erkennen und zu beheben. 

Realisierung

Bevor das Redesign durchgeführt werden kann, muss die Software mittels Reverse Engineering Techniken analysiert werden. Das jetzige Design muss bekannt sein, damit es in ein anderes überführt werden kann. Es ist außerdem auf Mängel hin zu untersuchen, die dem Redesignprozess hinderlich sein könnten und es sind Lösungsstrategien für die Beseitigung dieser Mängel zu entwickeln. Da eine Architektur bestehend aus funktionalen Komponenten angestrebt wird, ist auch jeweils die Funktionalität in Erfahrung zu bringen, die eine Komponente ausmacht. 

Während des Redesigns der Anwendung wird die Architektur dann derart ausgearbeitet, dass sie die Erweiterbarkeit der Software durch ein Pluginsystem ermöglicht. Das Pluginsystem ermöglicht dann, zukünftige funktionale Erweiterungen der Anwendung weitgehend unabhängig voneinander als Plugins zu entwickeln, ohne den Code der übrigen Komponenten ändern zu müssen. Dazu sind geeignete Schnittstellen zu definieren, die es Komponenten ermöglichen, miteinander zu interagieren, ohne die konkrete Implementierung ihres Gegenübers zu kennen. Dies soll sicher stellen, dass der Aufwand zur Erweiterung der Anwendung um eine Funktionalität nicht wie bisher mit der Größe der Software wächst.