бирдиги 8 / 12

Рефакторинг жана техникалык карызды башкаруу

Пайдалар:

  • Рефакторингден мурун учурдагы жүрүм-турумду чагылдырган сыноо коопсуздук тармагын орнотуу мүмкүнчүлүгү
  • AIдан кичинекей, бир кадамдуу, жүрүм-турумду сактаган трансформацияларды сурап, ар бир кадамды ырастоо мүмкүнчүлүгү
  • Бизнес контекстинде техникалык карызды аныктоо жана артыкчылыктуу жөндөмдүүлүгү

Рефакторинг – бул коддун тышкы жүрүм-турумун өзгөртпөстөн, анын ички түзүмүн жакшыртуу: аны окула турган, жөнөкөйлөштүрүүчү, тейлөөгө ылайыктуу кылуу. Техникалык карыз, экинчи жагынан, тез чечүү үчүн жасалган жана убакыттын өтүшү менен "пайыз менен" кайтарылган дизайн компромисси - бүгүн кескен ар бир бурчуңуз эртең жайлоо же ката катары кайтып келет. Жасалма интеллект кайталануучу жана механикалык рефакторинг тапшырмаларын тездетүүчү күчтүү жардамчы; Бирок рефакторингдин бир алтын эрежеси бар жана AI гана ага кепилдик бере албайт: жүрүм-турум өзгөрбөшү керек.

Бул бөлүмдө биз AI менен коопсуз рефакторингди кантип жасоону үйрөнөбүз: кичинекей жана кайтарымсыз кадамдар, тесттер менен коргоо, код жыттарын аныктоо жана техникалык карызды артыкчылыктуу. Критикалык жагдай бул: жүрүм-турумдун сакталып калганын AIнын сөзү эмес, өткөн сыноолор далилдейт.

Рефакторингдин алтын эрежеси: жүрүм-турум туруктуу бойдон калууда

Рефакторингди кооптуу кылган нерсе - "мен жакшырып жатам" деп билип туруп жүрүм-турумун өзгөртүү. Шартты жөнөкөйлөштүрүүдө кырдын капталын түшүрүү, циклди трансформациялоодо тартипти бузуу, функцияны бөлүүдө терс эффектти өткөрүп жиберүү - бардыгы "таза көрүнгөн", бирок бузулган кодду жаратат.

Ошондуктан тестирлөө рефакторингдин милдеттүү шарты болуп саналат: өзгөртүүдөн мурун сизде учурдагы жүрүм-турумду чагылдырган тесттер болушу керек. Бул сыноолор "коопсуздук желе" болуп саналат; Рефакторинг учурунда кокустан бир нерсени бузуп алсаңыз, алар бузуп, эскертишет. Эгер сизде тесттер жок болсо, адегенде учурдагы жүрүм-турумду оңдогон тесттерди жазыңыз (5-бөлүмдөн билгенибиздей) — AI секирип баштайт.

Эскертүү: AI жардамы менен тестнетсиз рефакторинг мүчүлүштүктөрдүн эң тымызын булактарынын бири болуп саналат. "Мен жүрүм-турумду сактадым" деп айтуу оңой; Далил ошол эле сыноолор өзгөртүүгө чейин жана кийин өтөт.

Кадам кадам: Коопсуз рефакторинг агымы

  1. Коопсуздук тармагын орнотуңуз. Сиз рефактор кыла турган коддун учурдагы жүрүм-турумун чагылдырган тесттер болсун; Болбосо, адегенде аларды жазыңыз (жана алардын өтүп кеткенин көрүңүз).
  2. Жытты атаңыз. Эмнени жакшыртып жатасыз жана эмне үчүн? "Бул функция 3 нерсени аткарат", "бир эле логика 4 жерде кайталанат", "аты-жөнү адаштырып жатат".
  3. Кичинекей, бир кадамдуу кадамдарды сураныңыз. Бүткүл файлды кайра жазууну эмес, AIдан бир трансформацияны сураңыз (мисалы, жөн гана "бул функцияны экиге бөлүңүз").
  4. Тесттерди аткарыңыз. Ар бир кадамдан кийин. Эгер жашыл болсо, улантыңыз, кызыл болсо кайра алыңыз.
  5. Окуу Дифф. Өзгөртүү чындап эле жүрүм-турумду сактап калганын саптан сапка ырастаңыз; AI "жөн эле структура" деп айтканда логикалык тайгак болушу мүмкүн.
  6. кичинекей бөлүктөргө бириктирүү. Чоң бир жолку рефакторинг PRлары кооптуу да, карап чыгууга да болбойт.

Үч мини Case

