Zašto vaša aplikacija treba proljetno čišćenje i par smjernica kako ga napraviti bez da se upucate u nogu
Radan Skorić
Bio jednom jedan
drvosječa koji je došao raditi u tvornicu drva. Uvjeti su bili odlični pa je odlučio dati sve od sebe.
Prvi dan je, sav entuzijastičan, posjekao 18 stabala.
Idućeg je jutra ustao prije
svih i otišao u šumu s ciljem da posječe još više. Unatoč svom naporu nije uspio posjeći više od petnaest stabala. Sigurno
sam umoran, pomislio je. To veče je legao rano ali sutradan nije uspio posjeći niti 10 stabala. Idućeg dana ih je
bilo sedam, onda pet, a posljednjeg je dana čitavo
popodne pokušavao posjeći svoje drugo
stablo. Uznemiren zbog toga što će pomisliti nadglednik, otišao mu je reći
što se događa i kleo se da se trudio do granica iscrpljenosti.
Nadglednik ga je
upitao: “Kad si posljednji put naoštrio svoju
sjekiru?“
„Naoštrio?
Nisam imao vremena
naoštriti je:
bio sam prezauzet sječom stabala.“
Zašto bi uopće refaktorirali?
- Radi poboljšanja performansi
- Radi poboljšanja arhitekture
- Zašto što su originalne pretpostavke zastarile
Banalni primjer: ime klase u kodu ne odgovara stvarnom imenu
Da li je to nešto što uopće treba dirati?
Veličina kratkotrajne memorije?
7 +/- 2 (Millerov zakon)
Stenbergov eksperiment
1. Testovi
- Ako su dobri, super, nastavi dalje
- Podići pokrivenost
- Ako ih nema, odmaknuti se do kraja i dodati samo mnogo Acceptance/Integration testova
- Unit testove dodavati za dijelove koda koje mijenjas
Analiza
- Mapiraj promjene: koristi alat koji najbolje paše (npr. papir i olovka)
- Aktivno traži prirodne točke prekida
Izvedba
- Mir i tišina
- Koncentracija
- Prati plan iz pripreme
- Pazi na "ožiljke" u kodu
Ne zaboravi ručno testiranje
Pomaže u traženju prekida u kodu
Alati za lakše prisilno ubacivanje prekida
- alias_attribute
- Decoratori (gem: draper)
- Proxy, Facade objekti
Kad ne bi trebali refaktorirat
- Loša pokrivenost testovima
- Kod se nije dugo mijenjao i trenutno nema potrebe da ga se mijenja
- Vrlo ste kratki s vremenom
Hvala!
http://www.toptal.com/ruby-on-rails/large-scale-refactoring