Кодты қайта өңдеу - Code refactoring

Жылы компьютерлік бағдарламалау және бағдарламалық жасақтама, кодты қайта өңдеу қолданыстағы қайта құру процесі болып табылады компьютер коды - өзгерту факторинг - оның сыртқы мінез-құлқын өзгертпестен. Қайта өңдеу дизайнды, құрылымды және / немесе іске асыруды жақсартуға арналған бағдарламалық жасақтама (оның функционалды емес қасиеттерін сақтай отырып) функционалдылық. Қайта өңдеудің әлеуетті артықшылықтары жақсартылған кодты қамтуы мүмкін оқылым және төмендетілді күрделілік; жақсартуға болады бастапқы код'с қызмет ету мүмкіндігі және неғұрлым қарапайым, неғұрлым таза немесе мәнерлі жасау сәулет немесе объект моделі жақсарту кеңейту. Қайта өңдеудің тағы бір ықтимал мақсаты - өнімділікті жақсарту; бағдарламалық жасақтама инженерлері тезірек орындайтын немесе аз жадты қолданатын бағдарламалар жазу үшін үнемі қиындыққа тап болады.

Әдетте, рефакторинг стандартталған базалық серияларды қолданады микроқайта өңдеу, олардың әрқайсысы (әдетте) бағдарламалық жасақтаманың мінез-құлқын сақтайтын немесе кем дегенде оның функционалдық талаптарға сәйкестігін өзгертпейтін компьютерлік бағдарламаның бастапқы кодындағы кішігірім өзгеріс. Көптеген даму орталары осы негізгі қайта өңдеудің механикалық аспектілерін орындау үшін автоматтандырылған қолдау көрсету. Жақсы орындалса, кодты қайта өңдеу бағдарламалық жасақтама жасаушыларға жасырын немесе ұйықтап жатқан жағдайларды анықтауға және түзетуге көмектеседі қателер немесе осалдықтар жүйеде негізгі логиканы жеңілдету және қажетсіз күрделілік деңгейлерін жою арқылы. Егер нашар орындалса, сыртқы функционалдылықты өзгерту, жаңа қателіктер немесе екеуін де енгізу талаптары орындалмауы мүмкін.

Кодтың дизайнын үнемі жетілдіре отырып, біз онымен жұмыс істеуді жеңілдетеміз. Бұл әдеттегідей болып жатқан жағдайдан күрт айырмашылығы бар: қайта өңдеудің аздығы және жаңа функцияларды мақсатты түрде қосуға көп көңіл бөлінеді. Егер сіз үнемі қайта өңдейтін гигиеналық әдеттерге ие болсаңыз, онда сіз кодты ұзарту және сақтау оңайырақ болатынын білесіз.

— Джошуа Кериевский, Үлгілерге қайта өңдеу[1]

Мотивация

Рефакторинг, әдетте, а код иісі.[2] Мысалы, қолда бар әдіс өте ұзақ немесе жақын болуы мүмкін көшірме жақын жердегі басқа әдіс. Танылғаннан кейін мұндай проблемаларды шешуге болады қайта өңдеу бастапқы код немесе оны бұрынғыға ұқсас, бірақ енді «иіс шығармайтын» жаңа түрге айналдыру.

Ұзақ уақыт режимінде бір немесе бірнеше кіші бағдарламаларды шығаруға болады; немесе қайталанатын процедуралар үшін қайталануды алып тастауға және оны бір ортақ функцияға ауыстыруға болады. Қайта өңдеуді орындамау жинақталуға әкелуі мүмкін техникалық қарыз; екінші жағынан, қайта өңдеу - техникалық қарызды төлеудің негізгі құралдарының бірі.[3]

Артықшылықтары

Рефакторингтің пайдасының екі жалпы санаты бар.

  1. Қолдау мүмкіндігі. Қателерді түзету оңай, себебі бастапқы кодты оқуға оңай және оның авторының ниетін түсінуге болады.[4] Бұған үлкен монолитті процедураларды жеке қысқаша, белгілі, бір мақсатты әдістер жиынтығына қысқарту арқылы қол жеткізуге болады. Оған әдісті неғұрлым сәйкес сыныпқа ауыстыру немесе жаңылыстыратын пікірлерді жою арқылы қол жеткізуге болады.
  2. Кеңейту. Қолданбаның мүмкіндіктерін кеңейту оңай, егер ол танылатынды қолданса дизайн үлгілері және бұл бұрын-соңды болмаған болуы мүмкін икемділікті қамтамасыз етеді.[1]

