Pelnas:
- Galimybė efektyviai apibūdinti AI klaidą su klaidos pranešimu, kamino sekimu ir mažiausiu atkūrimo egzemplioriu
- Galimybė vykdyti sistemingą derinimo srautą naudojant AI, kad būtų galima rasti pagrindinę priežastį, keliant hipotezes ir ją žingsnis po žingsnio siaurinant
- Galimybė patikrinti, ar AI pasiūlytas pataisymas iš tikrųjų išsprendė problemą, atkuriant ir atliekant regresijos testus
Derinimas yra užduotis išsiaiškinti, kodėl programa veikia kitaip, nei tikėtasi, ir ją ištaisyti, o tai užima daug inžinierių laiko. Geras derinimas remiasi ne spėliojimu, o sistemingu susiaurėjimu: išsiaiškinkite simptomą, iškelkite hipotezę, patikrinkite hipotezę, pasinerkite į pagrindinę priežastį. AI yra labai galingas šio ciklo partneris; Bet tik tuo atveju, jei suteiksite jam teisingą informaciją. Sakydamas „kodas neveikia, pataisyk“ verčia dirbtinį intelektą spėlioti ir pateikti bendrų pasiūlymų. Pateikite visą klaidos pranešimą, krūvos pėdsaką ir mažiausią atkūrimo pavyzdį, ir kartu rasite pagrindinę priežastį.
Šiame skyriuje pamatysime, kaip efektyviai apibūdinti AI klaidą, žingsnis po žingsnio susiaurinti hipotezes ir regresijos testavimu patikrinti, ar siūloma pataisa iš tikrųjų išsprendžia problemą. Atsiminkite: klaidos „ištaisymas“ ir „klaidos simptomo slopinimas“ yra du skirtingi dalykai; Pataisymas, atliktas nerandant pagrindinės priežasties, perkelia klaidą į kitą vietą.
Sąvokos: Stack trace: iškrovimas, rodantis, kurios funkcijos kokia tvarka buvo iškviestos klaidos metu. Minimalus repro: paprasčiausias, trumpiausias kodas / įvestis, kuri sukelia klaidą. Pagrindinė priežastis: tikrasis problemos šaltinis, o ne simptomas. Regresinis testavimas: Testavimas, užtikrinantis, kad ta pati klaida nepasikartotų.
AI klaidos aprašymas
Tikimybė, kad AI suras pagrindinę priežastį, yra tiesiogiai proporcinga jūsų pateiktos informacijos kokybei. Geras klaidos aprašymas apima: ką bandėte padaryti, ko tikėjotės, kas atsitiko, tikslus klaidos tekstas ir dėklo sekimas, įtrauktas kodas, aplinka (kalba / versija / OS) ir mažiausią klaidą sukėlusią pavyzdį.
- Išsiaiškinkite simptomą. Formatas „Numatomas X, aktualizuotas Y“.
- Įklijuokite visą klaidos tekstą ir krūvos pėdsaką. Netrumpinkite, cenzūruokite, bet nelaužykite struktūros.
- Pateikite mažiausią reprodukciją. Minimali įvestis ir kodas, kuris sukelia klaidą.
- Nurodykite aplinką. Kalbos versija, bibliotekos versija, vykdymo aplinka.
Veiksmingas klaidos aprašymo raginimas: "Teriuoju klaidą. Informacija: - Ką aš bandau daryti: [X] - Numatytas elgesys: [Y] - Faktinis elgesys: [Z] - Visas klaidos pranešimas ir dėklo pėdsakas: [įklijuoti] - Aplinka: [kalba / versija, biblioteka / versija] - Mažiausias įtrauktas kodas: [kodas] 3. ir pasakykite man, kokį čekį reikia patikrinti kiekvienam“.
Srauto susiaurėjimas hipoteze
Sistemingas derinimas – tai menas po vieną panaikinti galimybes. Naudokite AI hipotezėms generuoti ir eksperimentui suplanuoti, kad patikrintumėte kiekvieną hipotezę; Tada paleiskite eksperimentą ir grąžinkite rezultatą. Šis ciklas yra daug greitesnis nei įprotis atlikti atsitiktinius pakeitimus ir sustoti, vadinamas „šautuvų derinimu“.
Dvejetainės paieškos (padalinių) pagalbinės priemonės raginimas: "Šios klaidos nebuvo vakar, ji yra šiandien. Noriu sužinoti, kuris iš paskutinių 20 pakeitimų atnešė klaidą su bisect. Pateikite man nuoseklų planą: kurį tašką turėčiau išbandyti, į kurią pusę turėčiau eiti priklausomai nuo rezultato. Taip pat nurodykite, ką tiksliai patikrinti kiekviename žingsnyje."
Žurnalo įterpimo strategijos raginimas: "Negaliu rasti klaidos, nes nematau šios funkcijos tarpinių reikšmių. Nurodykite, kuriuose taškuose turiu pridėti žurnalo eilutes, kurios spausdina kokius kintamuosius. Kiekvienam žurnalui pridėkite paaiškinimą "ką aš išmoksiu iš šio žurnalo". Taip pat nurodykite įspėjimus, kurie neleis man registruoti konfidencialių duomenų."
Patarimas: jei negalite išspręsti klaidos, dažniausiai problema yra kažkur, kur manote neteisingai. Paklauskite AI „kokia mano prielaida gali būti klaidinga? Klausimas sulaužys jūsų aklumą. Sunkiausios klaidos slepiasi toje vietoje, kur sakote: „Esu tikras, kad tai veikia teisingai“.
Silpnas raginimas / stiprus raginimas
WEAK:"Mano kodas pateikia klaidą, ištaisykite ją: [200 kodo eilučių]"(Rezultatas: AI nežino, kokia tai klaida, ko tikimasi; pateikia bendrų pasiūlymų, pagrįstų spėlionėmis, dauguma jų yra nenaudingi.)STRONG:"Gavau NullPointerException. Tikimasi: turėtų būti grąžintas naudotojų sąrašas. Aktualus: "Java" išsprogsta. 17. Minimalus pasikartojimas: tai atsitinka, kai vartotojų sąrašas yra tuščias, bet ne tada, kai jis pilnas.
Galingas raginimas pateikia klaidą kontekste: kokiu atveju ji įvyksta (tuščias sąrašas), tokiu atveju neįvyksta (visas sąrašas). Šis vienintelis užuomina ("atsitinka, kai tuščia") beveik tiesiogiai nurodo pagrindinę priežastį. Kadangi ši informacija nepasiekiama silpnoje eilutėje, AI daro aklai spėjimą.
Pataisymo tikrinimas
Pataisymas yra tikras pataisymas, jei jis atlieka tris dalykus:
kontroliuoti
Klausimas
Kaip patikrinti
Ar klaida išnyko?
Ar dabar veikia tas pats įrašas?
Vėl paleiskite minimalų repro
Nėra naujų klaidų?
Ar dar kas nors sugedo?
Paleiskite visą bandymų rinkinį
Ar nepasikartos?
Ar ta pati klaida pasikartos?
Šiam scenarijui pridėkite regresijos testą
Pataisymai, atliekami nenustačius pagrindinės priežasties, dažnai slopina simptomą. Pavyzdžiui, nulinės klaidos užglaistymas su "praleisti, jei nulis" padaro tikrąją priežastį: "kodėl duomenys pateikiami nuliui?" nematoma, o klaida kartojasi kitur.
Mini dėklai
1 atvejis – simptomų slopinimo spąstai. Komanda nutildo atsitiktinę nulinę klaidą su try-catch; Klaida dingsta, bet po 2 savaičių duomenų trūksta. Tikroji priežastis yra ta, kad pasibaigus skirtajam laikui paslauga grąžina nulį. Kai klausiate AI „kodėl jis tampa nulinis?“, išryškėja pagrindinė priežastis; Tikrasis taisymas trunka 1 valandą, bet yra nuolatinis.
2 atvejis – minimali atkūrimo galia. Kūrėjas negali ištaisyti klaidos, kuri sako „kartais sugenda“. Tai sumažina klaidą iki mažiausio įvesties pagal AI pasiūlymą: problema kyla tik failų pavadinimuose, kuriuose yra turkiškų simbolių (kodavimo klaida). Kai 300 neapibrėžtumo eilučių sumažinamos iki 5 galutinio repro eilučių, sprendimas tampa akivaizdus.
3 atvejis. Antiregresijos testas. AI ištaiso datos skaičiavimo klaidą. Inžinierius tuo nepatenkintas; prideda klaidingo scenarijaus regresijos testą (mėnesio pabaiga, sausio 31 d. + 1 mėnuo). Kai kitas pakeitimas paliečia tą pačią sritį po 4 mėnesių, testas pasidaro raudonas ir klaida užfiksuojama dar nepasiekus gamybos.
Dažnos klaidos
- Tai reiškia "neveikia, pataisykite". Be klaidos teksto, lūkesčių ir repro, AI spėja.
- Neduodamas kamino pėdsakų. Krūvos pėdsakas dažnai tiesiogiai nurodo pagrindinę priežastį.
- Toliau atlikite atsitiktinius pakeitimus. Eksperimentai, nenustatant hipotezės, švaisto laiką.
- Simptomo slopinimas ir pagrindinės priežasties nebuvimas. Klaida atgimsta kitur.
- Taisymas neužtikrintas regresijos testavimu. Ta pati klaida tyliai pasikartos ateityje.
Apibendrinant
Veiksmingas derinimas yra sistemingas siaurinimas, o ne spėliojimas. Suteikus AI visą klaidos tekstą, dėklo pėdsaką, minimalią atkūrimo ir aplinkos informaciją, eksponentiškai padidėja tikimybė rasti pagrindinę priežastį. Naudokite AI hipotezėms generuoti ir eksperimentui suplanuoti, kad patikrintumėte kiekvieną hipotezę; Vykdote eksperimentą. Laikykite taisymą „pataisytu“ tik tada, kai matote, kad klaidos nebėra, naujų klaidų nėra ir ji apsaugota regresijos testavimu.
Taikymo užduotis
Apsvarstykite tikrą ar dirbtinę klaidą. Pirmiausia sumažinkite klaidą iki mažiausio atkūrimo (kuriame įvestyje ji atsiranda, kurioje ne). Naudodami veiksmingą klaidų recepto raginimą, paprašykite AI pateikti 3 pagrindines hipotezes ir kiekvieno patikrinimo veiksmą. Raskite pagrindinę priežastį išbandydami hipotezes po vieną, ištaisykite jas, tada parašykite ir vykdykite šio scenarijaus regresijos testą, kad parodytumėte, jog klaida dingo ir testas suteikia apsaugą.
kontrolinis sąrašas
- [ ] Išaiškinau simptomą kaip „tikėtas ir įgyvendintas“.
- [ ] Pateikiau visą klaidos tekstą ir dėklo pėdsaką AI.
- [ ] Klaidą sumažinau iki mažiausio atkūrimo.
- [ ] Tikrindamas hipotezes po vieną radau pagrindinę priežastį.
- [ ] Užuot slopinęs simptomą, ištaisiau pagrindinę priežastį.
- [ ] Pridėjau ir atlikau regresijos testą dėl tos pačios klaidos.