Ovo se obično radi unit-testovima, koje treba pre refaktoringa pustiti kako bi date rezultate uporedili sa rezultatima nakon refaktoringa. Ovi rezultati se moraju poklapati kako bi bili sigurni da izmena koda, uvedena refaktoringom, nije promenila ponašanje samog programa. Ovo je tzv. red-green-refactor pristup, koji se koristi u TDD, gde se prvo napiše unit test koji ne prolazi (red), zatim se ispravi kod tako da dati unit test prolazi (green), a potom se kreće sa refaktorisanjem koda (refactor).
Ako je u pitanju legacy code koji nema napisane unit testove, onda je problem kako dokazati da refaktorisanje koda neće uticati na promenu ponašanja programa. Ovde stupaju characterization test-ovi, koji se, dakle, koriste kod refaktoringa legacy code-a koji nije pokriven unit test-ovima.
Ovi testovi se pišu na sledeći način:
- Pokrene se program sa određenim input-om
- Sačuva se rezultat, tj. output
- Napiše unit test koji za dati input proverava da li se dobija dati output
- Ovo se ponovi za više input-a
Kada se ovo odradi (i svi testovi prolaze), onda se pristupa refaktorisanju koda. Nakon ovoga se dati, characterization testovi ponovo puštaju i ako prolaze, onda dato refaktorisanje nije izmenilo ponašanje programa. U slučaju da ne prolaze, to znači da je kroz refaktorisanje najverovatnije uveden i bug koji treba ispraviti, kako bi characterization testovi ponovo prolazili i kako bi mogli nastaviti sa refaktorisanjem.
Inače, termin je prvi skovao Michael Feathers u svojoj knjizi Working Effectively with Legacy Code. Evo i definicije sa Wikipedia-e
Inače, termin je prvi skovao Michael Feathers u svojoj knjizi Working Effectively with Legacy Code. Evo i definicije sa Wikipedia-e
In computer programming, a characterization test is a means to describe (characterize) the actual behavior of an existing piece of software, and therefore protect existing behavior of legacy code against unintended changes via automated testing. This term was coined by Michael Feathers. [1]
No comments:
Post a Comment