Bibliographic Metadata
EnglishSoftware has to be constantly re-engineered due to changes in its environment and to fulfill new requirements. Thus its maintainability is very important. This thesis introduces an approach to support re-engineering activities in (object oriented) software systems by assessing and improving its maintainability based on software patterns. An existing approach for the automated recognition and rating of design pattern instances in source code is extended to also recognize design defects, i.e. instances of bad smells and antipatterns. In order to improve recognized design defects, this thesis develops a graphical language for the specification of program transformations. Usually, the goal of such a transformation is to improve the structure of a software, leaving its observable behavior unchanged (refactoring). In order to show that certain aspects of behavior are not changed by a transformation, this thesis develops an automatic verification of transformations to fulfill user defineable criteria. Such criteria allow to specify structural properties of a program, that have to be preserved or must not be created by a transformation. The verification tries to prove the criteria to be inductive structural invariants across different versions of arbitrary programs that may be created by the execution of complete transformations. The specification language has been especially designed to facilitate complex program transformations as well as their automatic verification. If a transformation has the potential to violate a criterion, the verification systematically computes counter examples showing problematic executions and presents them to the re-engineer to help him correct the specifications. DeutschSoftware muss durch Re-Engineering kontinuierlich an eine veränderte Umwelt und neue Anforderungen angepasst werden, so dass ihre Wartbarkeit von entscheidender Bedeutung ist. Die vorliegende Arbeit stellt einen Ansatz vor, der das Re-Engineering von (objektorientierter) Software durch eine Beurteilung und Verbesserung ihrer Wartbarkeit auf Basis von Softwaremustern unterstützt. Dazu wird ein Verfahren zur automatisierten Erkennung und Bewertung von Entwurfsmusterinstanzen im Quelltext einer Software für die Erkennung von Schwachstellen, Instanzen von Bad Smells und Anti Patterns, erweitert. Aufbauend darauf wird eine grafische Sprache zur Spezifikation von Programmtransformationen entwickelt, die Schwachstellen in bessere Lösungen transformieren. Bei einer solchen Transformation soll i.d.R. die Struktur verbessert werden, ohne das von außen beobachtbare Verhalten zu verändern (Refactoring). Um bestimmte Verhaltensveränderungen auszuschließen, wird ein automatisches Verfahren entwickelt, dass eine Verifikation von Transformationen auf Einhaltung definierbarer Kriterien unterstützt. Die Kriterien beschreiben strukturelle Eigenschaften eines Programms, die durch eine Transformation erhalten oder vermieden werden müssen. Das Verfahren versucht nachzuweisen, dass die Kriterien (induktive) strukturelle Invarianten sind, die in allen Versionen beliebiger Programme gelten, die durch Ausführung vollständiger Transformationen entstehen können. Die Transformationssprache wurde dazu sowohl auf die Durchführung von Transformationen als auch ihre Verifikation ausgelegt. Kann eine Transformation ein Kriterium verletzen, werden systematisch repräsentative Beispiele für problematische (Teil-)Ausführungen ermittelt und dem Re-Engineer so Hinweise für eine Korrektur gegeben. |