Szkolenie: Refaktoryzacja Legacy Code - warsztat praktyczny
Szkolenie "Refaktoryzacja Legacy Code - warsztat praktyczny" to intensywny kurs, który stanowi praktyczne wprowadzenie do technik bezpiecznej refaktoryzacji istniejącego kodu. Uczestnicy nauczą się, jak systematycznie poprawiać jakość kodu bez zmiany jego funkcjonalności, eliminować code smells, zarządzać długiem technicznym oraz stosować sprawdzone wzorce refaktoryzacji.
- Trenerzy praktycy
- Kameralne grupy
Czas trwania szkolenia:3 dni (24h)
Kod kursu:REFACTORING/LEGACY
Refaktoryzacja Legacy Code - warsztat praktyczny
Cele szkolenia
Zdobycie praktycznych umiejętności identyfikacji i eliminacji code smells w kodzie legacy, z wykorzystaniem narzędzi analizy statycznej i zasad Clean Code
Opanowanie katalogu klasycznych refaktoryzacji kodu (m.in. Extract Method, Move Method, Replace Conditional with Polymorphism) i umiejętność ich stosowania w projektach komercyjnych
Zrozumienie zasad bezpiecznej refaktoryzacji z wykorzystaniem testów automatycznych oraz praktycznych strategii testowania kodu (unit, integration, characterization tests)
Poznanie technik pracy z kodem niepokrytym testami, w tym tworzenie Characterization Tests i identyfikacja Seams, które umożliwiają skuteczną refaktoryzację bez ryzyka
Umiejętność stosowania zasad SOLID, Clean Code i czystej architektury w procesie refaktoryzacji, by projektować systemy o wysokiej spójności i niskim sprzężeniu
Praktyczne doświadczenie w przekształcaniu kodu do wzorców projektowych (Strategy, Factory, Composite, Observer, Decorator), zwiększających elastyczność i rozszerzalność systemów
Rozwinięcie kompetencji w zakresie zarządzania długiem technicznym, dokumentowania zmian i podejmowania decyzji o refaktoryzacji vs. przepisaniu systemu
Dla kogo?
Szkolenie dedykowane jest programistom wszystkich poziomów zaawansowania, architektom oprogramowania, team leadom oraz technical leadom, którzy chcą zdobyć lub usystematyzować wiedzę z zakresu refaktoryzacji
Szczególnie polecane osobom pracującym z istniejącymi systemami, dużymi bazami kodu oraz zespołom wdrażającym praktyki Clean Code i zwinne metody rozwoju oprogramowania
Zalety
Skoncentrowanie na praktyce – szkolenie prowadzone w formule intensywnego warsztatu programistycznego, opartego na autentycznych przykładach kodu legacy z projektów produkcyjnych
Katalog konkretnych refaktoryzacji – uczestnicy otrzymują zestaw gotowych do zastosowania technik, które pozwalają systematycznie poprawiać jakość kodu i redukować dług techniczny
Wysoka wartość merytoryczna – treści oparte na sprawdzonych źródłach, m.in. książkach M. Fowlera („Refactoring”) i J. Kerievsky’ego („Refactoring to Patterns”), połączone z doświadczeniem praktyków
Ekspercka kadra szkoleniowa – zajęcia prowadzone przez doświadczonych programistów i architektów oprogramowania z wieloletnim doświadczeniem w refaktoryzacji systemów legacy
Umiejętno ści produkcyjne – po szkoleniu uczestnicy będą potrafili samodzielnie planować i realizować proces refaktoryzacji w rzeczywistych środowiskach projektowych
Praktyczne case studies – ćwiczenia oparte na realnych przypadkach „trudnego” kodu, pokazujące, jak stosować wzorce projektowe, zasady SOLID i dobre praktyki refaktoryzacji w codziennej pracy
Kompleksowe podejście do problemu – szkolenie obejmuje zarówno aspekty techniczne (testy, narzędzia IDE, analiza kodu), jak i organizacyjne (code review, dokumentacja, zarządzanie ryzykiem refaktoryzacji)
Wymagania
Praktyczna znajomość programowania obiektowego w co najmniej jednym języku (Java, C#, Python, JavaScript/TypeScript lub podobne)
Podstawowa znajomość testów jednostkowych i frameworków testowych (JUnit, NUnit, pytest, Jest lub podobne)
Umiejętność czytania i rozumienia cudzego kodu
Podstawowa wiedza o wzorcach projektowych będzie atutem, ale nie jest wymagana
W cenie otrzymasz:
Materiały szkoleniowe
Certyfikat ukończenia szkolenia
W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki
Program szkolenia
Wprowadzenie do pracy z kodem legacy
Definicja i charakterystyka kodu legacy
Ryzyka i koszty utrzymania systemów legacy
Dług techniczny – identyfikacja, pomiar i zarządzanie
Code smells – rozpoznawanie symptomów niskiej jakości kodu
Metryki jakości kodu (złożoność cyklomatyczna, pokrycie testami, duplikacje)
Najczęstsze przyczyny powstawania kodu niskiej jakości
Kryteria decyzji: refaktoryzacja czy przepisanie systemu
Fundamenty refaktoryzacji
Istota i cele refaktoryzacji
Zasady bezpiecznej refaktoryzacji
Znaczenie testów w procesie refaktoryzacji
Piramida testów i strategie testowania
Wzorce Test Doubles (Mock, Stub, Spy, Fake)
Code coverage – zalety, ograniczenia i ryzyka nadużyć
Characterization tests – testowanie kodu bez istniejących testów
Techniki pracy z kodem legacy (Seams, Dependency Breaking)
Zasady dobrego projektowania
Kluczowe zasady: DRY, KISS, YAGNI
Zasady SOLID w praktyce
Projektowanie o wysokiej spójności i niskim sprzężeniu
Czysta architektura – założenia i popularne podejścia
Wzorce projektowe jako kierunek refaktoryzacji
Podstawowe refaktoryzacje – warsztat praktyczny
Extract Method
Extract Variable / Constant
Inline Method / Variable
Rename
Move Method / Field
Extract Class
Encapsulate Field
Encapsulate Collection
Encapsulate Conditional
Replace Magic Numbers with Named Constants
Refaktoryzacje hierarchii klas – warsztat praktyczny
Pull Up Method / Field – przeniesienie wspólnych metod/pól do klasy bazowej
Push Down Method / Field – przeniesienie metod/pól do konkretnych podklas
Extract Superclass – wyodrębnienie wspólnej klasy bazowej z podobnych klas
Extract Subclass – utworzenie podklasy dla specyficznego zachowania
Extract Interface – wyodrębnienie interfejsu definiującego kontrakt
Collapse Hierarchy – scalenie zbędnej klasy z rodzicem/potomkiem
Replace Inheritance with Composition – zamiana dziedziczenia na kompozycję
Refaktoryzacje do wzorców projektowych – warsztat praktyczny
Replace Conditional Logic with Strategy – enkapsulacja algorytmów w osobnych klasach
Replace Conditional with Polymorphism – zamiana switch/if na polimorfizm
Replace Type Code with Class – zastąpienie kodów typami
Encapsulate Composite with Builder – użycie Buildera do tworzenia struktur złożonych
Encapsulate Classes with Factory / Extract Factory Class – centralizacja tworzenia obiektów w fabryce
Move Embellishment to Decorator – przeniesienie dodatkowej funkcjonalności do dekoratorów
Replace State-Altering Conditionals with State – zamiana warunków na wzorzec State
Replace Hard-coded Notifications with Observer – zastąpienie bezpośrednich powiadomień wzorcem Observer
Replace Implicit Tree with Composite – zastąpienie ukrytej struktury drzewa wzorcem Composite
Unify Interfaces with Adapter – ujednolicenie niekompatybilnych interfejsów adapterem
Replace Conditional Dispatcher with Command – zamiana rozgałęzień na wzorzec Command
Apply Template Method – wyodrębnienie szkieletu algorytmu do metody szablonowej
Replace Distinctions with Composite – ujednolicenie różnych typów przez Composite
Limit Instantiation with Singleton – ograniczenie tworzenia instancji do jednej
Move Accumulation to Collecting Parameter / Visitor – przeniesienie agregacji do parametru zbierającego lub Visitora
Extract Composite – wyodrębnienie elastycznej struktury obiektowej
Zaawansowane refaktoryzacje – warsztat praktyczny
Break Dependencies – rozerwanie zależności między komponentami
Extract Method Object – wyodrębnienie metody do osobnej klasy
Break Responsibilities – podział nadmiernych odpowiedzialności klasy
Remove Duplication – usunięcie duplikacji kodu
Break Method – podział zbyt długiej metody na mniejsze
Introduce Parameter Object – grupowanie parametrów w obiekt
Remove Arrowhead Antipattern – spłaszczenie zagnieżdżonych instrukcji warunkowych
Introduce Design by Contract Checks – dodanie warunków wstępnych/końcowych
Remove Double Negative – usunięcie podwójnych zaprzeczeń
Remove God Classes – rozbicie klas z nadmiernymi odpowiedzialnościami
Remove Boolean Method Parameters – zamiana flag boolean na wyraźne metody
Remove Middle Man – usunięcie zbędnego pośrednika w delegacji
Return ASAP – natychmiastowy zwrot wartości bez zbędnych zmiennych tymczasowych
Strategie i dobre praktyki
Stopniowa refaktoryzacja kontra przepisanie systemu
Zasada Boy Scout – pozostawianie kodu w lepszym stanie niż zastany
Praca zespołowa w refaktoryzacji – komunikacja i code review
Dokumentowanie zmian w procesie refaktoryzacji
Narzędzia wspierające refaktoryzację (IDE, analiza statyczna, linters)
Zarządzanie ryzykiem w procesie refaktoryzacji
Wybrane opinie
Przeczytaj pozytywne opinie pochodzące z ankiet satysfakcji z naszych szkoleń wypełnianych wyłącznie przez ich uczestników po realizacji usługi