1-жагдай — 220 саптык функция коопсуз бөлүнгөн. Бир командада 220 саптан турган заказды иштетүү функциясы бар болчу. Алгачкы 14 тест (AI жардамы менен) жазылган, алар учурдагы жүрүм-турумду чагылдырып, бардыгы өтүп кетишкен. Андан кийин функция AI тарабынан кадам сайын 5 кичине функцияга бөлүнгөн; Ар бир кадамдан кийин тесттер жүргүзүлдү. Бир кадамда эки тест сындырылды - AI бир четинде кайтарууну өткөрүп жиберди. Тесттер муну дароо кармап, оңдоп койду. Тармак болбосо, ката өндүрүшкө чейин барышы мүмкүн.

2-жагдай - Тести жок кырсык. Дагы бир иштеп чыгуучу AI менен эч кандай сыноолор болбогон күндү эсептөө модулун "тазалады". Код жакшыраак көрүндү, бирок ал кибирек жылды туура эмес эсептеп жаткан; Мүчүлүштүк эки жумадан кийин кардардын арызы менен чыкты. Жоготуу рефакторингден үнөмдөлгөн убакыттан алда канча көп. Сабак: тестирлөөсүз рефакторинг - бул кумар оюну.

3-жагдай – Техникалык карыздын артыкчылыктуулугу. Бир команда AIга 30 же андан да көп "жакшыртуучу" упай берди жана ар бири "өзгөртүү жыштыгы × тобокелдик × аракет" огунда упай топтоду. Натыйжадагы таблицада сейрек тийген көрксүз модул чындыгында төмөнкү артыкчылыктуу, ал эми тез-тез өзгөрүп турган орто татаалдыктагы модуль жогорку артыкчылыктуу болгон. Коллектив езунун кучун туура жерге багыттады.

Көчүрмө төрт шаблон

Код жытын аныктоо жана артыкчылыктуу:

Бул коддогу рефакторингге талапкердин "жыттарын" тизмектеңиз: узун функция, кайталоо (DRYViolation), адаштыруучу ат, терең уяланган абал, жашыруун терс эффект, сыйкырдуу сан. Ар бири үчүн: жайгашкан жери, эмне үчүн көйгөй, сунушталган кичинекей кадам, болжолдуу тобокелдик (төмөн/орто/жогорку). Азырынча кодду ӨЗГӨРТПӨ, жөн гана пландаштырыңыз.{{code}}

Бир кадам, жүрүм-турумду сактаган трансформация:

Жөн гана муну жасаңыз: {{бир конверсия, мис. Бул функцияны 3 кичине аталган функцияга бөлүңүз}}. Көрүнгөн жүрүм-турумду, кол коюуну жана кайтаруу баалуулуктарын ӨЗГӨРТҮҮ. Эмне үчүн өзгөрткөнүңүздүн баары жүрүм-турумду сактап калганын 1 сүйлөм менен жазыңыз.{{code}}

Рефактор алдындагы коопсуздук тору (мүнөздөө тести):

Бул функциянын УЧУРДА жүрүм-турумун чагылдырган тесттерди жазыңыз (туура же туура эмес); максаты рефакторинг учурунда жүрүм-туруму өзгөргөндүгүн аныктоо. Кадимки + четки жазууларды кошуңуз. Функциянын учурдагы натыйжасынын негизинде күтүүлөрдү жазыңыз.{{функция}}

Техникалык карыздын эсебин түзүү (артта калуу):

Артыкчылык таблицасына жыттардын төмөнкү тизмесин куюңуз: зат, жабыркаган аймак, өзгөрүү жыштыгы (менин билимим: {{...}}), тобокелдик, болжолдуу аракет, сунушталган артыкчылык. Жогорку таасир + аз аракетти эң жогору кой. {{smell_list}}

Алсыз тездик / Күчтүү тездик

Алсыз: "Бул кодду тазалап, аны жакшыртыңыз."
Күчтүү: "Сырткы жүрүм-турумун жана кол тамгасын өзгөртпөстөн, бул 90 саптан турган функцияны бир жоопкерчилик менен 3 кичирек функцияга бөлүңүз. Терс эффекттерди (МБ жазат) учурдагы тартипте сактаңыз. Менде тесттер бар, жүрүм-турум ошол эле бойдон калышы керек. Айырмачылыкты бериңиз жана эмне үчүн ар бир бөлүү жүрүм-турумду сактай турганын бир сүйлөм менен түшүндүрүңүз. [код]"

Күчтүү версия; Ал бир гана спецификалык трансформацияны талап кылат, жүрүм-турумду жана кол коюуну ачык түрдө чектейт жана негиздөөнү талап кылат. "Жакшыраак кыл" сыяктуу бүдөмүк өтүнүчтөр көзөмөлсүз жана кооптуу өзгөрүүлөргө алып келет.

Рефакторинг түрү

AI ишенимдүүлүгү

Шарт

атын өзгөртүү

бийик

Аймак туурабы?

Функция бөлүмү

