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.
- DMS Software Reengineering Toolkit (velika refaktorisanja za C, C++, C#, Kobol, Javu, PHP i druge jezike)
- Bazirani na Eclipse-u:
- Embarcadero Delphi
- Bazirani na Intellij-u:
- AppCode (za Objective-C, C i C++)
- Intellij IDEA (za Javu)
- PyCharm (za Pajton)
- WebStorm (za Javaskript)
- Android Studio (za Javu)
- JDeveloper (za Javu)
- NetBeans (za Javu)
- Smalltalk : Većina dijalekata uključuje snažne alate za refaktorisanje. Mnogi koriste originalni pregledač za refaktorisanje, koje je početkom 90-ih napravio Ralf Džonson.
- Bazirani na Visual Studio-u:
- Visual Studio (za .NET i C++)
- CodeRush (dodatak za Visual Studio)
- Visual Assist (dodatak za Visual Studio sa podrškom za refaktorisanje za C# i C++)
- Wing IDE (za Pajton)
- Xcode (za C, Objective-C i Svift)[6]
Vidi još uredi
Reference uredi
- ^ Fowler, Martin (1999). Refactoring. Improving the Design of Existing Code. Addison-Wesley. str. 63ff. ISBN 978-0-201-48567-7.
- ^ Suryanarayana, Girish (novembar 2014). Refactoring for Software Design Smells. Morgan Kaufmann. str. 258. ISBN 978-0128013977.
- ^ Fowler, Martin (1999). Refactoring : improving the design of existing code. Reading, MA: Addison-Wesley. ISBN 978-0201485677. OCLC 41017370.
- ^ Smart, John Ferguson (2008). Java Power Tools (na jeziku: engleski). "O'Reilly Media, Inc.". str. 301. ISBN 9781491954546. Pristupljeno 26. 7. 2018.
- ^ 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.
- ^ What's new in Xcode 9
Dodatna literatura uredi
- Wake, William C. (2003). Refactoring Workbook. Addison-Wesley. ISBN 978-0-321-10929-3.
- Mens, T.; Tourwe, T. (n.d). „A survey of software refactoring”. IEEE Transactions on Software Engineering. 30 (2): 126—139. ISSN 0098-5589. doi:10.1109/tse.2004.1265817.
- Arsenovski, Danijel (2008). Professional Refactoring in Visual Basic. Wrox. ISBN 978-0-470-17979-6.
- Feathers, Michael C (2004). Working Effectively with Legacy Code. Prentice Hall. ISBN 978-0-13-117705-5.
- Arsenovski, Danijel (2009). Professional Refactoring in C# and ASP.NET. Wrox. ISBN 978-0-470-43452-9.
- Kerievsky, Joshua (2004). Refactoring To Patterns. Addison-Wesley. ISBN 978-0-321-21335-8.
- Ritchie, Peter (2010). Refactoring with Visual Studio 2010. Packt. ISBN 978-1-84968-010-3.
Spoljašnje veze uredi
- What Is Refactoring? (c2.com article)
- Martin Fowler's homepage about refactoring
- Refaktorisanje koda na sajtu Curlie