Refaktoring mení spôsob organizácie kódu a zároveň zachováva to, čo môžu používatelia a pripojené systémy pozorovať. Zmena môže byť malá, ako je napríklad extrahovanie funkcie, alebo štrukturálna, ako je oddelenie modulu za rozhraním. Definujúcim obmedzením je kontinuita správania: ak sa zamýšľané správanie zmení, práca zahŕňa viac ako len refaktoring.
Čo refaktoring mení
Refaktoring sa zameriava na dizajn vo vnútri fungujúceho systému. Môže oddeliť zodpovednosti, urobiť tok údajov explicitným, nahradiť duplikáciu jednou implementáciou alebo zaviesť hranicu okolo závislosti. Tieto zmeny menia spôsob, akým ľudia udržiavajúci kód chápu a upravujú jeho štruktúru, nie zmluvu, na ktorú sa volajúci spoliehajú.
| Zmena | Štrukturálny účinok | Obmedzenie správania |
|---|---|---|
| Extrahovanie funkcie | Pomenuje a izoluje jednu operáciu | Vstupy a výstupy zostávajú rovnocenné |
| Rozdelenie modulu | Oddeľuje zodpovednosti | Existujúci volajúci pokračujú v práci |
| Zavedenie rozhrania | Skryje detail implementácie | Zmluva zostáva stabilná |
| Presun vlastníctva dát | Objasňuje, kto kontroluje záznam | Čítanie a zápis zachováva svoj význam |
Automatizované testy dokážu odhaliť niektoré rozdiely v správaní, no nie sú jediným dôkazom. Záznamy, databázové efekty, odosielané správy, súbory a externé hovory môžu byť súčasťou pozorovateľného správania.
Prečo sa refaktoring legacy kódu začína dôkazmi
Legacy kód často obsahuje nezdokumentované pravidlá a vedľajšie účinky. Zmena, ktorá vyzerá ako interná, môže ovplyvniť plánovanú úlohu, report alebo integráciu, ktorá v aktuálnych diagramoch chýba. Audit legacy codebase sleduje tieto vzťahy ešte pred zmenou štruktúry.
Ak existujúce testy neopisujú správanie jasne, test aktuálneho správania môže zaznamenať výstupy na menenej hranici. Tento záznam nepotvrdzuje správnosť každého výstupu. Poskytuje porovnávací bod, ktorý oddeľuje zámerné opravy od náhodných regresií.
Ako refactoring podporuje migráciu
Refaktoring môže pripraviť systém na postupnú náhradu. Postupná výmena cez spoločné rozhranie umožňuje súbežnú prevádzku starej a novej implementácie. Iné refaktoringy izolujú prístup k údajom, vytvoria hranicu služby alebo oddelia firemné pravidlá od kódu frameworku, aby sa jedna oblasť mohla presunúť bez presunu celej aplikácie.
Praktická postupnosť je:
- Definujte hranicu. Identifikujte správanie, volajúcich, údaje a vedľajšie účinky v rozsahu.
- Zaveďte overenie. Zaznamenajte aktuálne správanie pomocou vhodných automatických kontrol a prevádzkových dôkazov.
- Urobte jednu štrukturálnu zmenu. Udržujte zmenu dostatočne malú na porovnanie pred a po.
- Overte a nasaďte. Pred ďalším krokom sa uistite, že zmluvy aj správanie za behu zostali stabilné.
Čo by mal audit zaznamenať
Audit rozlišuje lokálne čistenie od refaktoringu umožňujúceho migráciu. Prvý zlepšuje udržiavateľnosť vo vnútri komponentu. Druhý vytvára hranicu, ktorú môže neskoršia práca obísť, nahradiť ju alebo ukončiť.
Toto rozlíšenie udržiava plán migrácie viazaný na špecifické obmedzenia. Zabraňuje tiež tomu, aby sa kozmetické zmeny počítali ako pokrok smerom k nahradeniu závislosti alebo rozkladu systému. Plán potom môže dať do súvisu každý krok refaktorizácie so závislosťou, ktorú odstraňuje, so správaním, ktoré chráni, a neskorším krokom, ktorý umožňuje.