Dieses Buch gäbe es nicht, würde die Softwareentwicklung in der Praxis tatsächlich immer so ablaufen wie theoretisch geplant. Einige Worte zum Buchtitel: Was sind "Refactorings" und warum liegt die Betonung auf großen Softwareprojekten? Mit dem Begriff Refactoring ist eine Vorgehensweise gemeint, allein die interne Struktur der Software so zu verändern, dass diese verständlicher und vor allem leichter zu warten wird. Den Begriff erwähnte Martin Fowler, der sich mit Beiträgen zu den Themen Extreme Programming und UML einen Namen gemacht hat, erstmals im Jahr 1999. Die Autoren unternehmen auf rund 270 Seiten den Versuch, die Grundlagen sowie Praxiserfahrungen darzustellen. Im gesamten Buch merkt man, dass sie als langjährige Consultants sehr viel Erfahrung aus objektorientierten Projekten einfließen lassen und auch gelegentlich theoretische Aspekte, so gut diese auch sein mögen, kritisch anhand des Programmieralltags bewerten. Wann, wie und mit welchen Werkzeugen führt man ein Refactoring durch? Was sind "Best Practices"? Welche sind typische Probleme und wie sehen pragmatische Lösungen aus?
Zum Adressatenkreis gehören Entwickler, die sich bereits mit dem Thema Refactoring beschäftigt haben. In Kapitel 2 findet sich für den Einstieg eine kompakte Zusammenfassung der Thematik. Es gelingt den Autoren, mit präzisen, doch flüssig lesbaren Ausführungen die Sachverhalte zu erläutern. Schwerpunktmäßig betrachten sie reine Java-Entwicklungsprojekte, was nicht zuletzt an den Quellcode-Beispielen deutlich wird. Das grundlegende Prinzip lässt sich jedoch auf alle objektorientierten Sprachen (wie etwa Smalltalk oder C++) anwenden. Statt die Literaturhinweise einfach nur aufzulisten, finden sich jeweils kurze Anmerkungen zum Inhalt, was man sich öfter wünschen würde.
Das zweite Thema neben Refactorings sind so genannte "Smells" (zu Deutsch etwa üble Gerüche) – ein Begriff, der auch auf Fowler zurückgeht. Geschildert werden all jene Fälle, in denen sich Smells unangenehm bemerkbar machen können: Software-Architektur, Quellcode, Subsysteme und Schichten. Dass es ohne Werkzeuge und Hilfsmittel nicht gelingt, den üblen Gerüchen auf die Spur zu kommen, wird von den Autoren immer wieder betont. Hierzu werden einige Tools wie PMD und Plug-ins in sehr knapper Form vorgestellt.
Ganz konkrete Muster für Refactorings liefern die Autoren im Kapitel 4 für folgende Aktionen: Verschieben von Klassen, Objektgeflechtfassade einführen, Klasse in Vererbungshierarchien verschieben, Klassenvererbung auf Interface umstellen, klassische Zyklenbeseitigung. Etwas ausführlicher hätte hier das wichtige Thema Impact Analysis ausfallen können, zumal sich hier auch nur eine einzige Literaturangabe findet. Diskutiert wird die Nützlichkeit von Call-Graphen. Dabei müsste angemerkt werden, dass die Funktionalitäten der meisten Tools leider sehr beschränkt sind, da es zumeist an leistungsfähigen Layout-Algorithmen mangelt. Es entsteht vielmehr der Eindruck, eine Art wirren Schnittmusterbogen vor sich zu haben.
Ein Kritikpunkt betrifft auch das Kapitel 5 "Refactoring und relationale Datenbanken". Hier geht es auf 30 Seiten um die Zugriffsschichten, die den Zugriff auf relationale Datenbanken regeln. Der Empfehlung der Autoren, in agilen Projekten mehr Datenbankrechte für Entwickler zu vergeben, kann man nicht uneingeschränkt zustimmen. Die Tipps in diesem Kapitel sind leider überwiegend sehr pauschal gehalten, um diese Problematik bei Datenbanken zu lösen. So gibt es in sehr vielen Applikationen bestimmte Teile der Zugriffsschichten, die nicht mit objektorientierten Sprachen realisiert wurden. Sind solche Applikationen grundsätzlich von einem Refactoring ausgeschlossen? Diese Frage bleibt unbeantwortet. Den Schwerpunkt in diesem Kapitel bilden denn auch "nur" Datenmigrationsprobleme, falls Tabellenstrukturen geändert wurden.
Das Schlusskapitel widmet sich einem kommerziellen Tool namens Sotograph, das ein Refactoring von großen Projekten ermöglicht. Beispielhaft wird das Refactoring auf den eigenen Quellcode des Tools angewandt. Dass übersichtliche grafische Darstellungen leider nicht zu den Stärken dieses Tools zählen, belegen einige Beispiele. Wichtige Erkenntnis hier: Ein Refactoring ist bereits ab der ersten Codezeile ein ständiger Begleitprozess in Entwicklungsprojekten.
Fazit: Das Buch ist auch ohne Vorkenntnisse als Einstieg in das Thema Refactoring und Smells hervorragend geeignet. Es erklärt die Vorteile ("Best Practices"), aber auch die Schwachstellen, die dieses Vorgehen mit sich bringt. Die dazu notwendigen Werkzeuge werden in knapper Form vorgestellt.








