Üksus 5 / 12

Silumine ja tõrkeotsing

Kasu:

  • Võimalus tõhusalt kirjeldada AI-s esinevat viga veateate, virnajälje ja väikseima taasesituse eksemplariga
  • Võimalus käivitada tehisintellektiga süstemaatilist silumisvoogu, et leida algpõhjus, püstitades hüpoteesid ja kitsendada seda samm-sammult
  • Võimalus kontrollida, kas tehisintellekti pakutud parandus probleemi tegelikult lahendas, kasutades reprodutseerimist ja regressioonitesti

Silumine on ülesanne välja selgitada, miks programm käitub oodatust erinevalt, ja seda parandada ning see võtab suure osa inseneride ajast. Hea silumine ei põhine äraarvamismängul, vaid süstemaatilisel kitsendamisel: selgita sümptomit, püstita hüpotees, testi hüpoteesi, jõuda algpõhjuseni. AI on selles tsüklis väga võimas partner; Kuid ainult siis, kui annate talle õige teabe. Öeldes "kood ei tööta, parandage see" sunnib AI oletama ja tegema üldisi soovitusi. Andke sellele täielik veateade, virna jälg ja väikseim reprodutseerimisnäidis ning koos leiate algpõhjuse.

Selles üksuses näeme, kuidas tõhusalt kirjeldada AI-s esinevat viga, kitsendada hüpoteese samm-sammult ja kontrollida regressioonitesti abil, et pakutud parandus lahendab probleemi. Pidage meeles: vea "parandamine" ja "vea sümptomi mahasurumine" on kaks erinevat asja; Algpõhjust leidmata tehtud parandus viib vea teise kohta.

Mõisted: virnajälg: tõmmis, mis näitab, milliseid funktsioone millises järjekorras tõrke ajal kutsuti. Minimaalne repro: Lihtsaim ja lühim kood/sisend, mis vea käivitab. Algpõhjus: probleemi tegelik allikas, mitte sümptom. Regressioonitest: testimine, mis tagab, et sama viga ei korduks.

AI vea kirjeldamine

Tõenäosus, et tehisintellekt leiab algpõhjuse, on otseselt võrdeline teie esitatud teabe kvaliteediga. Hea veakirjeldus sisaldab järgmist: mida proovisite teha, mida ootasite, mis juhtus, täpne veatekst ja virnajälg, kaasatud kood, keskkond (keel/versioon/OS) ja väikseim näidis, mis vea tekitas.

  1. Selgitage sümptomit. Vormingus "Oodatav X, tegelik Y".
  2. Kleepige kogu veatekst ja virna jälg. Ärge lühendage seda, tsenseerige, kuid ärge rikkuge struktuuri.
  3. Andke väikseim reproduktsioon. Minimaalne sisend ja kood, mis vea käivitab.
  4. Määrake keskkond. Keeleversioon, teegi versioon, käituskeskkond.

Tõhus veakirjelduse viip: "Silun viga. Teave: - Mida ma üritan teha: [X] - Eeldatav käitumine: [Y] - Tegelik käitumine: [Z] - Täielik veateade ja virna jälg: [kleebi] - Keskkond: [keel/versioon, teek/versioon]- Minimaalne kaasatud kood: [kood] Põhjustab kõige tõenäolisemalt juurloend3. ja öelge mulle, millist tšekki tuleb igaühe puhul kontrollida."

Voolu kitsendamine hüpoteesi järgi

Süstemaatiline silumine on kunst võimaluste ükshaaval kõrvaldamiseks. Kasutage AI-d hüpoteeside loomiseks ja iga hüpoteesi kontrollimiseks katse kavandamiseks; Seejärel käivitage katse ja tagastage tulemus. See tsükkel on palju kiirem kui harjumus teha juhuslikke muudatusi ja peatuda, mida nimetatakse "haavlite silumiseks".

Kahendotsingu (poolitamise) abistaja viip: "Seda viga ei olnud eile, see on täna olemas. Tahan välja selgitada, milline viimasest 20 muudatusest tõi kaasa bisectiga vea. Andke samm-sammult plaan: millises punktis peaksin testima, millise pooleni peaksin sõltuvalt tulemusest minema. Öelge ka täpselt, mida igal sammul kontrollida."

Logi sisestamise strateegia viip: "Ma ei leia viga, kuna ma ei näe selle funktsiooni vaheväärtusi. Öelge mulle, millistes punktides pean lisama logiread, mis prindivad millised muutujad. Lisage iga logi jaoks selgitus "mida ma sellest logist õpin". Määrake ka hoiatused, mis takistavad mul konfidentsiaalseid andmeid logimast."

Näpunäide. Kui te ei saa viga lahendada, on probleem enamasti kuskil, mida olete valesti eeldanud. Küsige tehisintellektilt "milline minu oletus võib olla vale?" Küsimine murrab teie pimeduse. Kõige raskemad vead peituvad kohas, kus ütlete: "Ma olen kindel, et see töötab õigesti".

Nõrk viip / Tugev viip

