Refaktorisanje koda

Процес реструктурирања постојећег рачунарског кода

Refaktorisanje koda je proces restrukturiranja postojećeg računarskog koda - promjena kompozicije - bez promjene njegovog spoljašnjeg ponašanja. Refaktorisanje je namijenjeno poboljšanju nefunkcionalnih atributa softvera. Prednosti uključuju poboljšanu čitljivost koda i smanjenu složenost; ovo može olakšati održavanje izvornog koda i stvoriti ekspresivniju unutrašnju arhitekturu ili objektni model da bi se poboljšala proširivost.

Tipično, refaktorisanje primjenjuje niz standardizovanih osnovnih mikrorefaktorisanja, od kojih je svako mikrorefaktorisanje (obično) sitna promjena u izvornom kodu računarskog programa koja ili čuva ponašanje softvera, ili bar ne mijenja njegovu usklađenost sa funkcionalnim zahtjevima. Mnoga razvojna okruženja pružaju automatizovanu podršku za izvođenje mehaničkih aspekata ovih osnovnih refaktorisanja. Ako se dobro odradi, refaktorisanje koda može pomoći programerima da otkriju i isprave skrivene greške ili ranjivosti u sistemu pojednostavljivanjem osnovne logike i uklanjanjem nepotrebnih nivoa složenosti. Ako se loše odradi, može da upropasti spoljašnju funkcionalnost ili uvede nove greške.

Motivacija uredi

Refaktorisanje je obično motivisano primjećivanjem kodnog smrada (karakteristika koda koji vjerovatno sadrži greške).[1] Na primjer, metoda koja se koristi može biti veoma dugačka, ili može biti približan duplikat druge metode u blizini. Jednom prepoznati, takvi problemi mogu se riješiti refaktorisanjem izvornog koda ili transformacijom u novi oblik koji se ponaša isto kao ranije, ali koji više ne „smrdi”.

Za duge funkcije, može se izdvojiti jedan ili više manjih potprograma; ili za duplirane funkcije, dupliranje se može ukloniti i zamijeniti jednom dijeljenom funkcijom. Neuspjeh u refaktorisanju može rezultirati nagomilavanjem tehničkog duga; s druge strane, refaktorisanje je jedno od osnovnih sredstava za otplatu tehničkog duga.[2]

Testiranje uredi

Prije refaktorisanja, trebalo bi postaviti modularne testove kako bi se osiguralo da se funkcije i dalje ponašaju kako se očekuje.[3] Modularni testovi mogu donijeti stabilnost čak i velikim refaktorisanjima. Zajednička strategija koja omogućava sigurno i atomsko refaktorisanje, koje obuhvata više projekata, je skladištenje svih projekata u jednom spremištu, poznato kao monorepo. [4]

Ako je postavljeno modularno testiranje, refaktorisanje je onda iterativni ciklus izvođenja malih programskih transformacija, a zatim testiranje, da bi se osigurala ispravnost, i onda još jedna mala transformacija. Ako u bilo kojem trenutku test ne uspije, posljednja mala promjena se poništava i ponavlja na drugačiji način. Kroz mnoge male korake program se kreće od mjesta gde je bio do mjesta gdje bi trebalo da bude. Da bi ovaj iterativni proces bio praktičan, testovi moraju da se pokreću veoma brzo ili će programer morati da provedi veliki dio svog vremena čekajući da se testovi izvrše. Zagovornici ekstremnog programiranja i drugog agilnog razvoja softvera opisuju ovu aktivnost kao sastavni dio ciklusa razvoja softvera.

Automatsko refaktorisanje koda uredi

Mnogi uređivači izvornog koda i integrisana razvojna okruženja imaju podršku za automatsko refaktorisanje. Moguće je refaktorisati kod aplikacije i testni kod.[5] Slijedi lista nekoliko ovakvih uređivača ili takozvanih pretraživača za refaktorisanje.

Vidi još uredi

Reference uredi

  1. ^ Fowler, Martin (1999). Refactoring. Improving the Design of Existing Code. Addison-Wesley. str. 63ff. ISBN 978-0-201-48567-7. 
  2. ^ Suryanarayana, Girish (novembar 2014). Refactoring for Software Design Smells. Morgan Kaufmann. str. 258. ISBN 978-0128013977. 
  3. ^ Fowler, Martin (1999). Refactoring : improving the design of existing code. Reading, MA: Addison-Wesley. ISBN 978-0201485677. OCLC 41017370. 
  4. ^ Smart, John Ferguson (2008). Java Power Tools (na jeziku: engleski). "O'Reilly Media, Inc.". str. 301. ISBN 9781491954546. Pristupljeno 26. 7. 2018. 
  5. ^ Xuan, Jifeng; Cornu, Benoit; Martinez, Matias; Baudry, Benoit; Seinturier, Lionel; Monperrus, Martin (2016). „B-Refactoring: Automatic test code refactoring to improve dynamic analysis”. Information and Software Technology. 76: 65—80. doi:10.1016/j.infsof.2016.04.016. 
  6. ^ What's new in Xcode 9

Dodatna literatura uredi

Spoljašnje veze uredi