Birlik 8 / 12

Refaktoring va texnik qarzlarni boshqarish

Daromadlar:

  • Refaktoringdan oldin joriy xatti-harakatlarni saqlaydigan sinov xavfsizligi tarmog'ini o'rnatish imkoniyati
  • AIdan kichik, bir bosqichli, xatti-harakatlarni saqlaydigan o'zgarishlarni so'rash va har bir qadamni tasdiqlash qobiliyati
  • Biznes kontekstida texnik qarzni aniqlash va ustuvorlik qilish qobiliyati

Refaktoring - bu kodning ichki tuzilishini uning tashqi xatti-harakatlarini o'zgartirmasdan takomillashtirish: uni yanada o'qilishi, soddaligi va texnik xizmat ko'rsatishi. Boshqa tomondan, texnik qarz - bu tezkor yechim uchun qilingan dizayn murosasi va vaqt o'tishi bilan "foiz bilan" qaytariladi - bugun siz kesib tashlagan har bir burchak ertaga sekinlashuv yoki xato sifatida qaytib keladi. Sun'iy intellekt - bu takroriy va mexanik qayta ishlash vazifalarini tezlashtiradigan kuchli yordamchi; Ammo refaktoringning bitta oltin qoidasi bor va faqatgina AI bunga kafolat bera olmaydi: xatti-harakatlar o'zgarmasligi kerak.

Ushbu bo'limda biz sun'iy intellekt yordamida xavfsiz refaktoringni qanday amalga oshirishni o'rganamiz: kichik va qaytariladigan qadamlar, testlar bilan himoya qilish, kod hidlarini aniqlash va texnik qarzlarni ustuvorlashtirish. Muhim nuqta shundaki: AIning so'zi emas, balki o'tgan testlar xatti-harakatlarning saqlanib qolganligini isbotlaydi.

Refaktoringning oltin qoidasi: xulq-atvor doimiy bo'lib qoladi

Refaktoringni xavfli qiladigan narsa - "men yaxshilanmoqdaman" deb o'zi bilmagan holda xatti-harakatni o'zgartirishdir. Shartni soddalashtirganda chekka registrni o'chirish, tsiklni o'zgartirishda tartibni buzish, funktsiyani bo'lishda nojo'ya ta'sirni yo'qotish - barchasi "toza ko'rinadigan", lekin buzilgan kodni ishlab chiqaradi.

Shuning uchun test refaktoring uchun zaruriy shartdir: o'zgartirishdan oldin sizda mavjud xatti-harakatlarni aks ettiruvchi testlar bo'lishi kerak. Ushbu testlar "xavfsizlik tarmog'i" dir; Agar siz refaktoring paytida tasodifan biror narsani buzsangiz, ular sizni buzadi va ogohlantiradi. Agar sizda testlar bo'lmasa, avval mavjud xatti-harakatlarni tuzatuvchi testlarni yozing (biz 5-bo'limda bilib olganimizdek) - bu erda AI tezroq boshlanadi.

E'tibor bering: AI yordamida test tarmog'isiz refaktoring xatolarning eng makkor manbalaridan biridir. “Xulq-atvorni saqlab qoldim” deyish oson; Buning isboti shundaki, o'zgarishdan oldin va keyin bir xil testlar o'tadi.

Bosqichma-bosqich: Xavfsiz qayta ishlash oqimi

  1. Xavfsizlik tarmog'ini o'rnating. Siz qayta tiklaydigan kodning joriy harakatini aks ettiruvchi testlar bo'lsin; Agar yo'q bo'lsa, avval ularni yozing (va ularning o'tishini ko'ring).
  2. Hidga nom bering. Siz nimani yaxshilayapsiz va nima uchun? "Bu funktsiya 3 ta ishni bajaradi", "bir xil mantiq 4 joyda takrorlanadi", "ismlar noto'g'ri".
  3. Kichik, bir qadamli qadamlarni so'rang. AIdan butun faylni qayta yozishni emas, balki bitta o'zgartirishni so'rang (masalan, "bu funktsiyani yarmiga bo'ling").
  4. Sinovlarni bajaring. Har bir qadamdan keyin. Agar u yashil bo'lsa, davom eting, agar qizil bo'lsa, uni qaytarib oling.
  5. Farqni o'qing. O'zgartirish haqiqatan ham xatti-harakatni saqlayotganligini satr bo'yicha tasdiqlang; AI "shunchaki tuzilish" deganda mantiqiy siljish bo'lishi mumkin.
  6. Kichik bo'laklarga birlashtiring. Katta bir martalik refaktoring PRlari ham xavfli, ham ko'rib chiqilmaydi.

Uchta mini korpus

