DigiSpace

Refaktoryzacja legacy code

Refaktoryzacja i ratowanie legacy code: audyt codebase PHP, aktualizacje frameworków, stopniowa modernizacja bez przepisywania od zera.

Ilustracja refaktoryzacji legacy — monolit stopniowo zastępowany testowanymi modułami

Legacy kod to nie zły kod — to kod, który przeżył kontekst, dla którego został napisany. Biznes na nim działa, nikt go w pełni nie rozumie, a każda zmiana to mały akt odwagi. Refaktoryzujemy i modernizujemy takie systemy bez przepisywania od zera, które trwa rok i nic nie daje.

Jak podchodzimy

  • Najpierw audyt — mapujemy, co tam faktycznie jest: zależności, martwy kod, problemy bezpieczeństwa, części, których wszyscy się boją dotknąć.
  • Testy charakteryzujące — zanim cokolwiek zmienimy, piszemy testy utrwalające, co kod robi dziś, włącznie z bugami. Zachowanie jest przypięte zanim zostanie zmienione.
  • Inkrementalna wymiana — wzorzec strangler: nowe funkcje trafiają do nowego kodu, gorące ścieżki migrują moduł po module, stary system kurczy się, aż można go wyłączyć.

Podejście strangler

Wzorzec strangler: aplikacja legacy i nowe moduły na wspólnej bazie

public function test_invoice_rounding_is_pinned(): void
{
    $legacy = new LegacyInvoiceCalculator();

    // Characterization test: pins current behaviour, quirks included.
    $this->assertSame(1049.99, $legacy->total($this->fixtureOrder()));
}

Zanim dotkniemy legacy code, przypinamy jego zachowanie testami charakteryzującymi — nawet dziwactwa. Refaktoring może zmienić kod, ale nie obserwowany wynik.

Stare i nowe działają obok siebie na tej samej bazie. Routing decyduje, która funkcja gdzie trafia. Nigdy nie ma momentu, w którym biznes czeka na koniec przepisywania — wartość jest dostarczana ciągle.

Co zazwyczaj znajdujemy

Codebase'y ery PHP 5, spaghetti bez frameworka, porzucone aplikacje Symfony 2/3, strony WordPress trzymane sześćdziesięcioma wtyczkami. Typowe zwycięstwa: aktualizacja do wspieranej wersji PHP, opakowanie istniejącego kodu frameworkiem, wymiana najgorszych zapytań i wdrożenia na szynach, by zmiany przestały straszyć.

Jeśli masz system, który działa, ale nikt nie odważy się go zmieniać — to dokładnie taki kształt projektu obsługujemy. Pokaż nam kod — powiemy, co warto zostawić.