Sunday, 18 May 2014

Refactoring

Definicija refaktoringa

Ovo je definicija po Martin Fowler-u:
A change made to internal structure of software to make it:
  • easier to understand and
  • cheaper to modify
without changing its observable behaviour

Zašto treba refaktorisati

  • poboljšava dizajn
  • poboljšava čitljivost koda
  • otkriva bug-ove
  • pomaže da se ubrza razvoj
Refaktoring predstavlja neku vrstu održavanja higijene koda. Ako se kod zapusti, urušava se njegov dizajn i interna struktura. Ovo dovodi do otežanog održavanja koda, pravljenja bug-ova, dupliciranja koda, usporenog razvoja itd.

Kada treba i kada ne treba refaktorisati

Treba refaktorisati kada se prati TDD metodologija razvoja softvera (red-green-refactor). Takođe, ako se vodimo tzv. Pain Driven Development-u, treba refaktorisati ako je teško praviti izmene, rešiti bug, održavati kod ili dodavati novu funkcionalnost.
Ne treba refaktorisati ako je sistem toliko zapušten da je izvodljivije napisati aplikaciju ispočetka nego upustiti se u refaktorisanje. Takođe, ne treba (još uvek) refaktorisati ako trenutni kod ne radi. Pre refaktorisanja, potrebno je obezbediti da trenutni kod radi (isti princip kao kod TDD i red-green-refactor), pošto ne postoji mogućnost da se verifikuje da refaktorisanje nije unelo loše izmene i da se program ponaša isto kao i pre refaktorisanja.

Principi i proces refaktorisanja

Principi kojima treba težiti u toku refaktorisanja su sledeći:
  • Keep it simple (avoid trying to be clever, avoid to much complexity)
  • Keep it DRY (avoid duplication)
  • Make it expressive (self-documenting code)
  • Reduce overall code (eliminate code whereever possible, but don't violate readibility)
  • Separate concerns (Single Responsibility Principle)
  • Appropriate level of abstraction
Takođe i ovde treba pratiti Kent Beck-ova pravila jednostavnog dizajna (poređana po prioritetu)
  1. Run all tests
  2. Contain no duplicate code
  3. Express all the ideas the author wants to express
  4. Minimize classes and methods
Alati za refaktorisanje

  • Visual Studio 
  • ReSharper
  • CodeRush
  • Visual Assist X
  • JustCode

No comments:

Post a Comment