1-holat - 220 qatorli funksiya xavfsiz tarzda ajratilgan. Bitta jamoada 220 qatorli buyurtmani qayta ishlash funksiyasi mavjud edi. Hozirgi xatti-harakatni aks ettiruvchi dastlabki 14 ta test (AI yordami bilan) yozildi, ularning barchasi o'tdi. Keyin funksiya AI tomonidan bosqichma-bosqich 5 ta kichik funktsiyaga bo'lingan; Har bir bosqichdan keyin testlar o'tkazildi. Ikkita sinov bir bosqichda buzildi - AI chekka holatda qaytishni o'tkazib yubordi. Sinovlar buni darhol aniqladi va tuzatdi. Tarmoqsiz xato ishlab chiqarishgacha borishi mumkin edi.

2-holat - sinov tarmog'isiz falokat. Yana bir ishlab chiquvchi AI bilan sinovdan o'tmagan sanani hisoblash modulini "tozaladi". Kod yaxshiroq ko'rinardi, lekin u kabisa yilini noto'g'ri hisoblagan; Xato ikki hafta o'tgach, mijozning shikoyati bilan chiqdi. Yo'qotish refaktoringdan tejalgan vaqtdan ancha ko'p edi. Dars: sinovsiz refaktoring - bu qimor.

3-holat - Texnik qarzning ustuvorligi. Bir jamoa AIga 30 yoki undan ko'p "yaxshilanishi mumkin bo'lgan" ball berdi va har biri "o'zgarish chastotasi × ​​xavf × harakat" o'qi bo'yicha to'pladi. Olingan jadvalda kamdan-kam teginadigan xunuk modul aslida past, tez-tez o'zgarib turadigan o'rtacha murakkablikdagi modul esa yuqori ustuvorlik edi. Jamoa o'z kuchini kerakli joyga yo'naltirdi.

To'rt nusxa ko'chirish shablonlari

Kod hidini aniqlash va ustuvorlik:

Ushbu koddagi refactoring nomzodining "hidlari" ro'yxati: uzoq funksiya, takrorlash (DRYViolation), noto'g'ri nom, chuqur joylashtirilgan holat, yashirin yon effekt, sehrli raqam. Har biri uchun: joylashuv, nima uchun muammo, taklif qilingan kichik qadam, taxmin qilingan xavf (past/o'rta/yuqori). Hali kodni O'ZGARTIRMANG, shunchaki rejalashtiring.{{code}}

Xulq-atvorni saqlaydigan bir bosqichli transformatsiya:

FAQAT buni bajaring: {{bitta konvertatsiya, masalan. Bu funksiyani 3 ta kichik nomli funksiyalarga ajrating}}. Ko'rinadigan xatti-harakatlar, imzo va qaytish qiymatlarini O'ZGARTIRING. Nima uchun siz o‘zgartirgan hamma narsa o‘z xatti-harakatini saqlab qolishini 1 jumla bilan yozing.{{code}}

Refaktordan oldin xavfsizlik tarmog'i (belgilash testi):

