Vienība 5 / 12

Atkļūdošana un traucējummeklēšana

Ieguvumi:

  • Spēja efektīvi aprakstīt AI kļūdu ar kļūdas ziņojumu, steka izsekošanu un mazāko reproducēšanas gadījumu
  • Spēja palaist sistemātisku atkļūdošanas plūsmu ar AI, lai atrastu galveno cēloni, izvirzot hipotēzes un soli pa solim to sašaurinot.
  • Spēja pārbaudīt, vai AI ieteiktais labojums patiešām atrisināja problēmu, veicot reproducēšanu un regresijas testēšanu

Atkļūdošanas uzdevums ir noskaidrot, kāpēc programma darbojas citādi, nekā paredzēts, un to novērst, un tas patērē daudz inženieru laika. Laba atkļūdošana nav balstīta uz minēšanas spēli, bet gan uz sistemātisku sašaurināšanos: noskaidro simptomu, izvirzi hipotēzi, pārbaudi hipotēzi, nonāc pie pamatcēloņa. AI ir ļoti spēcīgs partneris šajā ciklā; Bet tikai tad, ja jūs viņam sniedzat pareizo informāciju. Sakot “kods nedarbojas, labojiet to”, AI liek uzminēt un sniegt vispārīgus ieteikumus. Sniedziet tam pilnu kļūdas ziņojumu, steka izsekojamību un mazāko reprodukcijas paraugu, un kopā jūs atradīsiet galveno cēloni.

Šajā nodaļā mēs redzēsim, kā efektīvi aprakstīt AI kļūdu, soli pa solim sašaurināt hipotēzes un, izmantojot regresijas testu, pārbaudīsim, vai piedāvātais labojums patiešām atrisina problēmu. Atcerieties: kļūdas "labošana" un "kļūdas simptomu apspiešana" ir divas dažādas lietas; Labojums, kas veikts, neatrodot galveno cēloni, pārvieto kļūdu uz citu vietu.

Jēdzieni: Stack trace: izgāztuves, kas parāda, kuras funkcijas kādā secībā tika izsauktas kļūdas brīdī. Minimālais repro: vienkāršākais, īsākais kods/ievade, kas izraisa kļūdu. Galvenais iemesls: patiesais problēmas avots, nevis simptoms. Regresijas pārbaude: testēšana, kas nodrošina, ka viena un tā pati kļūda neatkārtojas.

AI kļūdas aprakstīšana

Iespēja, ka AI atradīs galveno cēloni, ir tieši proporcionāla jūsu sniegtās informācijas kvalitātei. Labs kļūdas apraksts ietver: ko jūs mēģinājāt darīt, ko jūs gaidījāt, kas notika, precīzs kļūdas teksts un steka izsekošana, iesaistītais kods, vide (valoda/versija/OS) un mazākais paraugs, kas radīja kļūdu.

  1. Noskaidrojiet simptomu. Formātā "Paredzamais X, aktualizētais Y".
  2. Ielīmējiet pilnu kļūdas tekstu un steka trasējumu. Nesaīsiniet to, cenzējiet to, bet nelauziet struktūru.
  3. Dodiet mazāko reprodukciju. Minimālā ievade un kods, kas izraisa kļūdu.
  4. Norādiet vidi. Valodas versija, bibliotēkas versija, izpildlaika vide.

Efektīva kļūdas apraksta uzvedne: "Es atkļūdoju kļūdu. Informācija: - Ko es cenšos darīt: [X] - Paredzamā darbība: [Y] - Faktiskā darbība: [Z] - Pilns kļūdas ziņojums un steka izsekošana: [ielīmēt] - Vide: [valoda/versija, bibliotēka/versija]- Minimālais iesaistītais kods: [kods], visticamāk, izraisa saknes sarakstu 3. un pastāstiet man, kādu čeku pārbaudīt katram."

Plūsmas sašaurināšanās ar hipotēzi

