Рефакторисање кода
Рефакторисање кода је процес реструктурирања постојећег рачунарског кода - промјена композиције - без промјене његовог спољашњег понашања. Рефакторисање је намијењено побољшању нефункционалних атрибута софтвера. Предности укључују побољшану читљивост кода и смањену сложеност; ово може олакшати одржавање изворног кода и створити експресивнију унутрашњу архитектуру или објектни модел да би се побољшала проширивост.
Типично, рефакторисање примјењује низ стандардизованих основних микрорефакторисања, од којих је свако микрорефакторисање (обично) ситна промјена у изворном коду рачунарског програма која или чува понашање софтвера, или бар не мијења његову усклађеност са функционалним захтјевима. Многа развојна окружења пружају аутоматизовану подршку за извођење механичких аспеката ових основних рефакторисања. Ако се добро одради, рефакторисање кода може помоћи програмерима да открију и исправе скривене грешке или рањивости у систему поједностављивањем основне логике и уклањањем непотребних нивоа сложености. Ако се лоше одради, може да упропасти спољашњу функционалност или уведе нове грешке.
Мотивација
уредиРефакторисање је обично мотивисано примјећивањем кодног смрада (карактеристика кода који вјероватно садржи грешке).[1] На примјер, метода која се користи може бити веома дугачка, или може бити приближан дупликат друге методе у близини. Једном препознати, такви проблеми могу се ријешити рефакторисањем изворног кода или трансформацијом у нови облик који се понаша исто као раније, али који више не „смрди”.
За дуге функције, може се издвојити један или више мањих потпрограма; или за дуплиране функције, дуплирање се може уклонити и замијенити једном дијељеном функцијом. Неуспјех у рефакторисању може резултирати нагомилавањем техничког дуга; с друге стране, рефакторисање је једно од основних средстава за отплату техничког дуга.[2]
Тестирање
уредиПрије рефакторисања, требало би поставити модуларне тестове како би се осигурало да се функције и даље понашају како се очекује.[3] Модуларни тестови могу донијети стабилност чак и великим рефакторисањима. Заједничка стратегија која омогућава сигурно и атомско рефакторисање, које обухвата више пројеката, је складиштење свих пројеката у једном спремишту, познато као монорепо. [4]
Ако је постављено модуларно тестирање, рефакторисање је онда итеративни циклус извођења малих програмских трансформација, а затим тестирање, да би се осигурала исправност, и онда још једна мала трансформација. Ако у било којем тренутку тест не успије, посљедња мала промјена се поништава и понавља на другачији начин. Кроз многе мале кораке програм се креће од мјеста где је био до мјеста гдје би требало да буде. Да би овај итеративни процес био практичан, тестови морају да се покрећу веома брзо или ће програмер морати да проведи велики дио свог времена чекајући да се тестови изврше. Заговорници екстремног програмирања и другог агилног развоја софтвера описују ову активност као саставни дио циклуса развоја софтвера.
Аутоматско рефакторисање кода
уредиМноги уређивачи изворног кода и интегрисана развојна окружења имају подршку за аутоматско рефакторисање. Могуће је рефакторисати код апликације и тестни код.[5] Слиједи листа неколико оваквих уређивача или такозваних претраживача за рефакторисање.
- DMS Software Reengineering Toolkit (велика рефакторисања за C, C++, C#, Кобол, Јаву, PHP и друге језике)
- Базирани на Eclipse-у:
- Embarcadero Delphi
- Базирани на Intellij-у:
- AppCode (за Objective-C, C и C++)
- Intellij IDEA (за Јаву)
- PyCharm (за Пајтон)
- WebStorm (за Јаваскрипт)
- Android Studio (за Јаву)
- JDeveloper (за Јаву)
- NetBeans (за Јаву)
- Smalltalk : Већина дијалеката укључује снажне алате за рефакторисање. Многи користе оригинални прегледач за рефакторисање, које је почетком 90-их направио Ралф Џонсон.
- Базирани на Visual Studio-у:
- Visual Studio (за .NET и C++)
- CodeRush (додатак за Visual Studio)
- Visual Assist (додатак за Visual Studio са подршком за рефакторисање за C# и C++)
- Wing IDE (за Пајтон)
- Xcode (за C, Objective-C и Свифт)[6]
Види још
уредиРеференце
уреди- ^ Fowler, Martin (1999). Refactoring. Improving the Design of Existing Code. Addison-Wesley. стр. 63ff. ISBN 978-0-201-48567-7.
- ^ Suryanarayana, Girish (новембар 2014). Refactoring for Software Design Smells. Morgan Kaufmann. стр. 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 (на језику: енглески). "O'Reilly Media, Inc.". стр. 301. ISBN 9781491954546. Приступљено 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
Додатна литература
уреди- 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.
Спољашње везе
уреди- What Is Refactoring? (c2.com article)
- Martin Fowler's homepage about refactoring
- Рефакторисање кода на сајту Curlie (језик: енглески)