Üksus 4 / 12

Koodi läbivaatamine, ümbertöötamine ja tehniline võlg

Kasu:

  • Võimalus kasutada AI-d teise silmana koodi ülevaatamisel loetavuse, loogika ja turvalisuse tagamiseks
  • Võimalus planeerida tehisintellekti toega ümberkujundamise samme ilma keerulist koodikäitumist häirimata
  • Võimalus kontrollida tehisintellekti ülevaatust ja muuta soovitusi testimise ja versioonikontrolli võrdlusega

Tarkvaratehnikas loetakse koodi palju rohkem kui kirjutatakse. Koodirida kirjutatakse üks kord, kuid seda loetakse, muudetakse ja ehitatakse üles kümneid kordi kuude jooksul. Seetõttu on koodi ülevaatus (kellegi teise või enda koodi loogika, loetavuse ja turvalisuse ülevaatamine) ja ümbertöötlus (koodi struktuuri parandamine selle käitumist muutmata) inseneritöö keskmes. Tehisintellektist saab nende kahe ülesande jaoks võimas "teine ​​silm": see soovitab kiiresti loetavust, juhib tähelepanu tähelepanuta jäetud loogika- ja turvaprobleemidele ning jagab suure ümberkujundamise väiksemateks ohututeks sammudeks. Kuid on kriitiline reegel: refaktoreerimine ei tohiks käitumist muuta ja ainus, mis selle tagab, on testimine.

Selles üksuses näeme, kuidas kasutada AI-d struktureeritud viisil koodi ülevaatamiseks, kuidas parandada keerulist koodi ilma selle käitumist rikkumata ja kuidas hallata tehnilist võlga (kiired, kuid kulukad koodiotsused).

Mõisted: Tehniline võlg: täna tehtud koodiotsused kiiruse tagamiseks, mis muudavad hoolduse tulevikus keeruliseks. Koodi lõhn: mustrid, mis ise ei ole vead, vaid viitavad probleemidele (liiga pikad funktsioonid, korduv kood). Regressioon: kui muudatus rikub midagi, mis varem töötas.

AI kasutamine struktureeritud koodide ülevaates

Kui aeg on piiratud, on vaja keskenduda kõrgeima riskiga probleemidele. Automaatne vormindaja käsitleb selliseid vormindamisprobleeme nagu taane ja tühikud; Peate pühendama inimeste tähelepanu loogikale, turvalisusele ja äärmuslikule käitumisele. Tehisintellekti ülevaatamist tehes küsige prioriteetsete nimekirja, mitte tavalist arvustuste tulva.

  1. Andke ulatus. Mis kood, mida teha, mis kontekstis see töötab.
  2. Määrake prioriteetne telg. Esiteks täpsus ja turvalisus, teiseks loetavus.
  3. Küsi konkreetset parandust. Iga leiu puhul „Miks probleem” ja „soovitatav parandus”.
  4. Te kontrollite leide. AI annab ka valepositiivseid tulemusi; Kontrollige iga leidu koodi ja testimisega.

Struktureeritud ülevaatuse viip: "Uurige järgmist funktsiooni nagu vaneminsener. Loetlege leiud tähtsuse järjekorras ja märkige need märgenditega: [KRIITILINE] loogika/turvalisus, [KESKMINE] tähis/jõudlus, [MAdal] loetavus/nimi. Iga leiu puhul: miks küsida, konkreetne parandussoovitus. ÄRGE JÄTA JÄTA VÄLJASTAMISE tööriistu, see käsitleb vormindamist/kood: [kood].

Turvalisusele keskendunud ülevaatuse viip: "Vaadake see kood üle ainult turvalisuse huvides: sisendi kinnitamise puudumine, süstimise oht, volituste kontrolli puudumine, konfidentsiaalse teabe lekkimine, ebaturvalised vaikesätted. Lisage igale leiule rünnaku stsenaariumi näidis. Kui turvaprobleeme pole, öelge selgelt "Ma ei leidnud kriitilisi turvaprobleeme". Kood: [kood]."

Ettevaatust. See, et tehisintellekt ütleb "probleeme pole", ei tõenda, et probleemi pole. AI võib anda valenegatiivseid tulemusi; võib tõelisest turvaprobleemist mööda minna. AI ülevaade täiendab, mitte ei asenda, inimeste ülevaatus ja turvatestid. Turvakriitilises koodis ütleb lõplik sõna pädev insener.

Testsäilitatud ümberfaktorimine

Refaktoreerimise kuldreegel: kõigepealt testi, hiljem muuda. Enne koodi parandamist peaksid olema testid, mis lukustavad praeguse käitumise, et saaksite kohe teada, kui muudatus midagi rikub. Ärge rikkuge tehisintellekti ümberkujundamisel järjekorda.

  1. Pange praegune käitumine proovile. Vastasel juhul laske tehisintellektil koostada "iseloomustustest" (test, mis fikseerib praeguse käitumise sellisel kujul, nagu see on).
  2. Parandage see väikeste sammudega. Testimine peab jääma igal sammul roheliseks.
  3. Käivitage see pärast iga sammu. Saavutage regressioon varakult.

Ohutu ümberkujundamisplaani viip: "Järgmine 60-realine funktsioon teeb liiga palju ja seda on raske lugeda. Ma tahan selle ümber teha ILMA selle käitumist muutmata. Esiteks: loetlege, millised testjuhtumid pean praeguse käitumise lukustamiseks. Seejärel: jagage ümberkujundamine väikesteks sammudeks, millest igaühte saab käivitada, kui testid on rohelised. Ärge kirjutage veel koodi, andke esmalt [kood]."

