Der zweite Redner, dem ich auf dem See#Party in Kreuzlingen nach den Vorträgen von Golo Roden lauschen durfte, war Stefan Lieser. Von Stefan hatte ich in Ulm letztes Jahr bereits die Session Clean Code Developer gehört. Dieses Mal befasste er sich mit CCD im Umfeld mit Software-Projekten, die bereits über eine breite Codebasis verfügen. Den Vortrag hatte er bereits auf der Konferenz dotnet Collogne 2010 gehalten, wo er auch zum Download bereit steht. Zudem schreibt er mit seinem Kollegen Ralf Westphal an einer Artikelserie bei Heise, die sich ebenfalls mit dem Thema befasst.
Laut Stefan sei das Ziel eines jeden Softwareprojektes, dasselbe Programmfeature jederzeit zum gleichen Preis einbauen zu können. Dies setzt Evolvierbarkeit voraus, einer der Werte für Clean Code Developer.
Der Erreichung dieses hehren Ziels stehen laut Stefan Ängste vor folgenden Dingen im Weg:
- Regressionsfehler: Was passiert alles, wenn ich diese Änderung vornehme?
- manuelle Arbeiten: Welche Knöpfe muss ich drücken, um ein Release zu erzeugen?
- Personalmangel: Wenn wir weiterhin auf dieser alten Technologie aufsetzen, kriegen wir irgendwann keine Entwickler mehr dafür!
- Verlust von Quellcode: Liegt auf irgendeinem Rechner vielleicht noch eine wichtige Datei, die wir zum Bauen der Software benötigen?
Zur Bekämpfung dieser Ängste empfiehlt Stefan ein 6-Punkte-Programm:
1. Versionskontrolle einführen
- Source Safe steht aus gutem Grund nicht in den Folien - das ist kein Versionskontrollsystem
- Subversion ist auch schon nicht mehr Stand der Technik, besser verteilte Lösung wie git oder mercurial nutzen
- Anmerkung von mir: mit SVK kann man eventuell Subversion als verteiltes Versionskontrollsystem nutzen
2. Kontinuierliche Integration
- Wer den Build bricht, muss eine Woche das T-Shirt mit der Aufschrift "I broke the build" tragen. Das T-Shirt wird nur einmal im Jahr gewaschen

3. automatisierte Tests
- "Wilde" Abhängigkeiten
- fehlende Dependency Injection
- Verletzung des Single Responsibility Principle (erkennbar an Klassennamen mit den Worten "Class", "Manager", "Service", "Core" und beliebigen Konjunktionen)
- fehlende Trennung von Portal/Logik/Adapter
- externe Abhängigkeiten zu Datenbanken, Webservices etc.
- TypeMock Isolator nutzt die Profiling API
- damit: Konstruktoren und statische Methodenaufrufe abfangen und durch Attrappen ersetzen
- damit: sealed und internal-Methoden aus dem .NET-Framework ersetzen (DateTime.Now und .Today faken, Konstruktor von EventArgs aufrufen)
- "private" Methoden zu testen: "internal" machen und über InternalsVisibleTo("TestKlassenAssembly") Zugriff erlauben
- Variablen die intern instanziert werden, kann man über einen zweiten Konstruktor ebenfalls durch Attrappe ersetzen
4. Partitionen identifizieren
- Aufteilen der Anwendung in mehrere Benutzeroberflächen
- einen Teil isolieren und diesen sanieren
- Teil anhand strategischer Gesichtspunkte bestimmen
- Strategie kontinuierlich anpassen: Kerngeschäft, häufige Supportfälle
- ggf. sogar Datenbank aufteilen
5. Architektur planen
- wie man es heute machen würde, wenn man es "richtig" machen würde
- Ziel finden, auf das man hinarbeiten kann
6. "Refactoring to architecture"
- auf die Planarchitektur hinarbeiten
- Unit-Tests ergänzen
- Veränderungen iterativ angehen
- "großer Wurf" nicht möglich: Entwickler können häufig auf Anhieb nicht einmal genau beschreiben, was der Code tut
- für eine 100% Ablösung mit einer neu geschriebenen Version müsste man auch sämtliche Schwachstellen und Fehler in den Schnittstellen nachbauen
Im Laufe seines Vortrags erklärte Stefan noch einen Weg, sich in langen Methoden beim Refactoring zurechtzufinden: Man färbt im Visual Studio die Kommentare weiß ein, damit sie sich nicht mehr vom Hintergrund abheben. Nun erkennt man häufig Codeblöcke, aus denen sich Methoden extrahieren lassen. Die Kommentare darüber sind meist schon als Methodennamen ausreichend.
Fazit: TypeMock Isolator scheint genau das richtige Werkzeug für diesen Zweck zu sein. Nun muss ich nur noch meinen Vorgesetzten davon überzeugen, denn TypeMock ist doch ein wenig kostspielig. Es bleibt spannend 
Update 2010-09-06: Vorgesetzter schlug vor, sich einmal Moles von Microsoft anzuschauen. Hat jemand Erfahrungen damit?
Kommentare