Refactoring heißt, die innere Form von Code zu verbessern, ohne sein Verhalten nach außen zu ändern.
- Refactoring
Die Umgestaltung von Code mit dem Ziel, ihn verständlicher und änderbarer zu machen, ohne sein nach außen sichtbares Verhalten zu verändern.
Beispiel: „Vor der neuen Funktion stand ein Refactoring, damit sie überhaupt sauber einzubauen war.“Auch: Refaktorisierung. Der Begriff wurde durch Martin Fowlers Buch von 1999 geprägt.
Abgrenzung zum Umbau: Ändert sich das Verhalten, ist es kein Refactoring mehr. Genau diese Trennung macht den Begriff nützlich.
Warum das Verhalten gleich bleiben muss
Weil sich sonst zwei Dinge zugleich ändern und im Fehlerfall niemand weiß, welches schuld war. Erst aufräumen, dann erweitern: Nach dem ersten Schritt muss alles noch genau so laufen wie vorher.
Die Voraussetzung dafür sind Tests. Ohne sie ist ein Refactoring eine Behauptung; mit ihnen eine überprüfbare Aussage. Das ist der Grund, warum Teams ohne Testabdeckung sich vor dem Aufräumen fürchten, und zwar zu Recht.
Die typischen Handgriffe
Einen Abschnitt in eine Funktion herauslösen und benennen. Eine Variable sprechender nennen. Doppelten Code zusammenführen. Eine lange Bedingungskette in frühe Rückgaben auflösen. Eine Klasse aufteilen, die zu viel tut.
Jeder dieser Schritte ist klein und für sich überprüfbar. Genau darin liegt der Unterschied zum großen Umbau, der über Wochen läuft und bei dem niemand mehr sagen kann, ob noch alles funktioniert.
Wann sich der Aufwand lohnt
Dort, wo ohnehin gearbeitet wird. Eine Stelle, die seit Jahren unverändert läuft, muss nicht schön sein. Eine, die jeden Monat angefasst wird, kostet bei jedem Mal, solange sie unübersichtlich bleibt.
Das ist auch die Antwort auf die Frage, wie sich Aufräumen gegenüber Kunden rechtfertigen lässt: als Teil der nächsten Änderung an derselben Stelle, nicht als eigener Posten.