Üksus 4 / 12

Koodi ülevaatus ja vigade otsimine

Kasu:

  • Võimalus kasutada tehisintellekti esialgse ülevaatefiltrina koos kategooriate ja raskusastme siltidega
  • Võimalus tulemusi inimmõistusega filtreerida, et kontrollida/valepositiivne/rakendus
  • Võimalus jõustada inimeste heakskiidu nõudeid ärireeglite, arhitektuuri ja turbekriitiliste otsuste puhul

Koodi ülevaatus on see, kui keegi teine ​​vaatab arendaja kirjutatud muudatuse enne selle ühendamist üle. Hea ülevaade; See tabab vead varakult, jagab teavet ja hoiab koodibaasi järjepidevana. Kuid ülevaated on väsitavad, hajuvad ja muutuvad ajasurve tõttu pealiskaudseks. Tehisintellekt on siin kahekordne abiline: see võimaldab nii enda koodi, mille ülevaatamiseks esitad, kui ka teravama pilguga uurida kellegi teise PR-i (pull request).

Kriitiline erinevus on järgmine: AI kiirendab ja täiustab ülevaatamist, kuid see ei saa võtta üle vastutust heakskiitmise eest. Lause "AI vaatas, see on puhas" ei ole kinnitus. Lõpliku "ühendamise" otsuse teeb insener, kes tunneb koodi ja konteksti.

Mis on AI hea ja halb ülevaade

Sobib: nullkontrolli vahelejäämised, ressursi lekked (fail/link jääb avatuks), tabamata erandid, ilmselgelt valed tingimused (>= asemel >), ümbernimetamissoovitused, loetavus, puuduv tähis, lihtsad turvalõhnad (nagu SQL-stringi konkatenatsioon), duplikaatkoodi tuvastamine.

Nõrkused: sügavad vead, mis rikuvad teie ärireeglit, kuid nõuavad konteksti ja ajastust, näiteks süntaktiliselt õige loogika, arhitektuuriline vastavus, tegelikud jõudluse kitsaskohad, samaaegsusvead. Tehisintellekt annab ka valepositiivseid tulemusi (sedakse midagi, mis tegelikult pole probleem, probleemiks) ja valenegatiivseid (tegelik viga puudub). Seetõttu on selle väljund "ettevaatusnimekiri", mitte lõplik otsus.

Ettevaatust: see, et tehisintellekt ütleb "probleeme pole", ei tõesta, et kood on õige. Valenegatiivid vaikivad; Kõige ohtlikumad vead on need, mida arvustuses kordagi ei mainita.

Süstemaatilised läbivaatamise etapid

  1. Andke kontekst. Lisage viipale muudatuse eesmärk, asjakohane probleem ja aktsepteerimise kriteeriumid, kui need on olemas. Eesmärgitu ülevaade loob eesmärgitu tõlgenduse.
  2. Jaotage see kategooriatesse. Paluge mudelil leiud liigitada kategooriasse "viga/turvalisus/jõudlus/loetavus/stiil"; nii eraldate kriitilise mürast.
  3. Taotlege raskusastme silti. Andke igale leiule hinnang "kõrge/keskmine/madal" ning lisage "põhjus" ja "soovitatav parandus".
  4. Filtreerige see oma silmaga. Hinnake iga leidu: kas see on tõeline (kontrollige), kas see on valepositiivne (kirjutage põhjendus), kas midagi on puudu (lisage oma teadmised).
  5. Kontrollige kriitilisi teid käsitsi. Lugege ja teostage ise raha, identiteedi, autoriseerimise ja andmete kustutamisega seotud marsruute ilma tehisintellektile tuginemata.

Kolm miniümbrist

Juhtum 1 – tuvastati vaikne nullviga. Ühel meeskonnal oli tehisintellekti eelülevaatus 380-realine PR. Mudel tähistas viisi, kuidas välisteenuse vastus võib olla null, kuid koodis seda ei kontrollitud. Ülevaataja kontrollis seda teed ja lisas nullkontrolli; Sarnane viga põhjustas eelmises kvartalis 2-tunnise tootmiskatkestuse.

Juhtum 2 – Valepositiivne kõrvaldamine. AI tähistas tsüklis "võimaliku jõudlusprobleemi". Arvustaja sulges selle valepositiivsena, teades, et silmus töötab ainult maksimaalselt 5 elemendiga (see loob tsükli üle enumi). Modell, kes konteksti ei teadnud, hoiatas; Inimene, kes teadis konteksti, tegi õige otsuse.

Juhtum 3 – AI vastamata ärireegli viga. Kui allahindluskonto peaks kampaaniareegli järgi olema maksimaalselt 30%, siis kood lubas 50%. AI ei märganud kunagi seda süntaktiliselt täiuslikku loogilist viga; sest ta ei teadnud reeglit. Vea tabas ülevaates tooteomanik, kes teadis aktsepteerimiskriteeriume. Õppetund: ärireeglite kinnitamine on inimese töö.

Neli kopeeritavat malli

Eesmärgile orienteeritud, kategoriseeritud ülevaade:

Roll: hoolas koodiülevaataja. Muudatuse eesmärk: {{eesmärk / probleem}}Vaadake see erinevus üle. Esitage leiud järgmistes kategooriates: [Viga] [Turvalisus][Toimivus] [Loetavus] [Stiil]. Iga leiu kohta: fail:rida, tõsidus (kõrge/keskmine/madal), põhjus, soovitatav parandus. Märkige "võimalik", kui te pole kindel. Sa ei tunne ärireegleid; Küsige minult kohtade kohta, mis nõuavad reegleid.{{diff}}

Oma koodi ülevaatamiseks valmistumiseks tehke järgmist.