орто-жогорку

Testnet керек

Кайталоону бөлүшүү

орто

Жүрүм-турум айырмасы жашырылышы мүмкүн

Алгоритмди/структураны өзгөртүү

төмөн

Кеңири тестирлөө + адамдык текшерүү

Архитектуралык кайра түзүү

төмөн

Адам жетектеген, AI колдойт

Техникалык карызды башкаруу эмес, аны калыбына келтирүү

Техникалык карыздын баары жаман эмес; Кээде аң-сезимдүү карыз алуу (жеткирүү үчүн) туура чечим болуп саналат. Максат карызды жоюу эмес, аны көрүнөө жана башкарууга мүмкүн кылуу. AI карызды тез аныктоодо жана артыкчылыктуу, бирок "кайсы карызды төлөө керек жана кайсынысын таштоо керек" деген чечимди кабыл алуу бизнес контекстти талап кылат: бул модул канчалык бат-баттан өзгөрөт, ал канча адамга таасир этет, кандай коркунуч бар? Бул чечим коддук базаны жана продуктуну билген команда тарабынан кабыл алынат; AI жөн гана варианттарды тактайт.

Кеңеш: Рефакторинг PRыңызды жүрүм-турумдун өзгөрүшүн камтыган PRлардан бөлүңүз. "Бул пиар жөн гана рефакторинг, жүрүм-туруму окшош" деп айта алуу иликтөөнү жеңилдетет жана көйгөй жаралса, анын себебин тез эле кыскартууга мүмкүндүк берет.

Жалпы каталар

  • Testnet жок рефакторинг. жүрүм-турум сакталып калганын далилдей турган эч нерсеси жок калды.
  • Бул "файлдын баарын тазалоо" дегенди билдирет. Чоң, көзөмөлсүз өзгөртүүлөр катаны жашырып, текшерүүгө мүмкүн эмес.
  • Айырмачылыкты окубай эле кабыл алуу. AI "жөн эле түзүм" деп айтканда, кандайдыр бир логиканы тайдырган болушу мүмкүн.
  • Рефакторинг менен жүрүм-турумдун өзгөрүшүн чаташтыруу. Бир эле PRда экөөнү тең жасоо түпкү себептерге көз салууну мүмкүн эмес кылат.
  • Ар бир жытын оңдоого аракет кылат. сейрек өзгөргөн көрксүз код көбүнчө төмөн артыкчылыктуу болуп саналат; Энергияны тез-тез алмашып турган жерге бөлүңүз.

Кыскача айтканда

Рефакторингдин бирден-бир эрежеси – жүрүм-турум туруктуу бойдон калууда жана мунун далили – тесттер. AI код жыттарын, бир кадамдык трансформацияларды аныктоодо жана техникалык карызды артыкчылыктуу кылууда күчтүү; бирок сиз коопсуздук тармагын орнотуп, сыноолорду өткөрүп, ар бир кадамдан кийин айырманы окушуңуз керек. Кичинекей, кайра калыбына келүүчү кадамдарды жасоо; рефакторингди жүрүм-турумду өзгөртүүдөн айырмалоо; жана кайсы карызды төлөөнү бизнес контекстти билген команда чечсин.

Колдонмо тапшырмасы

Код базасынан сизге узун же татаал көрүнгөн функцияны тандаңыз. "Коопсуздук торунун" шаблоны менен анын учурдагы жүрүм-турумун чагылдырган биринчи басып чыгаруу сыноолору жана алардын баары өтүп кеткенин көрүңүз. Андан кийин функцияны "бир кадамдуу, жүрүм-турумду сактаган трансформация" үлгүсү менен бир жол менен рефакторациялаңыз (мисалы, экиге бөлүү) жана тесттерди кайра иштетиңиз. Эгер тест бузулса, анын себебин билиңиз; Эгерде ал такыр эле бузулбаса, жүрүм-турум чындап эле сакталып калганын ырастоо үчүн айырманы сап-сап окуп чыгыңыз.

текшерүү тизмеси

  • [ ] Мен рефакторинг жүрүм-турумду өзгөртпөшү керектигин билем жана аны далилдей турган тесттер бар.
  • [ ] Мен рефактордон мурун учурдагы жүрүм-турумду кармаган коопсуздук тармагын орнотуп жатам.
  • [ ] Мен AIдан чоң бир жолку эмес, кичинекей, бир кадамдуу трансформацияларды каалайм.
  • [ ] Ар бир кадамдан кийин мен тесттерди өткөрүп, айырманы окуйм.
  • [ ] Мен PRды жүрүм-турумду өзгөртүү PRынан бөлөк рефакторинг кылам.
  • [ ] Мен техникалык карызды бизнес контексти менен биринчи орунга коём, сокур түрдө нөлгө салууга аракет кылбайм.