Nõrk viip / Tugev viip

NÕRK: "Tehke see kood paremaks." (Tulemus: ebaselge, mida parandada; AI teeb meelevaldseid muudatusi, võib vaikselt muuta käitumist.) STRONG: "Refaktoreerige see makse arvutamise funktsioon loetavuse huvides. PIIRANG: käitumine peab jääma täpselt samaks, tagastatavad väärtused ei tohi muutuda. Jagage pikk funktsioon tähenduslikeks kasulikeks funktsioonideks, suurendades maagilisi numbreid nimelisteks konstantideks. Loetlege muudatused iga üksuse kaupa ja selgitage, kuidas kood ei muutu."

Võimas käsk ütleb selgelt, et "käitumine peab jääma täpselt samaks" ja mida on vaja parandada. Ilma selle piiranguta võib AI muuta loogikat "täiustamise" nimel ja tekitada vaikiva regressiooni.

Tehniliste võlgade haldamine

Lähenemine

Lühiajalises perspektiivis

pikemas perspektiivis

võlga ignoreerides

kiire edenemine

Hooldushalvatus, meeskonna aeglustumine

kõik ümber kirjutada

Seisufunktsioonide arendamine

Ebakindel tootlus, kõrge risk

Mõõdetud, testiga kaitstud refaktoreerimine

väike aeglustumine

Jätkusuutlik kiirus

Kõige tervislikum viis on kolmas: tehke võlg nähtavaks (jälgige seda loendis), alustage sellest, kus see kõige rohkem valutab, ja katsetage iga parandus. AI on hea abiline võlakirjete tuvastamisel ja tähtsuse järjekorda seadmisel, kuid milline võlg tasuda, on äriline otsus.

Mini korpused

Juhtum 1 – vaikne regressioon. Arendaja käsib AI-l "seda funktsiooni lihtsustada"; AI tõlgib tingimuse valesti ja tagastusarvutus on katki. Kuna testimist ei toimu, ilmneb viga 3 nädala pärast kliendi kaebusega. Meeskond teeb sama tööd, kirjutades esmalt iseloomustustesti ja tuvastab vea esimesel katsel punase testiga.

Juhtum 2 – kasulik teine ​​silm. Koodi ülevaatamisel mõistab AI, et kasutaja luba kontrollitakse ainult liideses, mitte serveris. See on volitamata juurdepääsu haavatavus. Insener lisab serveripoolse autoriseerimise kontrolli; AI kontroll hoiab ära tegeliku turvaintsidendi.

Juhtum 3 – valepositiivne. AI ütleb "seda muutujat ei kasutata kunagi, kustutage see"; Seda kasutatakse aga kaudselt muutuva peegeldusmehhanismi kaudu. Kui insener ei kontrollinud soovitust testi alusel, kustutatakse see ja ilmneb käitustõrge. Iga AI leid tuleb enne rakendamist kinnitada.

Levinud vead

  • Refaktoreerimine ilma testimiseta. Käitumise säilimise tagamiseks pole enam midagi.
  • AI leidude rakendamine neid kinnitamata. Esinevad nii valepositiivsed kui ka valenegatiivsed tulemused.
  • Inimaja raiskamine vorminguprobleemidele. Keskendumine ülesannetele, mida saab lahendada automatiseeritud tööriistadega, varjutab tegelikud riskid.
  • Võttes tagatiseks vastust "Pole probleemi". AI võib haavatavusest mööda minna; inimese ülevaatus on vajalik.
  • Proovige kogu võlg korraga ära maksta. Suured ümberkirjutused on riskantsed; Eelistatakse samme, mida mõõdetakse ja kaitstakse testimisega.

Kokkuvõttes

Koodi ülevaatus ja ümbertöötamine määravad koodi pikaealisuse. AI on võimas teise silma ja plaanide generaator: pakub prioriteetseid leide, turvastsenaariume ja väikesesammulisi ümbertöötamise plaane. Kuid ümbertöötamine ei tohiks käitumist muuta ja ainult testimine tagab selle. Kontrollige kõiki tehisintellekti leide koodi ja testimise suhtes; Ärge võtke vastust "probleeme pole" tõendina. Tehke tehniline võlg nähtavaks ja tasuge see mõõdetud, testimiskaitsega sammudega.

Rakenduse ülesanne

Võtke 40–70 rida, mis on mõnevõrra keeruline funktsioon, mis teil on (või laske tehisintellektil genereerida). Esmalt järgige struktureeritud ülevaate viipa ja sorteerige leiud kujul [KRIITILINE]/[KESKMINE]/[MADAL]; Kontrollige vähemalt ühte leidu koodiga käsitsi. Seejärel looge ja käivitage ohutu taastamisplaani viipaga esmalt iseloomustustestid, seejärel rakendage väikeste sammude kaupa ümberfaktoreerimist ja kontrollige, et testid jääksid igas etapis roheliseks.

kontrollnimekiri

  • [ ] Struktureerisin ülevaate prioriteetsete siltidega (kriitiline/keskmine/madal).
  • [ ] Olen kontrollinud vähemalt ühte tehisintellekti leidu koodi/testi alusel.
  • [ ] Testisin praegust käitumist enne refaktoreerimist.
  • [ ] Tegin muudatused väikeste sammude kaupa ja tegin igal etapil teste.
  • [ ] Määrasin viipas piirangu "Käitumine peab jääma samaks".
  • [ ] Olen kinnitanud, et julgeolekuleiud nõuavad inimese kinnitust.