Jedinica 4 / 12

Pregled koda i pronalaženje pogrešaka

Dobici:

  • Mogućnost korištenja umjetne inteligencije kao početnog filtra pregleda s kategorijama i oznakama ozbiljnosti
  • Sposobnost filtriranja nalaza ljudskim umom za provjeru/lažno pozitivno/primjenu
  • Sposobnost provođenja zahtjeva za ljudskim odobrenjem za poslovna pravila, arhitekturu i sigurnosno kritične odluke

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

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

Što je AI dobro, a što loše u pregledu

Pogodno za: promašaje nulte provjere, curenje resursa (datoteka/veza ostaju otvoreni), neuhvaćene iznimke, očito pogrešne uvjete (>= umjesto >), prijedloge za preimenovanje, čitljivost, manjak rubnih slova, jednostavne sigurnosne mirise (poput ulančavanja SQL nizova), otkrivanje duplikata koda.

Slabosti: Duboki nedostaci koji krše vaše poslovno pravilo, ali zahtijevaju kontekst i vrijeme, kao što su sintaktički ispravna logika, arhitektonska usklađenost, stvarna uska grla u izvedbi, pogreške u paralelnosti. AI također proizvodi lažno pozitivne (zamjenjujući nešto što zapravo nije problem s problemom) i lažno negativne (propušta pravu pogrešku). Stoga je njegov rezultat "popis upozorenja", a ne konačna presuda.

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

Koraci sustavnog pregleda

  1. Dajte kontekst. Dodajte svrhu promjene, relevantni problem i kriterije prihvaćanja, ako postoje, u upit. Besvrsishodno preispitivanje proizvodi besmisleno tumačenje.
  2. Podijelite ga u kategorije. Zamolite model da klasificira nalaze kao "bug/sigurnost/performanse/čitljivost/stil"; tako da odvojite kritično od buke.
  3. Zatražite oznaku ozbiljnosti. Svakom nalazu dodijelite ocjenu "visoka/srednja/niska" i uključite "uzrok" i "preporučeno ispravljanje".
  4. Filtrirajte ga vlastitim očima. Procijenite svaki nalaz: je li stvaran (provjerite), je li lažno pozitivan (napišite obrazloženje), nedostaje li nešto (dodajte svoje znanje).
  5. Ručno provjerite kritične staze. Sami čitajte i izvršavajte rute koje uključuju novac, identitet, autorizaciju i brisanje podataka bez oslanjanja na AI.

Tri mini kućišta

Slučaj 1 — Uhvaćena tiha nulta pogreška. Jedan tim je AI-u dao pred-pregled PR-a od 380 redaka. Model je označio način na koji bi odgovor vanjske usluge mogao biti nulti, ali nisu napravljene provjere za to u kodu. Ljudski pregledatelj potvrdio je ovaj put i dodao nultu provjeru; Slična pogreška uzrokovala 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 zaključio kao lažno pozitivan, znajući da petlja radi samo s najviše 5 elemenata (prelazi preko enuma). Manekenka, koja nije poznavala kontekst, upozorila je; Osoba koja je poznavala kontekst donijela je pravu odluku.

Slučaj 3 — AI promašio pogrešku poslovnog pravila. Dok bi račun s popustom trebao iznositi najviše 30% prema pravilu kampanje, kod je dopuštao 50%. AI nikada nije primijetio ovu sintaktički savršenu logičku pogrešku; jer nije znao pravilo. Pogrešku je u recenziji otkrio vlasnik proizvoda koji je poznavao kriterije prihvaćanja. Lekcija: validacija poslovnih pravila ljudski je posao.

Četiri predloška za kopiranje

Svrhovito orijentirana, 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:redak, ozbiljnost (visoka/srednja/niska), uzrok, preporučeni popravak. Označite "moguće" ako niste sigurni. Ne poznajete pravila poslovanja; Pitaj me o mjestima koja zahtijevaju pravila.{{diff}}

Da biste se pripremili za pregled vlastitog koda:

Pregledajte ovu promjenu prije otvaranja PR-a. Potražite: nedostaje null/bugcheck, curenje resursa, edge case, secret, untested grana. Navedite nalaze po prioritetu; predloži ispravak 1 redak za svaki.{{code}}

Lov na rubne slučajeve:

Navedite ulaze i situacije u kojima bi se ova funkcija mogla pokvariti: prazno, nula, preveliko, negativno, istodobni poziv, mrežna pogreška, djelomični podaci. Za svaki slučaj napišite očekivano ponašanje i što će trenutni kod učiniti.{{function}}

