Zum Inhalt springen

Michael Feathers

Schlüsselwerk: Working Effectively with Legacy Code (2004)

Legacy Code ist nicht alter Code. Legacy Code ist Code ohne Tests. Und Code ohne Tests ist Code, den man nicht sicher ändern kann.

Feathers hat systematisiert, wie man in einem System arbeiten kann, das man nicht vollständig versteht — und das keine Sicherheitsnetze hat.

  • Seams: Jeder Ort im Code, wo man das Verhalten ändern kann, ohne den Code selbst zu ändern. Dependency Injection als Frontend-Seam.
  • Charakterisierungstests: Man schreibt Tests, um zu verstehen, was der Code macht — nicht um zu verifizieren, was er sollte. Dann refactort man.
  • Sprout Method / Sprout Class: Neue Funktionalität als neue Methode/Klasse, nicht durch Änderung bestehenden Codes. Safe bei Zero Test Coverage.

In Projekten mit Legacy-Code ist „sauber machen” keine realistische erste Option. Feathers zeigt, wie man sich inch-by-inch in Richtung Testbarkeit bewegt, ohne das System zu zerstören.

Das ist unangenehm langsam. Es ist aber sicherer als der große Refactoring-Schwung, der nie fertig wird.