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
- Dajte kontekst. Dodajte svrhu promjene, relevantni problem i kriterije prihvaćanja, ako postoje, u upit. Besvrsishodno preispitivanje proizvodi besmisleno tumačenje.
- Podijelite ga u kategorije. Zamolite model da klasificira nalaze kao "bug/sigurnost/performanse/čitljivost/stil"; tako da odvojite kritično od buke.
- Zatražite oznaku ozbiljnosti. Svakom nalazu dodijelite ocjenu "visoka/srednja/niska" i uključite "uzrok" i "preporučeno ispravljanje".
- 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).
- 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.