Enne PR-i avamist vaadake see muudatus üle. Otsige: puuduv null/bugcheck, ressursi leke, servajuhtum, salajane, testimata haru. Loetlege leiud tähtsuse järjekorras; soovitage iga kohta 1 rida.{{code}}

Edge case hunt:

Loetlege sisendid ja olukorrad, kus see funktsioon võib rikki minna: tühi, null, liiga suur, negatiivne, samaaegne kõne, võrguviga, osalised andmed. Kirjutage iga juhtumi puhul eeldatav käitumine ja see, mida praegune kood teeb.{{function}}

Turvalõhna skaneerimine (eelkontroll):

Otsige selles koodis levinud turbelõhnasid: SQL-i/käskude konkatenatsioon, kinnitamata sisend, muutumatu manustatud saladus, ebaturvaline deserialiseerimine, õiguste kontrolli puudumine. Eraldage leiud "kindlaks / tõenäoliseks / teadmiseks". See on esialgne sõeluuring; See ei ole lõplik otsus.{{code}}

Nõrk viip / Tugev viip

Nõrk: "Kas selles PR-s on viga?"
Tugev: "Eesmärk: lisage kupongi allahindlus ostukorvi kogusummale (allahindlus ei tohi olla suurem kui 30% – te ei saa seda reeglit ise kontrollida, öelge lihtsalt, kas kood kehtestab ülempiiri). Uurige erinevust; tehke järeldused kategooria + raskusastme järgi + soovitatud parandus, märkige "võimalik", kui pole kindel. [erinevus]"

Tugev versioon ütleb selgelt AI kavatsuse, ärireegli ja piiri; Seega tulevad kasulikud leiud ja mudelile tundmatu ala jääb selgeks.

Tüübi leidmine

AI usaldusväärsus

mehe roll

Null/vea kontroll puudub

kõrge

Kinnitage ja rakendage

Loetavus/stiil

kõrge

Valige eelistuste järgi

Lihtne turvalõhn

keskmine

Lõpetage, skannige sõidukiga

Ärireeglite järgimine

madal

See on täiesti inimlik.

Samaaegsus/arhitektuur

madal

Vajalik on ekspertiis

AI ülevaade ei asenda inimlikku ülevaadet

Asetage tehisintellekti ülevaade "esimeseks filtriks": odav, kiire ja väsimatu eelpääs. See filter vabastab ülevaataja tähelepanu ebaolulistest detailidest (ruum, nimi) ja suunab selle kohtadesse, mis nõuavad tõesti mõtlemist – ärireeglid, arhitektuur, turvatulemus. Kuid ühinemise heakskiit on meeskonnas vastutava isiku allkiri. Ohutuse seisukohalt oluliste muudatuste puhul on kohustuslik sõltumatu ülevaatus vähemalt ühe pädeva inseneri poolt.

Näpunäide: lugege tehisintellekti tehtud leidude loendit kui "asju, mida kontrollida", mitte "teha". Kontrollige ja rakendage iga üksust või kirjutage ühe lausega üles, miks selle läbisite; see jälg muudab ülevaate auditeeritavaks.

Levinud vead

  • See tähendab "AI vaatas, see on puhas". See on vale enesekindluse tunne valenegatiivsuse tõttu.
  • Konteksti ei anna. Ilma eesmärgi ja aktsepteerimiskriteeriumideta toodab mudel ainult pealiskaudseid stiilitõlgendusi.
  • Valepositiivsete andmete pimesi rakendamine. Mudeli iga hoiatuse parandamine võib jooksva koodi rikkuda.
  • Mudeli küsimine ärireeglite kohta. Mudel ei tunne reeglit; Inimese ülesanne on seda kontrollida.
  • Ärge diskrimineerige vägivalda. Kriitilise turvaleiu ja nimesoovituse panemine ühte kotti jätab olulise varju.

Kokkuvõttes

AI on väsimatu esimene filter koodide ülevaatamisel: see tabab hästi null/error miss, servajuhtumid ja lihtsa turvalisuse lõhna; kuid see on nõrk konteksti nõudvate vigade suhtes, nagu ärireeglid, arhitektuur ja samaaegsus, ning annab nii valepositiivseid kui ka valenegatiivseid tulemusi. Taotlege leide kategooria ja raskusastme järgi, filtreerige iga inimese luureandmetega, kontrollige käsitsi kriitilisi teid. Heakskiit on alati vastutava inseneri allkiri.

Rakenduse ülesanne

Valige tegelik või hiljutine PR/diff. Esiteks laske tehisintellektil see üle vaadata malliga „objektiivne kategooria ülevaade”. Pange tulemused tabelisse ja otsustage igaühe puhul: tõene (ma kontrollisin), valepositiivne (siin on minu arutluskäik) või rakendatav. Seejärel tehke ise ringkäik ja proovige leida vähemalt üks asi (eriti ärireegel või äärmuslik juhtum), mis AI-l puudub, ja kirjutage see üles.

kontrollnimekiri

  • [ ] Kasutan tehisintellekti ülevaadet esimese filtrina, mitte kinnitusena.
  • [ ] Lisan ülevaatuse viipale eesmärgi ja aktsepteerimise kriteeriumid.
  • [ ] Eraldan leiud mürast kategooriate kaupa ja neid kangesti soovides.
  • [ ] Filtreerin teadlikult iga leiu kinnitamiseks/valepositiivseks/rakendamiseks.
  • [ ] Inimesena kontrollin ärireeglite ja arhitektuuri järgimist.
  • [ ] Ohutuse seisukohalt oluliste muudatuste tegemiseks vajan kvalifitseeritud inseneri kinnitust.