Өнімділік инженері бағдарламалық жасақтама дамуының дәстүрлі стратегияларынан туындайтын бағдарламалардағы тиімсіздікті жоя алады, ол жұмыс істеуге кететін уақытты емес, қолданбаны әзірлеу уақытын барынша азайтуға бағытталған. Өнімділік инженері, мысалы, параллельді процессорлар мен векторлық блоктардың артықшылықтарын пайдалану үшін бағдарламалық жасақтаманы өзі жұмыс істейтін аппараттық құралдарға сәйкес келтіре алады.[5]

Қиындықтар

Қайта өңдеу үшін қолданыстағы бағдарламалық жасақтама жүйесі туралы білім алу үшін бағдарламалық жасақтама құрылымын, деректер модельдерін және қолданбалы тәуелділіктерді бөліп алу қажет.[6] Топтардың айналымы жүйенің қазіргі жағдайы туралы және кетіп бара жатқан әзірлеушілер қабылдаған жобалық шешімдер туралы жетіспейтін немесе дұрыс емес білімді білдіреді. Кодты қайта өңдеу бойынша келесі іс-шаралар осы білімді қалпына келтіру үшін қосымша күш қажет етуі мүмкін.[7] Қайта өңдеу жұмыстары бағдарламалық жасақтаманың құрылымдық архитектурасын нашарлататын сәулеттік модификацияларды тудырады. Мұндай нашарлау архитектуралық қасиеттерге әсер етеді, мысалы, сақталу және түсініктілік, бұл бағдарламалық жасақтаманың толық қайта дамуына әкелуі мүмкін. [8]

Кодты қайта өңдеу қызметі қамтамасыз етілген бағдарламалық қамтамасыз ету кодты орындау алгоритмдері мен дәйектілігі туралы мәліметтер беретін құралдар мен техниканы пайдалану кезінде.[9] Бағдарламалық қамтамасыз ету жүйесі құрылымының ішкі күйіне, деректер модельдеріне және компоненттер ішілік тәуелділікке түсінікті форматты ұсыну - жоғары деңгейлі түсінікті қалыптастырудың, содан кейін нені және қалай өзгерту керектігін нақтыланған көзқарасты қалыптастырудың маңызды элементі.[10]

Тестілеу

Автоматты бірлік сынақтары процедуралар әлі де күткендей жұмыс істеуін қамтамасыз ету үшін қайта өңдеуге дейін орнатылуы керек.[11] Сынақ бірлігімен орындалған кезде үлкен реакторларға тұрақтылық әкелуі мүмкін атомдық міндеттеме. Бірнеше жобаны қамтитын қауіпсіз және атомдық рефакторларға мүмкіндік беретін жалпы стратегия - бұл барлық жобаларды біртұтас сақтау репозиторий ретінде белгілі монорепо.[12]

Бірлік сынағы болған кезде, рефакторинг - бұл кішігірім жасаудың қайталанатын циклі бағдарламаны түрлендіру, дұрыстығын қамтамасыз ету үшін оны сынау және тағы бір кішігірім түрлендіру. Егер кез-келген сәтте сынақ сәтсіз болса, соңғы кішігірім өзгертулер жойылып, басқаша түрде қайталанады. Көптеген кішігірім қадамдар арқылы бағдарлама сіз қалаған жерге ауысады. Бұл өте қайталанатын процесс практикалық болуы үшін тестілер өте тез өтуі керек, әйтпесе бағдарламашы тестілердің аяқталуын күтуге уақытының көп бөлігін жұмсауы керек. Жақтаушылары экстремалды бағдарламалау және басқа да жылдам бағдарламалық қамтамасыздандыру бұл қызметті ажырамас бөлігі ретінде сипаттаңыз бағдарламалық жасақтама жасау циклі.

Техника

