Dobici:
- Sposobnost efikasnog opisivanja greške AI-u sa porukom o grešci, praćenjem steka i najmanjom instancom reprodukcije
- Sposobnost pokretanja sistematskog toka otklanjanja grešaka s AI-om kako bi se pronašao korijenski uzrok hipotezom i sužavanjem korak po korak
- Sposobnost da se potvrdi da je popravka koju je AI predložila zapravo riješila problem reprodukcijom i regresijskim testiranjem
Otklanjanje grešaka je zadatak otkrivanja zašto se program ponaša drugačije nego što se očekivalo i popravljanja, a to oduzima mnogo vremena većini inženjera. Dobro otklanjanje grešaka nije zasnovano na igri pogađanja, već na sistematskom sužavanju: razjasnite simptom, postavite hipotezu, testirajte hipotezu, dođite do korena uzroka. AI je veoma moćan partner u ovom ciklusu; Ali samo ako mu date tačne informacije. Reći „kôd ne radi, popravi ga“ tjera AI da pogađa i daje opće prijedloge. Dajte mu punu poruku o grešci, praćenje steka i najmanji uzorak reprodukcije i zajedno ćete pronaći osnovni uzrok.
U ovoj jedinici ćemo vidjeti kako efikasno opisati grešku AI-u, suziti hipoteze korak po korak i provjeriti kroz regresijsko testiranje da predloženi popravak zapravo rješava problem. Zapamtite: "popravljanje" greške i "suzbijanje simptoma greške" su dvije različite stvari; Ispravka izvršena bez pronalaženja osnovnog uzroka pomjera grešku na drugo mjesto.
Koncepti: Praćenje steka: Dump koji pokazuje koje su funkcije pozvane kojim redoslijedom u vrijeme greške. Minimalni repro: Najjednostavniji, najkraći kod/unos koji pokreće grešku. Osnovni uzrok: pravi izvor problema, a ne simptom. Regresijsko testiranje: testiranje koje osigurava da se ista greška ne ponovi.
Opisivanje greške za AI
Vjerojatnost da će AI otkriti osnovni uzrok je direktno proporcionalna kvaliteti informacija koje dajete. Dobar opis greške uključuje: šta ste pokušali da uradite, šta ste očekivali, šta se dogodilo, tačan tekst greške i praćenje steka, uključeni kod, okruženje (jezik/verzija/OS) i najmanji uzorak koji je proizveo grešku.
- Pojasnite simptom. U formatu "Očekivani X, aktualizirani Y".
- Zalijepite cijeli tekst greške i praćenje steka. Nemojte ga skraćivati, cenzurisati, ali nemojte rušiti strukturu.
- Dajte najmanju reprodukciju. Minimalni unos i kod koji pokreće grešku.
- Odredite okruženje. Verzija jezika, verzija biblioteke, runtime okruženje.
Efektivni upit za opis greške: "Otklanjam greške u grešci. Informacije:- Šta pokušavam da uradim: [X]- Očekivano ponašanje: [Y]- Stvarno ponašanje: [Z]- Potpuna poruka o grešci i praćenje steka: [zalijepi]- Okolina: [jezik/verzija, biblioteka/verzija]- Minimalni kod koji je najvjerovatnije uključen: [kod], najvjerovatnije uključeni korijenski redoslijed uzroka. vjerovatnoću i reci mi koju provjeru da provjerim za svaki."
Sužavanje toka hipotezom
Sistematsko otklanjanje grešaka je umetnost eliminisanja mogućnosti jedne po jedne. Koristite AI za generiranje hipoteza i dizajnirajte eksperiment za testiranje svake hipoteze; Zatim pokrenite eksperiment i vratite rezultat. Ovaj ciklus je mnogo brži od navike pravljenja nasumičnih promjena i zaustavljanja, što se naziva "otklanjanje grešaka sačmaricama".
Prompt pomoćnika za binarno pretraživanje (bisekcija): "Ova greška nije bila jučer, postoji danas. Želim saznati koja je od posljednjih 20 izmjena dovela do greške sa bisect. Dajte mi plan korak po korak: koju tačku da testiram, na koju polovinu da idem u zavisnosti od rezultata. Također mi recite šta da provjerim u svakom koraku."
Prompt strategije umetanja dnevnika: "Ne mogu pronaći grešku jer ne mogu vidjeti međuvrijednosti u ovoj funkciji. Reci mi u kojim točkama trebam dodati redove dnevnika koji ispisuju koje varijable. Dodajte objašnjenje 'šta ću naučiti iz ovog dnevnika' za svaki dnevnik. Također navedite upozorenja koja će me spriječiti da evidentiram povjerljive podatke."
Savjet: Ako ne možete riješiti grešku, većinu vremena problem je negdje gdje ste pogrešno pretpostavili. Pitajte AI "koja bi moja pretpostavka mogla biti pogrešna?" Traženje će vam slomiti sljepoću. Najteže greške se kriju na mjestu gdje kažete "Siguran sam da ovo radi kako treba".
Slaba prompt / jaka prompt
SLABO:"Moj kod daje grešku, ispravi je: [200 redova koda]"(Rezultat: AI ne zna koja je greška, šta se očekuje; daje opšte predloge zasnovane na nagađanjima, većina njih je beskorisna.)STRONG:"Dobijam NullPointerException. Očekivano: treba da se vrati lista korisnika. Stvarno: Eksplodira na pozivu:Upsceders:Pasronvick da dobijete]. Java 17. Minimalno ponavljanje: Događa se kada je lista korisnika prazna, ali ne i kada je puna.
Snažan prompt stavlja grešku u kontekst: u kom slučaju se dešava (prazna lista), u kom slučaju se ne dešava (puna lista). Ovaj jedini trag ("događa se kada je prazan") gotovo direktno ukazuje na osnovni uzrok. Pošto ove informacije nisu dostupne u slabom promptu, AI nagađa na slepo.
Provjera popravka
Popravak je pravi popravak samo ako radi tri stvari:
kontrolu
Pitanje
Kako provjeriti
Je li greška nestala?
Radi li isti unos sada?
Ponovo pokrenite minimalnu repro
Nema novih grešaka?
Da li je još nešto pokvareno?
Pokrenite cijeli testni paket
Zar se neće ponoviti?
Hoće li se ponoviti ista greška?
Dodajte regresijski test za ovaj scenario
Korekcije napravljene bez pronalaženja osnovnog uzroka često potiskuju simptom. Na primjer, zataškavanje nulte greške sa "preskoči ako je null" čini pravi razlog, "zašto podaci dolaze nulti?" nevidljivo, a greška se ponavlja na drugom mjestu.
Mini Cases
Slučaj 1 — Zamka za suzbijanje simptoma. Tim utišava povremenu nultu grešku pokušajem hvatanja; Greška nestaje, ali nakon 2 sedmice podaci nedostaju. Pravi razlog je taj što usluga vraća null nakon isteka. Kada pitate AI "zašto postaje nula?", pojavljuje se osnovni uzrok; Pravo popravljanje traje 1 sat, ali je trajno.
Slučaj 2 — Minimalna moć reprodukcije. Programer ne može da ispravi grešku koja kaže da se s vremena na vreme ruši. Smanjuje grešku na najmanji unos uz sugestiju AI: problem se javlja samo kod imena datoteka koje sadrže turske znakove (greška kodiranja). Kada se 300 redova nesigurnosti svede na 5 redova definitivne repro, rješenje postaje očigledno.
Slučaj 3 — Anti-regresijski test. AI popravlja grešku u izračunavanju datuma. Inženjer nije zadovoljan ovim; dodaje test regresije za pogrešan scenario (kraj mjeseca, 31. januar + 1 mjesec). Kada druga izmjena dotakne isto područje 4 mjeseca kasnije, test postaje crven i greška je uhvaćena prije nego što dođe do proizvodnje.
Uobičajene greške
- To znači "ne radi, popravi". Bez teksta greške, očekivanja i reprograma, AI nagađa.
- Ne daje trag steku. Praćenje steka često direktno ukazuje na osnovni uzrok.
- Nastavite praviti nasumične promjene. Eksperimenti bez uspostavljanja hipoteze gube vrijeme.
- Potiskivanje simptoma i propuštanje osnovnog uzroka. Greška se ponovo rađa negdje drugdje.
- Ne osiguravanje popravka regresijskim testiranjem. Ista greška se tiho vraća u budućnosti.
Ukratko
Efikasno otklanjanje grešaka je sistematsko sužavanje, a ne nagađanje. Davanje AI punog teksta greške, praćenja steka, minimalne reprodukcije i informacija o okruženju eksponencijalno povećava šanse za pronalaženje glavnog uzroka. Koristite AI za generiranje hipoteza i dizajnirajte eksperiment za testiranje svake hipoteze; Vi izvodite eksperiment. Smatrajte da je popravka "gotova" samo kada vidite da je greška nestala, da nema novih grešaka i da je zaštićena regresijskim testiranjem.
Zadatak aplikacije
Uzmite u obzir stvarnu ili umjetnu grešku. Prvo smanjite grešku na najmanju reprodukciju (u kojem unosu se pojavljuje, u kojem ne). Koristeći učinkovit upit za recept za greške, zatražite od AI 3 hipoteze o osnovnom uzroku i korak provjere za svaku. Pronađite osnovni uzrok testiranjem hipoteza jednu po jednu, popravite je, a zatim napišite i pokrenite regresijski test za ovaj scenarij kako biste pokazali da je greška nestala i da test pruža zaštitu.
kontrolna lista
- [ ] Pojasnio sam simptom kao "očekivano naspram ostvareno".
- [ ] Dao sam puni tekst greške i praćenje steka AI.
- [ ] Sveo sam grešku na najmanju reprodukciju.
- [ ] Testirajući hipoteze jednu po jednu, pronašao sam osnovni uzrok.
- [ ] Umjesto da potisnem simptom, popravio sam osnovni uzrok.
- [ ] Dodao sam i pokrenuo regresijski test za istu grešku.