Legacy-Code wird mit der Zeit immer schlechter

Legacy-Code wird mit der Zeit nicht besser. Er wird schlechter.

Letzte Woche habe ich drei Stunden damit verbracht, einen Bug zu beheben. Eigentlich hätte es 20 Minuten gedauert. Das Problem war ein Validierungsmodul aus dem Jahr 2019. Alle hatten es ignoriert, weil „es funktioniert“. Es funktionierte nicht. Ich fand einen TODO-Kommentar aus dem Jahr 2020 in der Datei.

Viele behandeln Legacy-Code wie eine optionale Schuld. Sie denken, sie könnten sie zurückzahlen, wenn sie Zeit haben. Legacy-Code ist eher wie Schimmel. Er breitet sich aus. Er kontaminiert andere Teile Ihres Systems. Je länger man ihn ignoriert, desto teurer wird die Bereinigung.

Dies erzeugt einen Teufelskreis:

  • Man erbt ein unordentliches Projekt.
  • Man fügt ein weiteres if-Statement hinzu, damit das Feature funktioniert.
  • Sechs Monate später macht jemand anderes dasselbe.
  • Ein Jahr später hat die Datei 800 Zeilen und null Tests.

Dieser „funktionierende“ Code hat versteckte Kosten:

  • Die Entwicklungsgeschwindigkeit sinkt. Man verbringt mehr Zeit damit, den Kontext zu lesen, als Code zu schreiben.
  • Die Anzahl der Bugs steigt. Das Beheben einer Sache führt dazu, dass etwas anderes kaputtgeht.
  • Das Onboarding wird schwierig. Neue Entwickler haben Mühe zu verstehen, warum Logik überall dupliziert ist.

Achten Sie auf diese Warnsignale:

  • Nutzlose oder falsche Kommentare.
  • Duplizierte Geschäftslogik in verschiedenen Dateien.
  • Zirkuläre Abhängigkeiten und starke Kopplung.

Versuchen Sie nicht, alles neu zu schreiben. Vollständige Neuentwicklungen scheitern in 80 % der Fälle. Man verbringt Monate damit, das wieder aufzubauen, was bereits existiert, während das Unternehmen auf neue Features wartet.

Nutzen Sie inkrementelles Refactoring mit Charakterisierungstests:

  • Erfassen Sie das aktuelle Verhalten mit Tests, selbst wenn es seltsam ist.
  • Refactoren Sie, ohne dieses Verhalten zu ändern.
  • Wiederholen Sie dies, bis der Code lesbar ist.
  • Erst dann ändern Sie das Verhalten mit echten Tests.

Befolgen Sie diese Regeln, um Fallen zu vermeiden:

  • Refactoren Sie niemals ohne Tests.
  • Ändern Sie während eines Refactorings nicht das Verhalten. Ein Bug könnte ein undokumentiertes Feature sein, auf das sich ein Kunde verlässt.
  • Lassen Sie „stillen“ Code in Ruhe. Wenn sich ein Modul seit drei Jahren nicht geändert hat und keine Probleme verursacht, lassen Sie es so.

Konzentrieren Sie Ihre Energie auf den Code, den Sie häufig anfassen.

Quelle: https://dev.to/taina_costa_f/legacy-code-nao-envelhece-como-vinho-quanto-mais-espera-pior-fica-132h