Міне, микроқайта өңдеудің бірнеше мысалдары; олардың кейбіреулері тек белгілі бір тілдерге немесе тіл түрлеріне қатысты болуы мүмкін. Ұзынырақ тізімді мына жерден табуға болады Мартин Фаулер рефакторинг кітабы[2][бет қажет ] және веб-сайт.[13] Көптеген даму орталары осы микроқайта өңдеу үшін автоматтандырылған қолдау көрсетеді. Мысалы, бағдарламашы айнымалы атауын нұқып, содан кейін «Инкапсуляция өрісін» қайта өңдеуден таңдай алады. контекстік мәзір. Одан кейін IDE қосымша егжей-тегжейлерді сұрайды, әдеттегі әдепкі параметрлермен және кодтың өзгеруін алдын-ала қарау. Бағдарламалаушы растағаннан кейін ол бүкіл код бойынша қажетті өзгертулер енгізеді.

  • Қосымша мүмкіндік беретін әдістер түсіну
  • Қосымша мүмкіндік беретін әдістер абстракция
    • Инкапсулят өрісі - getter және setter әдістерімен өріске қатынасу үшін кодты мәжбүрлеу
    • Жалпы түр - кодты көбірек бөлуге мүмкіндік беретін жалпы типтерді құру
    • Тексеру кодын күймен / стратегиямен ауыстырыңыз[16]
    • Шартты -мен ауыстырыңыз полиморфизм [17]
  • Кодты логикалық бөліктерге бөлу әдістері
    • Компоненттеу кодты бірнеше рет пайдаланылатын мағыналық бірліктерге бөледі, олар анық, анықталған, қолданылуы қарапайым интерфейстерді ұсынады.
    • Шығару сыныбы кодтың бір бөлігін бар класстан жаңа сыныпқа ауыстырады.
    • Сығынды әдісі, бөліктің үлкенін айналдыру әдіс жаңа әдіске. Кодты кішкене бөліктерге бөлу арқылы оңай түсінуге болады. Бұл сондай-ақ қатысты функциялары.
  • Кодтың атауы мен орналасуын жақсарту әдістері
  • Автоматты клонды анықтау[18]

Аппараттық жабдықты қайта өңдеу

Термин қайта өңдеу бастапқыда тек соңғы кезде кодпен жазылған бағдарламалық жасақтама кодын қайта өңдеуге қатысты жабдықты сипаттау тілдері (HDL) қайта қалпына келтірілді. Термин жабдықты қайта өңдеу аппараттық сипаттама тілдерінде кодты қайта өңдеуге арналған стенографиялық термин ретінде қолданылады. HDL деп есептелмегендіктен бағдарламалау тілдері көптеген инженерлер,[19] жабдықты қайта өңдеу дәстүрлі кодты қайта өңдеуден бөлек өріс ретінде қарастырылуы керек.

Аналогты аппараттық сипаттамаларды автоматты түрде қайта өңдеу (д.) VHDL-AMS ) Ценг пен Гус ұсынған.[20] Олардың көзқарасы бойынша рефакторинг аппараттық дизайнның имитацияланған әрекетін сақтайды. Жақсаратын функционалды емес өлшем - рефакторланған кодты стандартты синтездеу құралдары өңдей алады, ал бастапқы кодты жасай алмайды. Сондай-ақ, цифрлық HDL-ді қолмен қайта өңдеуге қатысты рефакторинг зерттелген Синопсия жолдас Майк Китинг.[21][22] Оның мақсаты күрделі жүйелерді түсінуді жеңілдету, бұл дизайнерлердің өнімділігін арттырады.

Тарих

Қайта өңдеу коды бірнеше онжылдықтар бойы бейресми түрде жасалса да, Уильям Грисволд 1991 ж. Ph.D. диссертация[23] - функционалдық және процедуралық бағдарламаларды қайта өңдеу бойынша алғашқы академиялық жұмыстардың бірі, содан кейін Уильям Опдык 1992 жылғы диссертация[24] объектіге бағытталған бағдарламаларды қайта өңдеу туралы,[25] дегенмен, барлық теория мен техника бұрыннан қол жетімді болды бағдарламаны түрлендіру жүйелер. Осы ресурстардың барлығы қайта өңдеудің кең таралған әдістерінің каталогын ұсынады; рефакторинг әдісі қолдану әдісін сипаттайды әдіс және әдісті қолдану қажет (немесе қажет емес) көрсеткіштер.

Мартин Фаулер кітабы Қайта өңдеу: қолданыстағы кодтың дизайнын жақсарту[2] канондық сілтеме болып табылады.[кімге сәйкес? ]

Жарияланған әдебиеттерде «рефакторинг» терминінің алғашқы белгілі қолданылуы 1990 ж. Қыркүйек айындағы мақаласында болды Уильям Опдык және Ральф Джонсон.[26] Грисволдтың Ph.D. тезис,[23] Опдыкенің Ph.D. тезис,[24] 1992 жылы шыққан, осы терминді де қолданған.[25]

«Факторинг» және «факторинг» терминдері осылай қолданылған Төртінші қоғамдастық, кем дегенде, 1980 жылдардың басынан бастап. Алтыншы тарау Лео Броди кітабы Ойлану (1984)[27] тақырыбына арналған.