Sistemātiska atkļūdošana ir māksla iespēju pa vienam likvidēt. Izmantojiet AI, lai ģenerētu hipotēzes un izstrādātu eksperimentu, lai pārbaudītu katru hipotēzi; Pēc tam veiciet eksperimentu un atgrieziet rezultātu. Šis cikls ir daudz ātrāks nekā ieradums veikt nejaušas izmaiņas un apstāties, ko sauc par "šautu atkļūdošanu".

Binārās meklēšanas (bisekcijas) palīga uzvedne: "Šīs kļūdas nebija vakar, tā ir šodien. Vēlos noskaidrot, kura no pēdējām 20 izmaiņām izraisīja kļūdu ar bisect. Sniedziet man soli pa solim plānu: kurā punktā ir jāpārbauda, ​​uz kuru pusi jāiet atkarībā no rezultāta. Pastāstiet arī, ko tieši pārbaudīt katrā solī."

Žurnāla ievietošanas stratēģijas uzvedne: "Es nevaru atrast kļūdu, jo nevaru redzēt šīs funkcijas starpvērtības. Pastāstiet man, kuros punktos man ir jāpievieno žurnāla rindas, kas drukā kādus mainīgos. Katram žurnālam pievienojiet paskaidrojumu "ko es uzzināšu no šī žurnāla". Norādiet arī brīdinājumus, kas neļaus man reģistrēt konfidenciālus datus."

Padoms. Ja nevarat novērst kļūdu, lielāko daļu laika problēma ir kaut kur, ko esat pieņēmis nepareizi. Pajautājiet AI "kāds mans pieņēmums varētu būt nepareizs?" Jautāšana salauzīs tavu aklumu. Vissmagākās kļūdas slēpjas vietā, kur jūs sakāt: "Es esmu pārliecināts, ka tas darbojas pareizi".

Vāja uzvedne / spēcīga uzvedne

VĀJS:"Mans kods parāda kļūdu, izlabojiet to: [200 koda rindiņas]"(Rezultāts: AI nezina, kas tā ir kļūda, kas ir gaidāms; tas sniedz vispārīgus ieteikumus, pamatojoties uz minējumiem, vairums no tiem ir bezjēdzīgi.)STRONG:"Es saņemu NullPointerException. Paredzams: lietotāju saraksts ir jāatgriež. Aktuāls: Eksplodē Java izsaukums [Stack. 17. Minimālais atkārtošanās skaits: tas notiek, kad lietotāju saraksts ir tukšs, bet ne, kad tas ir pilns. Saistītās 15 rindas: [kods] Paskaidrojiet, kāpēc tiek aktivizēts tukšais saraksts, un pēc tam iesakiet labojumu.

Spēcīgā uzvedne ievieto kļūdu kontekstā: kurā gadījumā tā notiek (tukšs saraksts), kurā gadījumā tas nenotiek (pilns saraksts). Šis vienīgais pavediens ("notiek, kad tukšs") gandrīz tieši norāda uz galveno cēloni. Tā kā šī informācija nav pieejama vājajā uzvednē, AI veic aklu minējumu.

Labojuma pārbaude

Labojums ir īsts labojums tikai tad, ja tas veic trīs lietas:

kontrole

Jautājums

Kā pārbaudīt

Vai kļūda ir pazudusi?

Vai tagad darbojas tas pats ieraksts?

Atkal palaist minimālo repro

Nav jaunu kļūdu?

Vai vēl kaut kas salauzts?

Palaidiet visu testa komplektu

Vai tas neatkārtosies?

Vai tā pati kļūda atkārtosies?

Pievienojiet šim scenārijam regresijas testu

Korekcijas, kas veiktas, neatrodot galveno cēloni, bieži nomāc simptomu. Piemēram, nulles kļūdas aizrādīšana ar "izlaist, ja nulle" padara patieso iemeslu: "kāpēc dati tiek saņemti par nulli?" neredzams, un kļūda atkārtojas citur.

Mini futrāļi

