Dobički:
- Sposobnost učinkovitega opisa hrošča AI s sporočilom o napaki, sledenjem sklada in najmanjšim primerkom reprodukcije
- Sposobnost izvajanja sistematičnega toka odpravljanja napak z umetno inteligenco, da bi našli temeljni vzrok s hipotezo in jo omejevali korak za korakom
- Zmožnost preverjanja, ali je popravek, ki ga je predlagal AI, dejansko odpravil težavo z reprodukcijo in regresijskim testiranjem
Odpravljanje napak je naloga ugotavljanja, zakaj se program obnaša drugače od pričakovanega, in popravljanja tega, večini inženirjev pa vzame veliko časa. Dobro odpravljanje napak ne temelji na ugibanju, temveč na sistematičnem omejevanju: razjasnite simptom, postavite hipotezo, preizkusite hipotezo, pridite do temeljnega vzroka. AI je zelo močan partner v tem ciklu; A le, če mu daste prave podatke. Rek "koda ne deluje, popravi jo" prisili AI, da ugiba in daje splošne predloge. Dajte mu celotno sporočilo o napaki, sled sklada in najmanjši reprodukcijski vzorec in skupaj boste našli glavni vzrok.
V tej enoti bomo videli, kako učinkovito opisati napako AI, korak za korakom zožiti hipoteze in z regresijskim testiranjem preveriti, ali predlagani popravek dejansko rešuje težavo. Ne pozabite: "odpravljanje" napake in "zatiranje simptomov napake" sta dve različni stvari; Popravek brez iskanja temeljnega vzroka premakne napako na drugo mesto.
Koncepti: Sled sklada: izpis, ki prikazuje, katere funkcije so bile poklicane v kakšnem vrstnem redu v času napake. Minimalno ponavljanje: Najenostavnejša, najkrajša koda/vnos, ki sproži napako. Glavni vzrok: pravi vir težave, ne simptom. Regresijsko testiranje: testiranje, ki zagotavlja, da se ista napaka ne ponovi.
Opis napake AI
Verjetnost, da umetna inteligenca najde glavni vzrok, je neposredno sorazmerna s kakovostjo informacij, ki jih posredujete. Dober opis napake vključuje: kaj ste poskušali narediti, kaj ste pričakovali, kaj se je zgodilo, natančno besedilo napake in sled sklada, vključeno kodo, okolje (jezik/različica/OS) in najmanjši vzorec, ki je povzročil napako.
- Pojasnite simptom. V obliki "Pričakovan X, aktualiziran Y".
- Prilepite celotno besedilo napake in sled sklada. Ne krajšajte ga, cenzurirajte, vendar ne zlomite strukture.
- Podajte najmanjšo reprodukcijo. Minimalni vnos in koda, ki sproži napako.
- Določite okolje. Jezikovna različica, knjižnična različica, izvajalno okolje.
Poziv za učinkovit opis napake: »Odpravljam napako. Informacije: – Kaj poskušam storiti: [X] – Pričakovano vedenje: [Y] – Dejansko vedenje: [Z] – Celotno sporočilo o napaki in sled sklada: [prilepi] – Okolje: [jezik/različica, knjižnica/različica] – Minimalna vključena koda: [koda] Ne posredujte mi neposrednega popravka. Najprej naštejte 3 najverjetnejše temeljne vzroke po vrstnem redu verjetnost in mi povejte, kateri pregled naj preverim za vsakega."
Zoženje toka s hipotezo
Sistematično odpravljanje napak je umetnost odpravljanja možnosti eno za drugo. Uporabite umetno inteligenco za ustvarjanje hipotez in načrtovanje eksperimenta za preverjanje vsake hipoteze; Nato zaženite poskus in vrnite rezultat. Ta cikel je veliko hitrejši od navade naključnih sprememb in ustavljanja, imenovane "shotgun debugging".
Poziv za pomoč pri binarnem iskanju (razpolovitev): "Te napake ni bilo včeraj, tam je danes. Želim ugotoviti, katera od zadnjih 20 sprememb je povzročila napako pri razpolovljenju. Daj mi načrt po korakih: katero točko naj preizkusim, na katero polovico naj grem, odvisno od rezultata. Prav tako mi natančno povej, kaj naj preverim pri vsakem koraku."
Poziv strategije vstavljanja dnevnika: "Ne najdem napake, ker ne vidim vmesnih vrednosti v tej funkciji. Povejte mi, na katerih točkah moram dodati vrstice dnevnika, ki natisnejo katere spremenljivke. Dodajte razlago 'kaj se bom naučil iz tega dnevnika' za vsak dnevnik. Določite tudi opozorila, ki mi bodo preprečila beleženje zaupnih podatkov."
Nasvet: če ne morete odpraviti napake, je največkrat težava nekje, kar ste napačno domnevali. Vprašajte AI "katera moja domneva bi lahko bila napačna?" Vprašanje bo razbilo vašo slepoto. Najhujše napake se skrivajo tam, kjer rečete "Prepričan sem, da to deluje prav".
Šibek poziv / močan poziv
ŠIBKO:»Moja koda daje napako, popravi jo: [200 vrstic kode]«(Rezultat: AI ne ve, kakšna napaka je, kaj se pričakuje; daje splošne predloge na podlagi ugibanja, večina jih je neuporabnih.)MOČNO:»dobim NullPointerException. Pričakovano: seznam uporabnikov bi moral biti vrnjen. Dejansko: Eksplodira ob klicu getUsers(). Sled sklada: [prilepi].Okolje: Java 17. Najmanjše število ponavljanj: zgodi se, ko je seznam uporabnikov prazen, vendar ne, ko je poln. Povezanih 15 vrstic: [koda]. Pojasnite glavni vzrok in zakaj se sproži prazni seznam, nato pa predlagajte popravek."
Zmogljiv poziv postavi napako v kontekst: v katerem primeru se zgodi (prazen seznam), v katerem primeru se ne zgodi (poln seznam). Ta en sam namig (»zgodi se, ko je prazno«) skoraj neposredno kaže na glavni vzrok. Ker te informacije niso na voljo v šibkem pozivu, AI na slepo ugiba.
Preverjanje popravka
Popravek je pravi popravek le, če naredi tri stvari:
nadzor
vprašanje
Kako preveriti
Je napaka izginila?
Ali isti vnos zdaj deluje?
Ponovno zaženite minimalno ponovitev
Ni novih napak?
Je še kaj pokvarjeno?
Zaženite celoten testni paket
Se ne bo ponovilo?
Se bo ponovila ista napaka?
Dodajte regresijski test za ta scenarij
Popravki, opravljeni brez iskanja temeljnega vzroka, pogosto zatrejo simptom. Na primer, zakrivanje napake null s "skip if null" povzroči pravi razlog, "zakaj prihajajo podatki ničelni?" neviden in napaka se ponovi drugje.
Mini etuiji
1. primer – past za zatiranje simptomov. Ekipa utiša občasno ničelno napako s poskusnim ulovom; Napaka izgine, vendar po 2 tednih podatki manjkajo. Pravi razlog je, da storitev po časovni omejitvi vrne vrednost null. Ko vprašate AI "zakaj postaja nič?", se pojavi glavni vzrok; Pravi popravek traja 1 uro, vendar je trajen.
Primer 2 – Minimalna reprodukcijska moč. Razvijalec ne more popraviti napake, ki pravi, da se "občasno zruši." Napako zmanjša na najmanjši vnos s predlogom AI: težava se pojavi samo pri imenih datotek, ki vsebujejo turške znake (napaka kodiranja). Ko se 300 vrstic negotovosti zmanjša na 5 vrstic dokončne reprodukcije, postane rešitev očitna.
Primer 3 – Protiregresijski test. AI popravi napako pri izračunu datuma. Inženir s tem ni zadovoljen; dodaja regresijski test za napačen scenarij (konec meseca, 31. januar + 1 mesec). Ko se 4 mesece pozneje druga sprememba dotakne istega območja, se test obarva rdeče in hrošč je ujet, preden doseže proizvodnjo.
Pogoste napake
- Pomeni "ne deluje, popravi". Umetna inteligenca ugiba brez besedila napak, pričakovanja in ponavljanja.
- Ne daje sledi sklada. Sled sklada pogosto neposredno nakazuje glavni vzrok.
- Nadaljujte z naključnimi spremembami. Eksperimenti brez postavitve hipoteze izgubljajo čas.
- Potlačitev simptoma in spregledanje temeljnega vzroka. Napaka se ponovno rodi drugje.
- Ne zagotavlja popravka z regresijskim testiranjem. Ista napaka se tiho vrne v prihodnosti.
Če povzamem
Učinkovito odpravljanje napak je sistematično zoženje, ne ugibanje. Če umetni inteligenci posredujete celotno besedilo napake, sled sklada, minimalno reprodukcijo in podatke o okolju, eksponentno povečate možnosti za iskanje temeljnega vzroka. Uporabite umetno inteligenco za ustvarjanje hipotez in načrtovanje eksperimenta za preverjanje vsake hipoteze; Izvedite poskus. Štejte, da je popravek "končan" šele, ko vidite, da hrošča ni več, da ni uveden noben nov hrošč in je zaščiten z regresijskim testiranjem.
Aplikacijska naloga
Upoštevajte resnično ali umetno napako. Najprej zmanjšajte napako na najmanjšo reprodukcijo (v katerem vnosu se pojavi, v katerem ne). Z učinkovitim pozivom za recept za hrošče vprašajte AI za 3 hipoteze o vzrokih in korak preverjanja za vsako. Poiščite temeljni vzrok tako, da preizkusite hipoteze eno za drugo, jo popravite, nato napišite in zaženite regresijski test za ta scenarij, da pokažete, da napake ni več in da test zagotavlja zaščito.
kontrolni seznam
- [ ] Simptom sem pojasnil kot "pričakovano v primerjavi z realiziranim".
- [ ] AI sem podal celotno besedilo napake in sled sklada.
- [ ] Napako sem zmanjšal na najmanjšo reprodukcijo.
- [ ] S preizkušanjem hipotez eno za drugo sem našel glavni vzrok.
- [ ] Namesto da bi zatrl simptom, sem odpravil glavni vzrok.
- [ ] Dodal sem in izvedel regresijski test za isto napako.