Экстремалды бағдарламалау кезінде Extract Method рефакторинг техникасы, негізінен, Форттағы факторинг сияқты мағынаны білдіреді; «сөзді» бұзу (немесе) функциясы ) кішігірім, оңай сақталатын функцияларға.

Қайта өңдеуді де қалпына келтіруге болады[28] CVS немесе SVN сияқты бағдарламалық қамтамасыз ету репозиторийлерінде жазылған бағдарламалық жасақтаманың күрделі өзгерістерінің қысқаша сипаттамаларын жасау үшін posthoc.

Автоматтандырылған кодты қайта өңдеу

Көптеген бағдарламалық жасақтама редакторлар және IDE автоматтандырылған қайта өңдеу қолдауына ие. Бағдарлама кодын, сонымен қатар тест кодын қайта өңдеуге болады.[29] Міне, осы редакторлардың бірнешеуінің тізімі немесе солай аталған браузерлерді қайта өңдеу.

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ а б Кериевский, Джошуа (2004). Үлгілерге қайта өңдеу. Аддисон Уэсли.
  2. ^ а б c Фаулер, Мартин (1999). Қайта өңдеу. Қолданыстағы кодтың дизайнын жетілдіру. Аддисон-Уэсли. бет.63ff. ISBN  978-0-201-48567-7.
  3. ^ Сурянараяна, Гириш (қараша 2014). Бағдарламалық жасақтама иістеріне арналған қайта өңдеу. Морган Кауфман. б. 258. ISBN  978-0128013977.
  4. ^ Мартин, Роберт (2009). Таза код. Prentice Hall.
  5. ^ Лейзерсон, Чарльз Е .; Томпсон, Нил С.; Эмер, Джоэл С .; Кушмаул, Брэдли С .; Лэмпсон, Батлер В .; Санчес, Даниел; Шардл, Дао Б. (2020). «Жоғарыда орын жеткілікті: Мур заңынан кейін компьютердің жұмысына не әсер етеді?». Ғылым. 368 (6495): eaam9744. дои:10.1126 / science.aam9744. PMID  32499413.
  6. ^ Хендлер, Торстен; Нейман, Густаф (2019). «Бағдарламалық жасақтаманы қайта өңдеу құзыреттілігін бағалау және оқыту шеңбері». Proc. Білімді басқару және ақпараттық жүйелер бойынша 11-ші Халықаралық конференцияның (KMIS).: 307–316. дои:10.5220/0008350803070316. ISBN  978-989-758-382-7. S2CID  204754665.
  7. ^ Насиф, Матье; Robillard, Martin P. (қараша 2017). «Бағдарламалық жасақтама жобаларындағы айналымнан туындаған білімнің жоғалуын қайта қарау». Бағдарламалық қамтамасыз етуді және эволюцияны қолдау бойынша IEEE 2017 Халықаралық конференциясы (ICSME): 261–272. дои:10.1109 / ICSME.2017.64. ISBN  978-1-5386-0992-7. S2CID  13147063.
  8. ^ ван Гурп, Джилес; Бош, қаңтар (наурыз 2002). «Дизайн эрозиясы: проблемалары мен себептері». Жүйелер және бағдарламалық қамтамасыз ету журналы. 61 (2): 105–119. дои:10.1016 / S0164-1212 (01) 00152-2.
  9. ^ Хасан, Ахмед Е .; Xie, Tao (қараша 2010). «Бағдарламалық жасақтама: тау-кен бағдарламалық жасақтамасының болашақ инженері». Бағдарламалық жасақтаманы зерттеудің болашағы туралы FSE / SDP семинарының материалында (FoSER '10): 161–166. дои:10.1145/1882362.1882397. S2CID  3485526.
  10. ^ Новаис, Ренато; Сантос, Хосе Амансио; Мендонча, Маноэль (2017). «Бағдарламалық жасақтаманың эволюциясын талдау үшін визуалдаудың көптеген стратегияларының тіркесімін эксперименттік бағалау». Жүйелер және бағдарламалық қамтамасыз ету журналы. 128: 56–71. дои:10.1016 / j.jss.2017.03.006.
  11. ^ 1963-, Фаулер, Мартин (1999). Қайта өңдеу: қолданыстағы кодтың дизайнын жақсарту. Рединг, MA: Аддисон-Уэсли. ISBN  978-0201485677. OCLC  41017370.CS1 maint: сандық атаулар: авторлар тізімі (сілтеме)
  12. ^ Ақылды, Джон Фергюсон (2008). Java электр құралдары. «O'Reilly Media, Inc.». б. 301. ISBN  9781491954546. Алынған 26 шілде 2018.
  13. ^ а б (бірақ бұл тек OOP туралы).Фаулердің рефакторлық веб-сайтындағы рефакоринг техникасы
  14. ^ Ферранте, Жанна; Оттенштейн, Карл Дж .; Уоррен, Джо Д. (шілде 1987). «Бағдарламаға тәуелділік графигі және оны оңтайландыруда қолдану». Бағдарламалау тілдері мен жүйелері бойынша ACM транзакциялары. ACM. 9 (3): 319–349. дои:10.1145/24039.24041. S2CID  505075.
  15. ^ Донглин, Линаг; Harrold, J. J. (қараша 2008). «Жүйеге тәуелділік графиктерін пайдаланып объектілерді кесу». Іс жүргізу. Бағдарламалық қамтамасыздандыруға арналған халықаралық конференция. IEEE: 319–349. дои:10.1109 / ICSM.1998.738527. ISBN  978-0-8186-8779-2. S2CID  18160599.
  16. ^ Тексеру кодын Мемлекет / Стратегиямен ауыстырыңыз
  17. ^ Шартты полиморфизммен ауыстырыңыз
  18. ^ Брунтинк, Магиел және т.б. «Қиындықтарды қиып алу үшін клонды анықтау әдістерін бағалау. «Бағдарламалық жасақтамаға қызмет көрсету, 2004. Жинақ. IEEE 20 Халықаралық конференциясы. IEEE, 2004 ж.
  19. ^ Аппараттық сипаттама тілдері # HDL және бағдарламалау тілдері
  20. ^ Кайпинг Ценг, Сорин А. Гусс, «VHDL-AMS мінез-құлық модельдерінің кодын қайта өңдеу арқылы сәулетті нақтылау». ISCAS 2006
  21. ^ М. Кийтинг: «Кешенділік, абстракция және күрделі жүйелерді жобалаудағы қиындықтар», DAC'08 оқулығында [1] «Тексерудің аралықтарын жою: тәжірибелік дизайн үшін RTL-ге C ++»
  22. ^ М.Китинг, П.Брико: Чиптегі дизайн бойынша әдістемелік нұсқаулықты қайта қолданыңыз, Kluwer Academic Publishers, 1999.
  23. ^ а б Грисволд, Уильям Дж (Шілде 1991). Бағдарламалық қамтамасыздандыруға көмек ретінде бағдарламаны қайта құру (PDF) (Кандидаттық диссертация). Вашингтон университеті. Алынған 2011-12-24.
  24. ^ а б Опдыке, Уильям Ф. (Маусым 1992). Нысанға бағытталған рамаларды қайта өңдеу (Кандидаттық диссертация). Урбан-Шампейндегі Иллинойс университеті. Архивтелген түпнұсқа (қысылған Postscript) 2019-12-16. Алынған 2008-02-12.
  25. ^ а б Мартин Фаулер, «MF Bliki: рефакторингтің этимологиясы»
  26. ^ Опдыке, Уильям Ф.; Джонсон, Ральф Э. (қыркүйек 1990). «Рефакторинг: қолданбалы құрылымдар мен дамып келе жатқан нысанға бағытталған жүйелерді жобалауға көмек». Практикалық қосымшаларға баса назар аударатын объектіге бағытталған бағдарламалау бойынша симпозиум материалдары (SOOPPA). ACM.
  27. ^ Brodie, Leo (2004). Ойлану. 171–196 бб. ISBN  0-9764587-0-5. Архивтелген түпнұсқа 2005 жылғы 16 желтоқсанда. Алынған 3 мамыр 2020.
  28. ^ Вейсгербер, Петр; Diehl, S. (2006). «Дереккөз кодының өзгеруінен қайта өңдеуді анықтау» (PDF). Автоматтандырылған бағдарламалық жасақтама жасау бойынша 21-IEEE / ACM халықаралық конференциясының материалдары (ASE 2006). ACM.
  29. ^ Сюань, Цзифен; Корну, Бенуа; Мартинес, Матиас; Бодри, Бенуа; Сентюрье, Лионель; Монперрус, Мартин (2016). «B-Refactoring: динамикалық анализді жақсарту үшін автоматты тесттік кодты қайта өңдеу». Ақпараттық және бағдарламалық технологиялар. 76: 65–80. дои:10.1016 / j.infsof.2016.04.016.
  30. ^ Xcode 9-да қандай жаңалықтар бар
  31. ^ Qt Creator-да рефакторинг

Әрі қарай оқу

Сыртқы сілтемелер