Spis treści:
Rola testów jednostkowych we wprowadzeniu nowych funkcjonalności do Legacy Code
Refaktoryzacja kodu vs. przepisanie kodu
Legacy code – często zadawane pytania
Legacy Code – definicje
Legacy Code trudno zdefiniować technicznie. Często określa się w ten sposób przestarzały kod dziedziczony po poprzednich programistach. Inna definicja wskazuje na stary kod, który działa i ma krytyczną wartość dla firmy, a jednocześnie jego zmiana grozi błędami i regresją w działaniu. W takim powszechnym mniemaniu mówimy o kodzie Legacy wtedy, gdy jest on trudny w utrzymaniu, niechętnie aktualizowany i językowo utkwił w przeszłości.
Przykłady Legacy Code
Aplikacje Legacy Code otaczają nas wszędzie. Klasyką są systemy jakiegoś banku oparte na językach z lat 70-tych (np. COBOL). Zazwyczaj działają na mainframe’ach i zawierają setki milionów linii kodu, napisane różnymi językami programowania. Dla użytkownika końcowego wszystko pewnie wygląda normalnie – bankomat wypłaca pieniądze, konto się zgadza – ale w środku kryje się stary stos technologiczny, trudny do rozwijania.
Inny przykład znajdziemy na platformach zarządzania ryzykiem w bankowości czy energetyce. Są to kolosy pisane przez pokolenia inżynierów, często składające się modułów w C++ połączone z Javą, skryptami shell i fragmentami dokładanymi w Pythonie. Aby zrozumieć jego działanie, nowy programista (nawet doświadczony w tworzeniu enterprise risk platforms), chociażby musiałby rzucić okiem na archiwalne notatki albo zapytać weteranów (o ile jeszcze ktoś z pierwotnego zespołu jeszcze pracuje).
To samo dotyczy mniejszych systemów. Duża sieć restauracji również może mieć niezawodnie działający od lat program kasowy napisany na Windows NT. Podobnie bywa w systemach typu Greenfield, które pozbawione opieki po latach stają się Legacy Code. Integracja takich systemów z nowoczesną aplikacją mobilną to nie lada wyzwanie dla zleceniobiorcy, który otrzymał go „w spadku”.
Przeczytaj także: Code review w praktyce – zasady skutecznego przeglądu kodu
Rola testów jednostkowych we wprowadzeniu nowych funkcjonalności do Legacy Code
Dokładne zrozumienie Legacy Code to podstawa skutecznego wprowadzania zmian w zastanym systemie. Dlatego pierwszym działaniem powinna być statyczna analiza kodu, która pozwala zorientować się, jakie moduły się ze sobą łączą lub gdzie występuje duplikacja kodu.
Kolejny krok to testy jednostkowe, dzięki którym można sprawdzić funkcje w kontrolowanych warunkach i wskazać miejsce, od którego warto zacząć pracę. Ponadto takie testy tworzą dokumentacją wykonawczą, która jest zawsze aktualna. Ogromną rolę odgrywają tutaj właściwe definicje programisty, które będą stanowić swego rodzaju wprowadzenie dla kolejnych developerów – pokażą, co i jak powinno działać.
Przeczytaj także: Refaktoryzacja kodu – sposoby na poprawę jakości i wydajności oprogramowania

