Agile Modellierung mit
UML
Loading

9 Refactoring als Modelltransformation

Refactoring bedeutet Anwendung systematischer und beherrschbarer Transformationsregeln zur Verbesserung des Systementwurfs unter Beibehaltung des extern beobachtbaren Verhaltens. In diesem Kapitel werden zunächst eine Methodik zur Anwendung von Refactoring-Regeln und die Konzepte der Modelltransformationen diskutiert. Auf dieser Grundlage wird ein in der Praxis verwendbarer Beobachtungsbegriff entwickelt, der auf UML/P-Testfällen beruht. Einige Sammlungen von Refactoring-Regeln für die UML/P werden drauf aufbauend im nächsten Kapitel besprochen.

9.1 Einführende Beispiele für Transformationen
9.2 Methodik des Refactoring
9.2.1 Technische und methodische Voraussetzungen für Refactoring
9.2.2 Qualität des Designs
9.2.3 Refactoring, Evolution und Wiederverwendung
9.3 Modelltransformationen
9.3.1 Formen von Modelltransformationen
9.3.2 Semantik einer Modelltransformation
9.3.3 Beobachtungsbegriff
9.3.4 Transformationsregeln
9.3.5 Korrektheit von Transformationsregeln
9.3.6 Ansätze der transformationellen Softwareentwicklung
9.3.7 Transformationssprachen

Die Anforderungen an ein im Einsatz befindliches Softwaresystem ändern sich mit dem Geschäftsmodell genauso wie mit den steigenden Ansprüchen der Anwender an die Softwarefunktionalität. Die technologische Basis einer Anwendung, wie das zugrundeliegende Betriebssystem, benutzte Frameworks oder Nachbarsysteme, unterliegen ständiger Evolution.

Während eines Projekts entstehen neue Anforderungen der Anwender, die flexibel in das Projekt einzubringen sind. Zusätzlich dazu ist die Komplexität heutiger Software meistens so hoch, dass eine allen Anforderungen gewachsene Architektur des Systems nicht von Anfang an entwickelt werden kann.

Aus diesen Gründen ist es notwendig, Techniken zu beherrschen, mit denen Software weiterentwickelt sowie den geänderten Anforderungen und einem neuen technischen Umfeld angepasst werden kann. Eine dafür verwendbare Technik ist das Refactoring vorhandener Software [Fow99Opd92], das aus einer Sammlung zielgerichteter und systematisch anwendbarer Transformationen besteht, mit denen eine konsequente Verbesserung einer Systemarchitektur vorgenommen werden kann. Diese Verbesserung dient anschließend als Grundlage für Erweiterungen des Systems.

Refactoring [MT04] erfreut sich zunehmender Beliebtheit. Deswegen gibt es mittlerweile Anpassungen für spezielle Sprachen, wie etwa Ruby [FHFB09], HTML [Har08] oder die UML [SPTJ01Dob10], die Anwendung auf große und komplexe Softwaresysteme [RL04Mar09], Refactoring für die Einführung von Entwurfsmustern [Ker04] oder für bestimmte Aufgaben der Softwareentwicklung, wie etwa die Software-Sanierung [Küb09].

Ziel dieses Kapitels ist zunächst die Demonstration einer methodischen Vorgehensweise anhand von Beispielen. Darauf aufbauend steht die Einbettung von Refactoring-Techniken in die Welt der Modelltransformationen im Vordergrund. Zunächst werden in Abschnitt 9.1 einige Beispiele verschiedener Arten von Refactoring-Anwendungen vorgestellt. Abschnitt 9.2 enthält eine methodische Einordnung der Refactoring-Techniken in den Softwareentwicklungsprozess. In Abschnitt 9.3 werden die Konzepte der Modelltransformationen, von denen Refactoring einen Spezialfall darstellt, erläutert. Dabei wird die Semantik von Transformationsregeln präzisiert und eine für die in [Rum11] vorgestellte Vorgehensweise geeigneter Beobachtungsbegriff definiert.


Bernhard Rumpe. Agile Modellierung mit UML. Springer 2012