1. gadījums — simptomu nomākšanas slazds. Komanda apklusina neregulāru nulles kļūdu ar try-catch; Kļūda pazūd, bet pēc 2 nedēļām datu trūkst. Patiesais iemesls ir tas, ka pakalpojuma noildze atgriež nulli. Kad jūs jautājat AI "kāpēc tas kļūst nulles?", parādās galvenais iemesls; Patiesais labojums aizņem 1 stundu, bet ir neatgriezenisks.

2. gadījums — minimāla atskaņošanas jauda. Izstrādātājs nevar izlabot kļūdu, kas saka: "tā ik pa laikam avarē". Tas samazina kļūdu līdz mazākajai ievadei ar AI ieteikumu: problēma rodas tikai failu nosaukumos, kuros ir turku rakstzīmes (kodēšanas kļūda). Kad 300 nenoteiktības līnijas tiek samazinātas līdz 5 galīgā repro rindām, risinājums kļūst acīmredzams.

3. gadījums — antiregresijas tests. AI novērš datuma aprēķināšanas kļūdu. Inženieris ar to nav apmierināts; pievieno regresijas testu kļūdainajam scenārijam (mēneša beigas, 31. janvāris + 1 mēnesis). Kad 4 mēnešus vēlāk to pašu apgabalu pieskaras cita izmaiņa, tests kļūst sarkans un kļūda tiek uztverta, pirms tā nonāk ražošanā.

Biežas kļūdas

  • Tas nozīmē "tas nedarbojas, izlabojiet to". AI min bez kļūdas teksta, gaidīšanas un repro.
  • Nedodot steku pēdas. Kaudzes pēdas bieži tieši norāda uz galveno cēloni.
  • Turpiniet veikt nejaušas izmaiņas. Eksperimenti, neizvirzot hipotēzi, tērē laiku.
  • Simptomu nomākšana un pamatcēloņa pazušana. Kļūda atdzimst citur.
  • Labojuma nenodrošināšana ar regresijas testēšanu. Tā pati kļūda klusi atkārtojas nākotnē.

Rezumējot

Efektīva atkļūdošana ir sistemātiska sašaurināšanās, nevis minēšana. Piešķirot AI pilnu kļūdas tekstu, steka izsekošanu, minimālu reproducēšanu un vides informāciju, eksponenciāli palielinās iespēja atrast galveno cēloni. Izmantojiet AI, lai ģenerētu hipotēzes un izstrādātu eksperimentu, lai pārbaudītu katru hipotēzi; Jūs veicat eksperimentu. Uzskatiet, ka labojums ir "izdarīts" tikai tad, ja redzat, ka kļūda ir pazudusi, nav ieviestas jaunas kļūdas, un to aizsargā regresijas pārbaude.

Lietojumprogrammas uzdevums

Apsveriet īstu vai mākslīgu kļūdu. Vispirms samaziniet kļūdu līdz mazākajai atveidei (kurā ievadē tā rodas, kurā nē). Izmantojot efektīvo kļūdu receptes uzvedni, pajautājiet AI 3 hipotēzes par pamatcēloņiem un katrai verifikācijas darbību. Atrodiet galveno cēloni, pārbaudot hipotēzes pa vienai, izlabojiet to, pēc tam uzrakstiet un palaidiet regresijas testu šim scenārijam, lai parādītu, ka kļūda ir pazudusi un pārbaude nodrošina aizsardzību.

kontrolsaraksts

  • [ ] Es noskaidroju simptomu kā "gaidāms pret realizēto".
  • [ ] Es nodevu AI pilnu kļūdas tekstu un steka izsekošanu.
  • [ ] Es samazināju kļūdu līdz mazākajai reprodukcijai.
  • [ ] Pārbaudot hipotēzes pa vienai, es atklāju galveno cēloni.
  • [ ] Tā vietā, lai apspiestu simptomus, es novērsu galveno cēloni.
  • [ ] Es pievienoju un veicu regresijas testu tai pašai kļūdai.