Jedinica 4 / 12

Pregled koda i pronalaženje grešaka

Dobici:

  • Mogućnost korištenja AI kao početnog filtera za pregled sa kategorijama i oznakama ozbiljnosti
  • Sposobnost filtriranja nalaza ljudskim umom za provjeru/lažno pozitivan/primjenjivanje
  • Sposobnost provođenja zahtjeva ljudskih odobrenja za poslovna pravila, arhitekturu i sigurnosno kritične odluke

Pregled koda je kada promjenu koju je napisao programer pregleda neko drugi prije nego što se spoji. Dobra recenzija; Rano hvata greške, dijeli informacije i održava bazu koda dosljednom. Ali recenzije su zamorne, sklone ometanju i postaju površne pod pritiskom vremena. Umjetna inteligencija je ovdje dvostruki pomoćnik: omogućava vam i da unaprijed očistite vlastiti kod koji šaljete na pregled i da oštrijim okom pregledate tuđi PR (pull request).

Kritična razlika je sljedeća: AI ubrzava i poboljšava pregled, ali ne može preuzeti odgovornost za odobrenje. Rečenica "AI je pogledao, čist je" nije potvrda. Konačna odluka o "spajanju" je na inženjeru koji poznaje kod i kontekst.

U čemu je AI dobar i loš u pregledu

Dobro za: promašaje nulte provjere, curenje resursa (datoteka/link ostaju otvoreni), neuhvaćeni izuzeci, očito pogrešni uvjeti (>= umjesto >), prijedlozi za preimenovanje, čitljivost, nedostajuća ivica, jednostavni sigurnosni mirisi (kao što je spajanje SQL nizova), otkrivanje duplikata koda.

Slabosti: Duboki nedostaci koji krše vaša poslovna pravila, ali zahtijevaju kontekst i vrijeme, kao što su sintaktički ispravna logika, arhitektonska usklađenost, stvarna uska grla u performansama, greške u konkurentnosti. AI također proizvodi lažne pozitivne (pomiješanje nečega što zapravo nije problem za problem) i lažne negativne (nedostaje pravi bug). Stoga je njegov rezultat "lista upozorenja", a ne konačna presuda.

Oprez: Samo zato što AI kaže "nema problema" ne dokazuje da je kod ispravan. Lažni negativi su tihi; Najopasnije greške su one koje se nikada ne spominju u recenziji.

Koraci sistematskog pregleda

  1. Dajte kontekst. Dodajte svrhu promjene, relevantno pitanje i kriterije prihvatanja, ako ih ima, u upit. Besmisleni pregled proizvodi besmisleno tumačenje.
  2. Podijelite ga u kategorije. Zamolite model da klasifikuje nalaze kao "bug/sigurnost/performanse/čitljivost/stil"; tako da odvajate kritično od buke.
  3. Zatražite oznaku ozbiljnosti. Svakom nalazu dajte ocjenu "visoku/srednju/nisku" i uključite "uzrok" i "preporučenu korekciju".
  4. Filtrirajte ga vlastitim očima. Procijenite svaki nalaz: da li je stvaran (provjerite), da li je lažno pozitivan (napišite opravdanje), da li nešto nedostaje (dodajte svoje znanje).
  5. Ručno provjerite kritične staze. Čitajte i izvršavajte rute koje uključuju novac, identitet, autorizaciju i brisanje podataka bez oslanjanja na AI.

Tri mini futrole

Slučaj 1 — Uhvaćena je tiha nulta greška. Jedan tim je imao AI pre-reviziju PR-a od 380 redova. Model je označio način na koji odgovor eksterne usluge može biti nula, ali u kodu nisu izvršene provjere za to. Ljudski recenzent je potvrdio ovu putanju i dodao nultu provjeru; Slična greška izazvala je dvosatni prekid proizvodnje u prethodnom kvartalu.

Slučaj 2 — Lažno pozitivna eliminacija. AI je označio "mogući problem s performansama" u petlji. Recenzent je ovo zatvorio kao lažno pozitivan, znajući da petlja radi samo sa najviše 5 elemenata (petlja preko enuma). Manekenka, koja nije poznavala kontekst, upozorila je; Osoba koja je poznavala kontekst donijela je ispravnu odluku.

Slučaj 3 — AI propustio grešku poslovnog pravila. Dok bi popust na računu trebao biti maksimalno 30% prema pravilu kampanje, kod je dozvoljavao 50%. AI nikada nije primijetio ovu sintaktički savršenu logičku grešku; jer nije znao pravilo. Greška je uhvaćena u pregledu od strane vlasnika proizvoda koji je znao kriterije prihvatljivosti. Pouka: validacija poslovnih pravila je ljudski posao.

Četiri predloška koji se mogu kopirati

Namjena, kategorizirana recenzija:

Uloga: Pedantan recenzent koda. Svrha promjene: {{purpose / issue}}Pregledajte ovu razliku. Navedite nalaze u ovim kategorijama: [Bug] [Sigurnost][Performanse] [Čitljivost] [Stil]. Za svaki nalaz: datoteka:red, ozbiljnost (visoka/srednja/niska), uzrok, preporučeni popravak. Označite "moguće" ako niste sigurni. Ne poznajete pravila poslovanja; Pitajte me o mjestima koja zahtijevaju pravila.{{diff}}

Da se pripremite za pregled vlastitog koda:

