Was ist Refactoring?

Refactoring ist der Prozess, ein Softwaresystem so zu modifizieren, dass sich das externe Verhalten des Codes nicht ändert, aber dennoch die interne Struktur des Codes zu verbessern. Es handelt sich um eine Vorgehensweise zum Aufräumen von Code, die Disziplin erfordert und die Wahrscheinlichkeit, Bugs zu verursachen, minimiert. Beim Refactoring verbessert ihr im Wesentlichen das Design des Codes, nachdem er geschrieben wurde.

»Verbessern des Designs des Codes, nachdem er geschrieben wurde.«

Das ist schon eine seltsame Ausdrucksweise. Seit es Softwareentwicklung gibt, dachten die meisten Leute, dass zunächst das Design entwickelt wird, und dass die Programmierung erst dann erfolgt, wenn es abgeschlossen ist. Der Code wird im Laufe der Zeit modifiziert, und die Integrität des Systems – die dem ursprünglichen Design entsprechende Struktur – geht allmählich verloren. Der Code wird nicht mehr sorgfältig entwickelt, und die Programmierung wird allmählich zum »Hacken«.

Refactoring ist das Gegenteil dieser Vorgehensweise. Mit Refactoring könnt ihr ein schlechtes oder sogar chaotisches Design in sinnvoll strukturierten Code umwandeln. Die einzelnen Schritte sind einfach – geradezu simpel. Ihr verschiebt ein Attribut von einer Klasse in eine andere, entnehmt einer Methode etwas Code, um daraus eine eigene Methode zu machen oder verschiebt Teile des Codes in der Hierarchie nach oben oder unten.
Dennoch kann die Gesamtheit dieser kleinen Änderungen das Design drastisch verbessern. Hierbei handelt es sich um die genaue Umkehrung dessen, was man als Softwarezerfall bezeichnen könnte.

Beim Refactoring verschiebt sich also die Gewichtung der Tätigkeiten. Das Design wird nicht nur ganz am Anfang festgelegt, sondern entsteht kontinuierlich während der Entwicklung. Während sich das System entwickelt, findet ihr heraus, wie sich das Design verbessern lässt. Diese Interaktion führt zu einem Programm, dessen Design auch bei fortschreitender Entwicklung gut bleibt.

Refactoring: Definition

In der Softwareentwicklung werden in der Praxis viele Begriffe häufig sehr zwanglos verwendet. Das gilt auch für »Refactoring«. Ich lege allerdings großen Wert auf eine präzisere Verwendung des Begriffs und halte es für sinnvoll, diese präzisere Form zu benutzen. Ich unterscheide zwischen dem Substantiv »Refactoring« und der Tätigkeit.

Refactoring (als Substantiv)

Eine Änderung an der internen Struktur von Software, um sie verständlicher zu machen und Modifikationen zu erleichtern, ohne dass sich das sichtbare Verhalten verändert.

Refactoring (als Tätigkeit)

Software durch die Anwendung einer Reihe von Refactorings umzustrukturieren, ohne dass sich das sichtbare Verhalten verändert. Ich könnte mich also einige Stunden mit der Tätigkeit Refactoring befassen und währenddessen ein paar Dutzend verschiedene Refactorings anwenden.


Im Laufe der Jahre sind viele in der Branche dazu übergegangen, jegliche Art des Aufräumens von Code als »Refactoring« zu bezeichnen – die obige Definition kennzeichnet jedoch einen bestimmten Ansatz beim Aufräumen des Codes. Beim Refactoring geht es darum, kleine verhaltensbewahrende Schritte durchzuführen und größere Veränderungen durch die Aneinanderreihung dieser verhaltensbewahrenden Schritte vorzunehmen. Die einzelnen Refactorings sind entweder selbst ein kleiner Schritt oder eine Kombination kleiner Schritte. Als Resultat ist der Code während des Refactorings nur selten in einem nicht
funktionsfähigen Zustand, was es mir erlaubt, jederzeit aufzuhören, selbst wenn ich noch gar nicht fertig bin.

Restructing

Ich verwende »Umstrukturieren« (»restructuring«) als allgemeinen Begriff, der jegliche Art der Neuorganisation oder des Aufräumens einer Codebasis bezeichnet, und betrachte Refactoring als eine ganz bestimmte Art der Umstrukturierung. Manchen Leuten mag das Refactoring ineffizient erscheinen, wenn sie ihm zum ersten Mal begegnen und beobachten, wie ich eine Vielzahl winziger Schritte ausführe, obwohl ein einzelner größerer Schritt ausreichen würde. Die winzigen Schritte ermöglichen mir jedoch ein schnelleres Vorankommen, weil sie sich so gut miteinander kombinieren lassen – und, sehr wichtig, weil ich keine Zeit mit dem Debugging verbringe.

Performance-Optimierung

Refactoring hat große Ähnlichkeit mit der Performance-Optimierung, denn beide Verfahren modifizieren den Code, ohne die Funktionalität des Programms zu verändern. Der Unterschied besteht in dem Ziel: Ein Refactoring wird durchgeführt, um den Code »verständlicher zu machen und Modifikationen zu erleichtern«. Das Programm kann dadurch schneller oder langsamer werden. Bei der Performance-Optimierung bin ich nur daran interessiert, das Programm zu beschleunigen, und muss damit rechnen, dass der Code letztendlich unhandlicher wird, wenn die Leistungssteigerung wirklich unverzichtbar ist.


Cover Buch Refactoring

Dieser Artikel ist ein Auszug aus dem Buch „Refactoring – Wie Sie das Design bestehender Software verbessern“ von Martin Fowler. Alle Infos zum Buch, das Inhaltsverzeichnis und eine kostenlose Leseprobe findet ihr bei uns im Shop.

Kommentar verfassen