Ushbu funktsiyaning HOZIRGI xatti-harakatlarini aks ettiruvchi testlarni yozing (to'g'ri yoki yo'q); Maqsad, refaktoring paytida xatti-harakatlar o'zgarganligini aniqlashdir. Oddiy + chekka yozuvlarni qo'shing. Funksiyaning joriy chiqishi asosida taxminlarni yozing.{{function}}

Texnik qarzlar bo'yicha rekord (orqada qolib ketish) hosil bo'lishi:

Quyidagi hidlar ro'yxatini ustuvorlik jadvaliga kiriting: modda, ta'sirlangan hudud, o'zgarish chastotasi (mening bilimim: {{...}}), xavf, taxminiy harakat, tavsiya etilgan ustuvorlik. Yuqori ta'sir + kam harakatni yuqoriga qo'ying. {{smell_list}}

Zaif taklif / Kuchli taklif

Zaif: "Ushbu kodni tozalang va uni yaxshilang."
Kuchli: "Ushbu 90 qatorli funksiyani tashqi xatti-harakati va imzosini o'zgartirmasdan, bitta mas'uliyat bilan 3 ta kichikroq funksiyaga bo'ling. Yon ta'sirlarni (MB yozadi) joriy tartibda saqlang. Menda testlar bor, xatti-harakatlar bir xil bo'lishi kerak. Farqni ayting va nima uchun har bir bo'linish xatti-harakatni saqlab qolishini bir jumla bilan tushuntiring. [kod] "

Kuchli versiya; Bu yagona o'ziga xos transformatsiyani talab qiladi, xatti-harakatlar va imzo cheklovini aniq belgilaydi va asoslashni talab qiladi. "Yaxshiroq qilish" kabi noaniq so'rovlar nazoratsiz va xavfli o'zgarishlarga olib keladi.

Refaktoring turi

AI ishonchliligi

Old shart

qayta nomlash

yuqori

Qo'llanish doirasi to'g'rimi?

Funktsiya bo'limi

o'rta-yuqori

Testnet kerak

Takrorlashni almashish

o'rta

Xulq-atvor farqi yashirin bo'lishi mumkin

Algoritm/tuzilish o'zgarishi

past

Keng qamrovli sinov + insoniy tekshirish

Arxitekturani qayta tashkil etish

past

Inson tomonidan boshqariladigan, AI tomonidan qo'llab-quvvatlanadi

Texnik qarzni boshqarish, uni qayta tiklash emas

Texnik qarz hammasi yomon emas; Ba'zan ongli ravishda qarz olish (etkazib berishni qondirish uchun) to'g'ri qarordir. Maqsad qarzni yo'q qilish emas, balki uni ko'rinadigan va boshqariladigan qilishdir. Sun'iy intellekt qarzni tezda aniqlaydi va ustuvorlik qiladi, ammo "qaysi qarzni to'lash va qaysi birini tark etish kerak" degan qarorni qabul qilish biznes kontekstini talab qiladi: bu modul qanchalik tez-tez o'zgaradi, u qancha odamga ta'sir qiladi, xavf nima? Ushbu qaror kod bazasini va mahsulotni biladigan jamoa tomonidan qabul qilinadi; AI faqat variantlarni aniqlab beradi.

Maslahat: Refaktoring PRni xulq-atvorni o'zgartirishni o'z ichiga olgan PRlardan ajratib turing. “Ushbu PR shunchaki refaktoring, xatti-harakati bir xil” deb ayta olish tergovni osonlashtiradi va muammo yuzaga kelganda sababni tezda toraytirish imkonini beradi.

Umumiy xatolar

  • Test tarmog'isiz refaktoring. Xulq-atvorning saqlanib qolganligini isbotlash uchun sizga hech narsa qolmaydi.
  • Bu "butun faylni tozalash" degan ma'noni anglatadi. Katta, nazoratsiz o'zgarishlar xatoni yashiradi va tekshirib bo'lmaydi.
  • Farqni o'qimasdan qabul qilish. AI "shunchaki tuzilish" deganda ba'zi bir mantiqdan voz kechgan bo'lishi mumkin.
  • Refaktoringni xulq-atvorni o'zgartirish bilan chalkashtirish. Ikkalasini bir xil PRda qilish ildiz sabablarini kuzatishni imkonsiz qiladi.
  • Har bir hidni tuzatishga harakat qilish. Kamdan kam o'zgarib turadigan xunuk kod ko'pincha past ustuvorlikdir; Tez-tez o'zgarib turadigan joyga energiya ajrating.

Xulosa

Refaktoringning yagona qoidasi shundaki, xatti-harakatlar doimiy bo'lib qoladi va buning isboti sinovlardir. AI kod hidlarini, bir bosqichli o'zgarishlarni aniqlashda va texnik qarzga ustuvorlik berishda kuchli; lekin siz xavfsizlik tarmog'ini o'rnatishingiz, testlarni o'tkazishingiz va har bir qadamdan keyin farqni o'qishingiz kerak. Kichkina, qaytariladigan qadamlar qo'ying; refaktoringni xatti-harakatlarning o'zgarishidan farqlash; va biznes kontekstini biladigan jamoa qaysi qarzni to'lashni hal qilsin.

Ilova vazifasi

Kodlar bazasidan sizga uzoq yoki murakkab ko'rinadigan funksiyani tanlang. Avval "xavfsizlik tarmog'i" shablonining joriy xatti-harakatlarini aks ettiruvchi testlarni chop eting va ularning barchasi o'tishini tekshiring. Keyin funktsiyani "bir bosqichli, xatti-harakatni saqlaydigan o'zgartirish" namunasi bilan bitta usulda (masalan, yarmiga bo'lish) qayta tiklang va testlarni qayta bajaring. Agar test buzilsa, sababini bilib oling; Agar u umuman buzilmasa, xatti-harakat haqiqatan ham saqlanib qolganligini tasdiqlash uchun farqni satr bilan o'qing.

nazorat ro'yxati

  • [ ] Men refaktoring xatti-harakatni o'zgartirmasligi kerakligini bilaman va buni isbotlash uchun testlar mavjud.
  • [ ] Men refaktordan oldin joriy xatti-harakatlarni ushlaydigan xavfsizlik tarmog'ini o'rnatyapman.
  • [ ] Men sun'iy intellektdan katta bir martalik emas, kichik, bir bosqichli o'zgarishlarni xohlayman.
  • [ ] Har bir qadamdan so'ng men testlarni o'tkazaman va farqni o'qiyman.
  • [ ] Men PRni xulq-atvorni o'zgartirish PRidan alohida qayta ishlashni davom ettiraman.
  • [ ] Men ko'r-ko'rona nolga solishga harakat qilmasdan, biznes konteksti bilan texnik qarzni birinchi o'ringa qo'yaman.