NÕRK:"Minu kood annab vea, parandage see: [200 rida koodi]"(Tulemus: AI ei tea, mis viga see on, mida oodatakse; see annab oletusel põhinevaid üldisi soovitusi, enamik neist on kasutud.)STRONG:"Saan NullPointerExceptioni. Oodatakse: kasutajate loend tuleks tagastada. Tegelik: Java plahvatab ( call to get). 17. Minimaalne kordus: see juhtub siis, kui kasutajate loend on tühi, kuid mitte siis, kui see on täis.

Võimas viip asetab vea konteksti: millisel juhul see juhtub (tühi loend), millisel juhul seda ei juhtu (täielik nimekiri). See üksainus vihje ("juhtub, kui see on tühi") viitab peaaegu otseselt algpõhjusele. Kuna see teave pole nõrga viipa puhul saadaval, teeb AI pimeda oletuse.

Paranduse kinnitamine

Parandus on tõeline parandus ainult siis, kui see teeb kolme asja:

kontrolli

küsimus

Kuidas kontrollida

Kas viga on kadunud?

Kas sama sissekanne töötab praegu?

Käivitage uuesti minimaalne repro

Uusi vigu pole?

Kas midagi on veel katki?

Käivitage kogu testkomplekt

Kas see ei kordu?

Kas sama viga kordub?

Lisage selle stsenaariumi jaoks regressioonitest

Algpõhjust leidmata tehtud parandused suruvad sageli sümptomi maha. Näiteks nullvea varjutamine sõnaga "skip if null" muudab tegeliku põhjuse: "miks andmed tulevad null?" nähtamatuks ja viga kordub mujal.

Mini korpused

Juhtum 1 – sümptomite mahasurumise lõks. Meeskond vaigistab aeg-ajalt nullvea try-catchiga; Viga kaob, kuid 2 nädala pärast näivad andmed puuduvat. Tegelik põhjus on see, et teenus tagastab ajalõpu korral nulli. Kui küsite tehisintellekti "miks see nulli läheb?", ilmneb algpõhjus; Tõeline parandamine võtab aega 1 tund, kuid on püsiv.

Juhtum 2 – minimaalne taasesituse võimsus. Arendaja ei saa parandada viga, mis ütleb "see jookseb aeg-ajalt kokku". See vähendab AI soovitusel vea väikseima sisendini: probleem ilmneb ainult türgi tähemärke sisaldavate failinimede puhul (kodeerimisviga). Kui 300 määramatuse rida vähendatakse 5 repro lõplikuks reproks, muutub lahendus ilmseks.

Juhtum 3 – regressioonivastane test. AI parandab kuupäeva arvutamise vea. Insener ei ole sellega rahul; lisab eksliku stsenaariumi regressioonitesti (kuu lõpp, 31. jaanuar + 1 kuu). Kui 4 kuud hiljem puudutab sama ala veel üks muudatus, muutub test punaseks ja viga tabatakse enne tootmist.

Levinud vead

  • See tähendab "see ei tööta, parandage see". Ilma veateksti, ootuse ja reprota, AI oletab.
  • Ei anna virnale jälge. Virna jälg näitab sageli otseselt algpõhjust.
  • Jätkake juhuslike muudatuste tegemist. Katsed ilma hüpoteesi püstitamata raiskavad aega.
  • Sümptomite mahasurumine ja algpõhjuse kaotamine. Viga sünnib uuesti mujal.
  • Regressioonitestiga parandust ei tagata. Sama viga tuleb edaspidi vaikselt tagasi.

Kokkuvõttes

Tõhus silumine on süstemaatiline kitsendamine, mitte oletamine. AI-le täieliku veateksti, virnajälje, minimaalse reprodutseerimise ja keskkonnateabe andmine suurendab plahvatuslikult algpõhjuse leidmise võimalusi. Kasutage AI-d hüpoteeside loomiseks ja iga hüpoteesi kontrollimiseks katse kavandamiseks; Te käivitate katse. Arvestage, et parandus on "tehtud" alles siis, kui näete, et viga on kadunud, uusi vigu ei lisata ja see on kaitstud regressioonitestiga.

Rakenduse ülesanne

Mõelge tõelisele või kunstlikule veale. Esmalt vähendage viga väikseima reproduktsioonini (millises sisendis see esineb, millises mitte). Kasutades tõhusat vearetsepti viipa, küsige tehisintellektilt 3 algpõhjuse hüpoteesi ja igaühe jaoks kinnitusetappi. Leidke algpõhjus, testides hüpoteese ükshaaval, parandage see, seejärel kirjutage ja käivitage selle stsenaariumi jaoks regressioonitest, et näidata, et viga on kadunud ja test pakub kaitset.

kontrollnimekiri

  • [ ] Täpsustasin sümptomit kui "oodatud vs realiseeritud".
  • [ ] Andsin AI-le täieliku veateksti ja virnajälje.
  • [ ] Vähendasin vea väikseima reproduktsioonini.
  • [ ] Hüpoteese ükshaaval kontrollides leidsin algpõhjuse.
  • [ ] Sümptomite mahasurumise asemel parandasin algpõhjuse.
  • [ ] Lisasin ja tegin sama vea jaoks regressioonitesti.