Refactoring
Refaktorisierung (englisch: refactoring) ist ein Begriff aus der Informatik, spezieller der Softwareentwicklung. Durch Refaktorisierung verbessert man Lesbarkeit und Struktur (Architektur) eines Programms, dessen Funktionalität bleibt aber erhalten. Refaktorisierung ist eine Methode des Extreme Programming.
Vorteile
Refaktorisierung dient der Verbesserung des Designs. Gutes Design hat verschiedene Vorteile. So erhöht sich die Wiederverwendbarkeit von Komponenten. Ausserdem versteht auch andere Programmierer oder man selbst später besser den Code. Schliesslich ist guter Code flexibler.
Im üblichen Softwareentwicklungszyklus ist ein fortwährender Kreislauf von Spezifikation, Design, Implemetierung und Tests vorgesehen. Nach jedem Durchlauf kann das Softwareprodukt immer wieder neu in diesen Kreislauf einsteigen. Mit den klassischen Techniken hiess das jedoch, dass nach einer Änderung der Spezifikation oder einem Redesign oft Teile oder sogar das ganze Programm völlig neu geschrieben werden mussten. Refaktorisierung erlaubt dem Entwickler diesen Zyklus permanent im Kleinen ablaufen zu lassen, und so sein Produkt kontinuierlich zu verbessern.
Risiken und deren Handhabung
Refaktorisierung wird nur auf funktionierendem Code ausgeführt (dessen Funktionalität soll ja erhalten bleiben). Dies beinhaltet aber auch das Risiko, selbst etwas am Code kaputt zu machen. Um dieses Risiko zu vermeiden (oder zumindestens zu minimieren) verwendet man verschiedene Regeln, die den Prozess des Refaktorisierens ungefährlicher machen.
Zuallererst sollte man eine Reihe automatisch ablaufender Unit-Tests haben. Diese werden vor der Refaktorisierung angewandt, und man beginnt erst, wenn die Tests alle funktionieren. Dies stellt sicher, dass das Programm richtig läuft. Nach Ausführung der Refaktorisierung wird wieder die Testsuite ausgeführt. So kann man Fehler beim Refaktorisieren sofort erkennen.
Weiterhin gilt das Prinzip der kleinen Änderungen. Wenn man nur wenig verändert, dann kann man auch wenig zerstören. Meistens kann man komplexe Refaktorisierungen, die man plant, in einfache kleine Einheiten zerlegen. Vor und nach jedem Schritt wird wieder durch die Tests die Integrität des Systems geprüft.
Schliesslich gibt es einen Katalog von Refaktorisierungsmustern, die ähnlich wie die Entwurfsmuster eingesetzt werden, um Fehler zu vermeiden. Dabei ist in jedem Muster eine Reihe von Parametern definiert. Da wäre erstmal das Ziel des Musters (Methode extrahieren, Klasse umbenennen, etc.) und dazu dann eine Reihe von Arbeitsanweisungen, die für diese Aktion ausgeführt werden müssen. Viele dieser Muster können heutzutage automatisch von Werkzeugen umgesetzt werden. Man trifft als Softwareentwickler nur noch die Entscheidung, welches Muster worauf angewendet wird, um den Quelltext zu verbessern.
Weblinks und Literatur
- Refactoring-Homepage (englisch) (enthält einen Katalog von Refaktorisierungen [1])
- Refactoring. Wie Sie das Design vorhandener Software verbessern von Martin Fowler ISBN 3827316308