Sigurnosno skeniranje mirisa (pretprovjera):

Potražite uobičajene sigurnosne mirise u ovom kodu: spajanje SQL/naredbi, neprovjereni unos, nepromjenjiva ugrađena tajna, nesigurna deserijalizacija, nedostatak provjere privilegija. Razdvojite nalaze na "sigurna / vjerojatna / znanja". Ovo je preliminarni pregled; To nije konačna presuda.{{code}}

Slab upit / Jak upit

Slab: "Postoji li greška u ovom PR-u?"
Jaka: "Svrha: dodajte popust na kupon ukupnoj košarici (popust ne smije biti veći od 30% — ne možete sami provjeriti ovo pravilo, samo mi recite nameće li kod gornju granicu). Ispitajte razlike; navedite nalaze prema kategoriji + težini + predloženoj korekciji, označite 'moguće' ako niste sigurni. [razl.]"

Snažna verzija jasno navodi namjeru, poslovno pravilo i granice AI-a; Tako dolaze korisni nalazi, a područje nepoznato modelu ostaje jasno.

Vrsta nalaza

AI pouzdanost

muška uloga

Nedostaje provjera nulte/pogreške

visoka

Potvrdite i primijenite

Čitljivost/stil

visoka

Odaberite po želji

Jednostavan sigurnosni miris

srednji

Finalizirati, skenirati vozilom

Poštivanje poslovnih pravila

nizak

To je posve ljudski.

Konkurentnost/arhitektura

nizak

Potreban je stručni pregled

AI pregled nije zamjena za ljudski pregled

Postavite AI pregled kao "prvi filter": jeftin, brz, neumoran preliminarni prolaz. Ovaj filtar oslobađa pozornost recenzenta od nevažnih detalja (razmak, naziv) i usmjerava je na mjesta koja stvarno zahtijevaju razmišljanje - poslovno pravilo, arhitektura, sigurnosni rezultat. Ali odobrenje spajanja je potpis odgovorne osobe unutar tima. Neovisni pregled od strane najmanje jednog kompetentnog inženjera obavezan je za sigurnosno kritične promjene.

Savjet: Pročitajte popis nalaza koje AI proizvodi kao "stvari koje treba provjeriti", a ne kao "što treba učiniti". Provjerite i primijenite svaku stavku ili u jednoj rečenici napišite zašto ste je prošli; ovaj trag čini pregled revizijskim.

Uobičajene greške

  • To znači "AI je pogledao, čisto je". Ovo je lažni osjećaj samopouzdanja zbog lažno negativnih rezultata.
  • Ne dajući kontekst. Bez svrhe i kriterija prihvaćanja, model proizvodi samo površne stilske interpretacije.
  • Slijepo primjenjivanje lažno pozitivnih rezultata. Popravljanje svakog upozorenja modela moglo bi pokvariti aktivni kod.
  • Pitati modela 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 filtar u pregledu koda: dobro hvata promašaje null/greške, rubne slučajeve i jednostavnu sigurnost; ali je slab na nedostatke koji zahtijevaju kontekst kao što su poslovna pravila, arhitektura i konkurentnost, i proizvodi i lažno pozitivne i lažno negativne rezultate. Zatražite nalaze po kategoriji i ozbiljnosti, filtrirajte svaki pomoću ljudske inteligencije, ručno provjerite kritične putove. Odobrenje je uvijek potpis odgovornog inženjera.

Zadatak aplikacije

Odaberite pravi ili nedavni PR/diff. Prvo neka ga AI pregleda s predloškom "objektivno orijentirano, pregled kategorije". Stavite nalaze u tablicu i odlučite za svaki od njih: točno (provjerio sam), lažno pozitivno (ovo je moje obrazloženje) ili za implementaciju. Zatim sami krenite u obilazak i pokušajte pronaći barem jednu stvar (osobito poslovno pravilo ili rubni slučaj) koja nedostaje umjetnoj inteligenciji i zapišite je.

popis za provjeru

  • [] Koristim AI recenziju kao prvi filter, a ne kao podršku.
  • [ ] Dodajem svrhu i kriterije prihvaćanja upitu za pregled.
  • [ ] Odvajam nalaze od buke po kategorijama i jako ih želim.
  • [ ] Svjesno filtriram svaki nalaz da potvrdim/lažno pozitivno/primijenim.
  • [ ] Kao čovjek, provjeravam poslovna pravila i usklađenost s arhitekturom.
  • [ ] Trebam odobrenje kvalificiranog inženjera za sigurnosno kritične promjene.