Pregledajte ovu promjenu prije otvaranja PR-a. Potražite: nedostaje null/bugcheck, curenje resursa, rubni slučaj, tajna, netestirana grana. Navedite nalaze po prioritetu; predloži ispravku 1 red za svaki.{{code}}

Potraga za rubnim slučajevima:

Navedite ulaze i situacije u kojima bi ova funkcija mogla pokvariti: prazna, null, prevelika, negativna, istovremeni poziv, mrežna greška, djelomični podaci. Za svaki slučaj napišite očekivano ponašanje i šta će trenutni kod učiniti.{{function}}

Sigurnosno skeniranje mirisa (prethodno pregled):

Potražite uobičajene sigurnosne mirise u ovom kodu: SQL/komandna konkatenacija, nepotvrđeni unos, nepromjenjiva ugrađena tajna, nesigurna deserijalizacija, nedostatak provjere privilegija. Odvojite nalaze na "izvjesno / vjerovatno / znanje". Ovo je preliminarni skrining; To nije konačna odluka.{{code}}

Slaba prompt / Jaka prompt

Slab: "Ima li greške u ovom PR-u?"
Snažno: "Svrha: dodajte kupon popust na ukupnu količinu korpe (popust ne smije biti veći od 30% — ne možete sami provjeriti ovo pravilo, samo mi recite da li kod nameće gornju granicu). Ispitajte razliku; dajte nalaze po kategoriji + ozbiljnosti + predložena ispravka, označite 'moguće' ako niste sigurni. [razlika]"

Jaka verzija jasno navodi namjeru, poslovna pravila i granice AI; Tako dolaze korisni nalazi i područje nepoznato modelu ostaje jasno.

Pronalaženje tipa

AI pouzdanost

muška uloga

Nedostaje provjera nulte/greške

visoko

Potvrdite i prijavite se

Čitljivost/stil

visoko

Odaberite po želji

Jednostavan sigurnosni miris

srednje

Finalizirajte, skenirajte vozilom

Usklađenost sa poslovnim pravilima

nisko

To je potpuno ljudski.

Konkurencija/arhitektura

nisko

Potreban je stručni pregled

AI pregled nije zamjena za ljudski pregled

Postavite AI recenziju kao „prvi filter“: jeftin, brz, neumoran preliminarni prolaz. Ovaj filter oslobađa pažnju recenzenta od nevažnih detalja (prostor, ime) i usmjerava je na mjesta koja zaista zahtijevaju razmišljanje - poslovno pravilo, arhitektura, sigurnosni rezultat. Ali odobrenje spajanja je potpis odgovorne osobe unutar tima. Nezavisni pregled od strane najmanje jednog kompetentnog inženjera je obavezan za sigurnosno kritične promjene.

Savjet: Pročitajte listu nalaza koje AI proizvodi kao "stvari koje treba provjeriti", a ne kao "to učiniti". Ili provjerite i primijenite svaku stavku ili zapišite u jednoj rečenici zašto ste je položili; ovaj trag čini pregled podložnim reviziji.

Uobičajene greške

  • To znači "AI je pogledao, čist je". Ovo je lažni osjećaj samopouzdanja zbog lažnih negativa.
  • Ne dajem kontekst. Bez svrhe i kriterija prihvatljivosti, model proizvodi samo površne stilske interpretacije.
  • Slijepo primjena lažnih pozitivnih rezultata. Popravljanje svakog upozorenja modela moglo bi pokvariti pokrenuti kod.
  • Pitati model o poslovnom pravilu. Model ne poznaje pravilo; Na čovjeku je da to provjeri.
  • Nemojte diskriminirati nasilje. Stavljanje kritičnog sigurnosnog nalaza i prijedloga imena u istu torbu zasjenjuje ono što je važno.

Ukratko

AI je neumoran prvi filter u pregledu koda: dobro hvata null/greške promašaje, rubne slučajeve i jednostavne sigurnosne mirise; ali je slab u pogledu nedostataka koji zahtijevaju kontekst, kao što su poslovna pravila, arhitektura i konkurentnost, i proizvodi i lažne i lažne negativne rezultate. Zatražite nalaze po kategoriji i ozbiljnosti, filtrirajte svaki pomoću ljudske inteligencije, ručno provjerite kritične puteve. Odobrenje je uvijek potpis odgovornog inženjera.

Zadatak aplikacije

Odaberite stvarni ili nedavni PR/dif. Prvo, neka ga AI pregleda pomoću predloška „objektivno orijentisan, pregled kategorije“. Stavite nalaze u tabelu i za svaki odlučite: istinito (provjerio sam), lažno pozitivno (evo mog obrazloženja) ili da se implementira. Zatim idite u obilazak i pokušajte pronaći barem jednu stvar (posebno poslovno pravilo ili rubni slučaj) koja nedostaje umjetnoj inteligenciji i zapišite je.

kontrolna lista

  • [ ] Koristim AI recenziju kao prvi filter, a ne kao preporuku.
  • [ ] Dodajem svrhu i kriterijume prihvatanja na upit za pregled.
  • [ ] Odvajam nalaze od buke po kategorijama i snažno ih želim.
  • [ ] Svjesno filtriram svaki nalaz da potvrdim/lažno pozitivan/primijenim.
  • [ ] Kao čovjek, provjeravam poslovna pravila i usklađenost arhitekture.
  • [ ] Potrebno mi je odobrenje od kvalifikovanog inženjera za sigurnosno kritične promjene.