Der Begriff Refaktorisierung bezeichnet das Transformieren von bereits existierendem Code, ohne sein „beobachtbares“ Verhalten zu ändern. Dabei bedeutet „beobachtbares Verhalten nicht ändern“, dass das vorherige sowie das transformierte Programm bei gleicher Eingabe auch die gleiche Ausgabe erzeugt.
Als Definition benutzt Fowler[L1 – S.41] die folgende Substantivform und Verbform:
Refaktorisierung (Substantiv): „Eine Änderung an der internen Struktur einer Software, um sie leichter verständlich zu machen und einfacher zu verändern, ohne ihr beobachtbares Verhalten zu ändern.“
Refaktorisieren (Verb): „Eine Software umstrukturieren, ohne ihr beobachtbares Verhalten zu ändern, indem man eine Reihe von Refaktorisierungen anwendet.“
Eine Refaktorisierung ändert also die interne Struktur des bereits funktionierenden Programmcodes mit dem Ziel, das Programmverhalten zu erhalten, aber die Lesbarkeit des Codes zu verbessern und Flexibilität zu erhöhen.
Diese Transformationen der Software werden mit Hilfe von Refaktorisierungschritten durchgeführt.
Refaktorisierungen machen den Code verständlicher. Dabei zählt Fowler Änderungen am Code, die diesen nicht verständlicher machen, nicht zu den Refaktorisierungen.
Performance-Optimierungen beispielsweise würden den Programmcode meist komplexer machen und wären aus diesem Grund keine Refaktorisierungen.
Da das Refaktorisieren vor allem in der Entwicklung und Weiterentwicklung eine große Rolle spielt, fasst Kent Beck die Eigenschaften des Refaktorisierens wie folgt zusammen:
„Refaktorisieren bezeichnet den Vorgang, ein funktionsfähiges Programm zu nehmen und seinen Wert zu erhöhen, indem wir sein Verhalten nicht ändern, aber ihm mehr von diesen Eigenschaften geben, die es uns ermöglichen, es mit hohem Tempo weiterzuentwickeln.“ [L1]
Um das Programmverhalten der Software zu sichern und die Entwicklung bzw. Weiterentwicklung zu beschleunigen, ist es wichtig, dass man eine repräsentative Menge an umfassenden Test entwickelt, implementiert und das Testen weitgehend automatisiert.
Damit die Tests das Refaktorisieren aber nicht aufhalten und der Programmierer mangels durchgeführter Tests nicht zu viel Zeit mit der Fehlersuche verbringt, ist es äußerst wichtig, diese zu automatisieren. Automatisierten Tests können bequem, schnell und dadurch ohne Zeitverlust öfter ausgeführt werden, als solche Tests, bei denen der Programmierer die Ausgabe des transformierten Programms mit der Ausgabe des vorherigen funktionierenden Programms bzw. mit der erwarteten Ausgabe vergleichen muss. Ein automatisierter Test kann bei nur einer Ausführung auch mehrere Fälle – im Idealfall aller relevanten Fälle – prüfen. Es ist nicht notwendig und oft auch nicht möglich, den Test für jeden Fall einzeln ausführen.
Es ist wichtig systematisch vorzugehen. Um zu verhindern, dass „das eigene Grab geschaufelt wird“, muss man Schritt für Schritt die Transformationen am Code anwenden.
Impressum