Buch-Rezension zu „Refactoring“

Refactoring: Improving the Design of Existing Code“ von Martin Fowler erschien 1999 bei Addison-Wesley. Mit diesem Buch gelang Fowler ein Standardwerk, dass trotz seines Alters nichts an Aktualität eingebüsst hat.

 
Was ist Refactoring?
Als Refactoring bezeichnet man die Verbesserung der Struktur von Programmcode bei der die Funktionalität nach aussen hin nicht verändert wird. Diese Restrukturierung dient einer besseren Lesbarkeit, besserem Verständnis und der Erhöhung der Wartbarkeit. Dadurch können Erweiterungen an bestehendem Code leichter und schneller eingefügt werden.

Fowler beginnt das Buch nach einer kleinen Begriffserklärung mit einem Beispiel zur Gebührenberechnung für ausgeliehene Videos. Dieser kleine Anwendungsfall zeigt schön wie man schrittweise mittels Refactoring die Qualität von Code erhöhen kann. Und es weckt das Interesse, mehr darüber zu erfahren.

 
Grundsätzliches über Refactoring
Wann soll man es nutzen und wo liegen die Grenzen? Dies versucht Fowler im zweiten Kapitel zu beantworten. Seine Antwort darauf lautet, dass man es eigentlich immer machen sollte. Es gibt zwar einige Ausnahmen (wenn z.B. ein Neuschreiben des Codes weniger Aufwand verursacht), doch in der Regel ist Refactoring eine sinnvolle und notwendige Tätigkeit.

Einige Refactorings sind für die Performance nicht gerade förderlich. Fowler empfiehlt erst den Code aufzuräumen und danach die Performance anzugehen. Der gesäuberte Code ist in der Regel einfacher und effektiver zu optimieren. Natürlich gilt auch hier, das man immer auch selber denken darf. Blind einem Refactoring zu folgen nur weil es im Buch steht macht keinen Sinn.

 
Tests sind wichtig
Nach einer kurzen Auflistung der grössten „Bad Smells“ und wieso diese nach einem Refactoring rufen geht es ums testen. Um sicherzustellen das sich an der Funktionalität nichts geändert hat, sind Tests unverzichtbar. Dieses Sicherheitsnetzt gibt einem die Freiheit, ohne grosses Nachdenken über mögliche Konsequenzen das Refactoring durchzuführen. Muss man ständig jede mögliche Auswirkung bedenken, kann man kaum noch produktiv arbeiten. Hat man aber Tests, passen diese auf und liefern schnell eine verlässliche Bestätigung. Bevor man sich in die Arbeit stürzt, sollte man unbedingt ein wenig Zeit in gute Tests investieren – es zahlt sich sehr schnell aus.

 
Der Katalog
Fowler hat 72 Refactorings gesammelt und immer nach diesem Format beschrieben:

  • Name: damit man eine Basis für die Kommunikation hat und unter der gleichen Bezeichnung auch das gleiche versteht
  • Zusammenfassung: wozu dieses Refactoring dient.
  • Motivation: eine ausführlichere Erklärung wann man dieses Refactoring anwenden kann und wann man es sein lassen sollte.
  • Ablauf: eine Schritt für Schritt Anleitung um das Refactoring durchzuführen.
  • Beispiel: ein möglichst einfaches Beispiel das beim Verstehen des Refactorings hilft.

Die Refactorings reichen vom sehr einfachen extrahieren einer Methode über Templates bis zu Design Patterns. Manche davon gehen auf Smalltalk zurück und waren schon seit mehr als einem Jahrzehnt bekannt, andere wurden erst von wenigen Leuten um Fowler herum verwendet.

Bei zahlreichen Refactorings gibt es auch eine Gegenaktion. Auf „Extract Method“ folgt zum Beispiel „Inline Method“. Je nach Situation ist das eine oder andere Refactoring nötig um zu besserem Code zu kommen. Der Katalog hilft einem bei der Umsetzung, aber der Entwickler trifft die Entscheidung, welchen Weg er einschlagen will.

 
Fazit
Die Schreibweise von Fowler hat mir sehr gefallen. Ohne grosses Tamtam erklärt er das sehr wichtige Thema und regt zum nachdenken an. Bei diesem Buch machte ich häufig eine Lesepause um gerade gewonnene Erkenntnisse und Ideen aufzuschreiben.

Neben dem eigentlichen Thema lernt man auch sehr viel über Objektorientierung. Etliche Feinheiten von denen ich bisher das „wie“ kannte haben dadurch nun eine ganz neue Erklärung für das „wieso“ bekommen. Auch wenn die Beispiele in Java sind, so gelten diese fast vollständig auch für jede andere (Objektorientierte-) Programmiersprache.

Ich kann jedem Programmierer dieses Buch empfehlen – es ist definitiv ein „Must-Read“.

 
Zum Buch
Refactoring: Improving the Design of Existing Code“ von Martin Fowler, 1999 Addison-Wesley, ISBN 978-0-201-48567-7, 464 Seiten