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
Sternberg short term memory model

Priprema

1. Testovi

  1. Ako su dobri, super, nastavi dalje
  2. Podići pokrivenost
  3. Ako ih nema, odmaknuti se do kraja i dodati samo mnogo Acceptance/Integration testova
  4. Unit testove dodavati za dijelove koda koje mijenjas

Analiza

  1. Mapiraj promjene: koristi alat koji najbolje paše (npr. papir i olovka)
  2. Aktivno traži prirodne točke prekida

Izvedba

  1. Mir i tišina
  2. Koncentracija
  3. Prati plan iz pripreme
  4. 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

  1. alias_attribute
  2. Decoratori (gem: draper)
  3. Proxy, Facade objekti

Kad ne bi trebali refaktorirat

  1. Loša pokrivenost testovima
  2. Kod se nije dugo mijenjao i trenutno nema potrebe da ga se mijenja
  3. Vrlo ste kratki s vremenom

Hvala!

http://www.toptal.com/ruby-on-rails/large-scale-refactoring QR code for the blog post link