2000-ben jelent meg Martin Fowler nagy sikerű könyve a szoftverek újratervezéséről - vagy elterjedtebb nevén refaktorálásról. Hat évvel később már magyarul is kézbe vehettük, 2018-ban pedig megérte a második kiadását. A szerző elindított egy online katalógust is, ami a refactoring.com weboldalon érhető el. Mindezekből sejthető, hogy a téma elég nagy érdeklődésre tart számot, az elmúlt években egyre fontosabbá vált, és nagyon modern.
A refaktorálás gondolata már az 1990-es években megjelent. Ott találjuk az agilis fejlesztés és az extrém programozás alapelvei között. Szervesen beépült az agilis praktikák közé, amik szerint a kódolási munkát egyszerűbb struktúrával kezdjük, folyamatosan írunk fejlesztői teszteket, és ezek támogatásával - az új igényeknek megfelelően - bátran átalakítjuk az addig megírt részeket. Persze mindehhez szükség van egy modernebb fejlesztői hozzáállásra és némi gyakorlatra is.
A ponte.hu-nál rászántuk az időt és az energiát, és több szinten is megvizsgáltuk a témát. Először általános áttekintéssel kezdtünk. Milyennek szeretjük látni az általunk gyártott kódot? Olvashatónak, egyszerűnek, karbantarthatónak - hogy csak a legfontosabbakat említsem. Egyetlen szóval talán úgy fejezhetném ki magamat, hogy a kód legyen “tiszta”. Beszéltünk arról is, hogy mi történik, amikor ezt a tisztaságot valamilyen okból kifolyólag nem tudjuk biztosítani. Megismerkedtünk a technikai adósság és a szoftver entrópia fogalmával. Felismertük, hogy mindkettő elkerülhetetlenül jelen van a szoftverfejlesztésben. Mindkettő a változtatás iránti igényből fakad - a változás pedig mindennapi tapasztalatunk. Úgy cselekszünk helyesen, ha folyamatosan számolunk vele. Ha pedig egyben szeretnénk tartani az állandó változtatások miatt inkább szétesni vágyó kódbázisunkat, akkor szükségünk van egy eszközre, egy jó gyakorlatra. Ez pedig nem más, mint a folyamatos refaktorálás.
Kicsit közelebb merészkedve a témához megnéztük, hogy milyen szabályok szerint, mikor érdemes újratervezni a kódot. Amikor harmadjára követnénk el olyan változtatást, amit szebben is lehetne? Mielőtt új funkcionalitást vezetnénk be a rendszerbe? Miután kijavítottunk néhány hibát? A gyakorlott programozó ösztönszerűen tud válaszolni ezekre a kérdésekre. Felmértük, hogy milyen önmérsékletre van szükségünk ahhoz, hogy kis lépésekben tudjunk refaktorálni. Ez azért fontos, mert mindenki csak egy adott bonyolultságú módosítást tud hatékonyan elvégezni. Ha kis lépésekkel kezdünk, akkor rövidebb idő alatt leszünk készen a feladattal, és térképezzük fel a saját határainkat.
Az időnk nagyobb részében azonban azt csináltuk, amit a leginkább szeretünk: kódoltunk. Végigvettük a gyanús szagú kód jellemzőit - ebben segítségünkre volt Martin Fowler könyve. Minden állomásnál megvizsgáltuk, hogy milyen refaktorálási technikák alkalmazhatóak hatékonyan, és ki is próbáltuk azokat. Megismerkedtünk többek között a kód duplikáció, a hosszú függvények és nagyméretű osztályok, a “lusta” (érdemi munkát nem végző) vagy spekulatív kódrészletek ellenszereivel. A “sörétes sebészet” (“shotgun surgery”) fogalma mindörökre beégett a hosszútávú memóriánkba.
A gyakorlásban előre elkészített feladatok segítettek minket, amiket párban, magányosan vagy mások vigyázó szemei előtt oldottunk meg. Összesen 24 technikát vettünk sorra, négy alkalommal, összesen körülbelül 6 órát szánva rájuk. Az egész olyan volt, mint egy kalandos utazás, aminek a végén szívesen bontottunk volna akár pezsgőt is… Persze szigorúan csak munkaidőn kívül.
Tisztában vagyunk azzal, hogy ez után a néhány óra koncentráció után még nem lettünk a téma szakértői. Viszont mindannyian tanultunk valamit, ráadásul úgy, hogy annak a mindennapi munkánkban is gyakorlati jelentősége van. Ez volt a cél… Amit sikeresen elértünk.
“Mission completed.” Vagy inkább, stílusosan: “refactored”.