Pelnas:
- Galimybė naudoti dirbtinį intelektą kaip antrą akį peržiūrint kodą, kad būtų lengviau skaitoma, logika ir saugumas
- Galimybė planuoti pertvarkymo veiksmus su AI palaikymu, netrikdant sudėtingo kodo elgesio
- Galimybė patikrinti AI peržiūrą ir redaguoti rekomendacijas naudojant testavimą ir versijų valdymo palyginimą
Programinės įrangos inžinerijoje kodas skaitomas daug daugiau nei rašomas. Kodo eilutė parašyta vieną kartą, tačiau per kelis mėnesius skaitoma, modifikuojama ir kuriama dešimtis kartų. Štai kodėl kodo peržiūra (kieno nors kito ar savo kodo logikos, skaitomumo ir saugumo peržiūra) ir pertvarkymas (kodo struktūros tobulinimas nekeičiant jo elgesio) yra inžinerijos pagrindas. Dirbtinis intelektas tampa galinga „antra akimi“ atliekant šias dvi užduotis: ji greitai siūlo skaitomumą, atkreipia dėmesį į nepastebėtas logikos ir saugumo problemas ir padalija didelį pertvarkymą į mažesnius saugius veiksmus. Tačiau yra kritinė taisyklė: pertvarkymas neturėtų keisti elgesio, o vienintelis dalykas, kuris tai garantuoja, yra testavimas.
Šiame skyriuje pamatysime, kaip struktūrizuotai naudoti AI kodo peržiūrai, kaip pataisyti sudėtingą kodą nepažeidžiant jo elgesio ir kaip valdyti techninę skolą (greiti, bet brangūs kodo sprendimai).
Sąvokos: Techninė skola: Šiandien priimti sprendimai dėl greičio, dėl kurių ateityje sunku atlikti techninę priežiūrą. Kodo kvapas: raštai, kurie patys nėra klaidos, bet rodo problemas (per ilgos funkcijos, pasikartojantis kodas). Regresija: kai pakeitimas sulaužo tai, kas anksčiau veikė.
AI naudojimas struktūrinio kodo peržiūroje
Kai laikas ribotas, būtina sutelkti dėmesį į didžiausios rizikos klausimus. Automatinis formatuotojas sprendžia formatavimo problemas, tokias kaip įtrauka ir tarpai; Turite skirti žmogaus dėmesį logikai, saugumui ir elgesiui. Atlikdami AI apžvalgą, prašykite prioritetinio sąrašo, o ne paprastos apžvalgų gausos.
- Suteikite apimtį. Koks kodas, ką daryti, kokiame kontekste jis veikia.
- Nurodykite prioritetinę ašį. Pirmiausia tikslumas ir saugumas, antra – skaitomumas.
- Paprašykite konkretaus pataisymo. „Kodėl kilo problema“ ir „rekomenduojamas sprendimas“ kiekvienam radiniui.
- Jūs patikrinate išvadas. AI taip pat sukuria klaidingus teigiamus rezultatus; Patikrinkite kiekvieną radinį pagal kodą ir testavimą.
Struktūrinės peržiūros raginimas: "Išnagrinėkite šią funkciją kaip vyresnysis inžinierius. Išvardykite išvadas pagal svarbą ir pažymėkite jas šiomis žymomis: [KRITINIS] logika / sauga, [VIDUTINIS] krašto atvejis / našumas, [ŽEMAS] skaitomumas / pavadinimas. Kiekvienam radiniui: kodėl klausti, konkretus pasiūlymas. Nepraleiskite problemų, susijusių su formatavimu, kodas].
Į saugą orientuotas peržiūros raginimas: „Peržiūrėkite šį kodą tik saugumo sumetimais: įvesties patvirtinimo trūkumas, injekcijos rizika, autorizavimo kontrolės trūkumas, konfidencialios informacijos nutekėjimas, nesaugūs numatytieji nustatymai. Prie kiekvieno radinio pridėkite atakos scenarijaus pavyzdį. Jei nėra saugumo problemų, aiškiai nurodykite „Neradau jokių svarbių saugos problemų“. Kodas: [kodas].
Atsargiai: vien todėl, kad dirbtinis intelektas sako „nėra problemų“, dar neįrodo, kad problemos nėra. AI gali pateikti klaidingus neigiamus rezultatus; gali apeiti tikrą saugumo problemą. AI peržiūra papildo, o ne pakeičia, žmogaus peržiūra ir saugumo bandymai. Saugumui svarbiame kodekse paskutinį žodį taria kompetentingas inžinierius.
Bandomasis konservavimas
Auksinė pertvarkymo taisyklė: pirma išbandyk, vėliau keisk. Prieš taisydami kodą, turėtų būti atlikti testai, kurie užrakina dabartinį elgesį, kad galėtumėte iš karto žinoti, jei pakeitimas ką nors sulaužys. Nelaužykite tvarkos atlikdami dirbtinio intelekto pertvarkymą.
- Išbandykite dabartinį elgesį. Kitu atveju leiskite dirbtiniam intelektui atlikti „apibūdinimo testą“ (testą, kuris fiksuoja esamą elgseną tokį, koks jis yra).
- Pataisykite tai mažais žingsneliais. Bandymas turi išlikti žalias kiekviename žingsnyje.
- Paleiskite jį po kiekvieno žingsnio. Anksti pastebėkite regresiją.
Saugaus pertvarkymo plano raginimas: "Ši 60 eilučių funkcija daro per daug ir ją sunku perskaityti. Noriu ją pertvarkyti NEKEISČIAU jos elgesio. Pirma: išvardykite, kokių bandymų atvejų turiu užblokuoti dabartinį elgesį. Tada: suskaidykite pertvarkymą į mažus žingsnelius, kurių kiekvienas gali būti vykdomas, kol testai yra žali. Kodo dar nerašykite. Kodas: [kodas] pirmas.
Silpnas raginimas / stiprus raginimas
WEAK: „Patobulinkite šį kodą“. (Rezultatas: neaišku, ką patobulinti; dirbtinis intelektas atlieka savavališkus pakeitimus, gali tyliai keisti elgesį.) STIPRUS: "Perskaičiuokite šią mokėjimo apskaičiavimo funkciją, kad būtų lengviau skaitoma. APRIBOJIMAS: elgsena turi likti tokia pati, grąžinamos reikšmės neturi keistis. Padalinkite ilgą funkciją į prasmingas naudingumo funkcijas, didindami stebuklingus skaičius iki įvardytų konstantų. Išvardykite pakeitimus po elemento ir paaiškinkite, ar kodas keičiasi. Kodas nesikeičia."
Galingas raginimas aiškiai nurodo „elgesys turi išlikti lygiai toks pat“ ir ką reikia patobulinti. Be šio apribojimo AI gali pakeisti logiką vardan „tobulėjimo“ ir sukelti tylią regresiją.
Techninių skolų valdymas
Prieiga
Per trumpą laiką
ilgalaikėje perspektyvoje
ignoruojant skolą
greita pažanga
Techninės priežiūros paralyžius, komandos sulėtėjimas
viską perrašyti
Stovėjimo funkcijos vystymas
Neaiški grąža, didelė rizika
Išmatuotas, nuo bandymų apsaugotas refaktorizavimas
nedidelis sulėtėjimas
Tvarus greitis
Sveikiausias būdas yra trečiasis: padarykite skolą matomą (sekite ją sąraše), pradėkite nuo tos vietos, kur skaudžiausia, ir patikrinkite kiekvieną ištaisymą. AI yra gera pagalba nustatant skolos elementus ir nustatant jų prioritetus, tačiau kurią skolą sumokėti, yra verslo sprendimas.
Mini dėklai
1 atvejis – tyli regresija. Kūrėjas liepia AI „supaprastinti šią funkciją“; AI neteisingai išverčia sąlygą ir grąžos skaičiavimas sulaužytas. Kadangi nėra testavimo, klaida įvyksta po 3 savaičių kliento skundu. Komanda atlieka tą patį darbą, pirmiausia parašydama charakteristikų testą, o klaidą užfiksuodama raudonu testu pirmą kartą.
2 atvejis – naudinga antroji akis. Peržiūrėdamas kodą, AI supranta, kad vartotojo įgaliojimai tikrinami tik sąsajoje, o ne serveryje. Tai yra neteisėtos prieigos spraga. Inžinierius prideda serverio prieigos tikrinimą; AI patikrinimas užkerta kelią faktiniam saugumo incidentui.
3 atvejis – klaidingai teigiamas. AI sako: "šis kintamasis niekada nenaudojamas, ištrinkite jį"; Tačiau jis naudojamas netiesiogiai per kintamą atspindžio mechanizmą. Jei inžinierius nepatikrintų pasiūlymo pagal bandymą, jis būtų ištrintas ir įvyks vykdymo klaida. Kiekvienas AI atradimas turi būti patvirtintas prieš įgyvendinant.
Dažnos klaidos
- Refaktorizavimas be bandymų. Nėra nieko, kas užtikrintų, kad elgesys būtų išsaugotas.
- AI išvadų taikymas jų nepatvirtinus. Pasitaiko ir klaidingų teigiamų, ir klaidingų neigiamų atvejų.
- Žmogaus laiko švaistymas formato problemoms spręsti. Susitelkimas į užduotis, kurias galima išspręsti naudojant automatinius įrankius, užgožia tikrąją riziką.
- Atsakymą „Jokių problemų“ priimkite kaip garantiją. AI gali apeiti pažeidžiamumą; reikalinga žmogaus peržiūra.
- Stengiasi sumokėti visą skolą iš karto. Dideli perrašymai yra rizikingi; Pirmenybė teikiama veiksmams, kurie yra išmatuoti ir apsaugoti testuojant.
Apibendrinant
Kodo peržiūra ir pertvarkymas lemia kodo ilgaamžiškumą. AI yra galingas antrosios akies ir planų generatorius: teikia pirmenybines išvadas, saugumo scenarijus ir nedidelių žingsnių pertvarkymo planus. Tačiau pertvarkymas neturėtų pakeisti elgesio ir tai garantuoja tik bandymai. Patvirtinkite kiekvieną AI išvadą pagal kodą ir testavimą; Atsakymo „be problemų“ nepriimkite kaip įrodymų. Padarykite techninę skolą matomą ir sumokėkite ją išmatuotais, patikrinimais apsaugotais žingsniais.
Taikymo užduotis
Paimkite 40–70 eilutes, šiek tiek sudėtingą funkciją, kurią turite (arba leiskite dirbtiniam intelektui sugeneruoti). Pirmiausia vadovaukitės struktūrinės peržiūros raginimu ir rūšiuokite išvadas kaip [KRITINIS]/[VIDUTINIS]/[ŽEMAS]; Rankiniu būdu patikrinkite bent vieną kodo radinį. Tada, naudodami saugaus pertvarkymo plano raginimą, pirmiausia sugeneruokite ir paleiskite charakteristikų testus, tada taikykite pertvarkymą mažais žingsneliais ir patikrinkite, ar kiekviename etape testai išlieka žali.
kontrolinis sąrašas
- [ ] Sudariau apžvalgą su prioritetinėmis žymomis (kritinis / vidutinis / žemas).
- [ ] Patikrinau bent vieną AI išvadą pagal kodą / testą.
- [ ] Išbandžiau dabartinį elgesį prieš refaktorizavimą.
- [ ] Pakeitimus atlikau mažais žingsneliais ir kiekviename žingsnyje atlikau testus.
- [ ] Raginame nurodžiau apribojimą „Elgesys turi likti toks pat“.
- [ ] Patvirtinau, kad saugumo išvadoms reikalingas žmogaus patvirtinimas.