Unitate 5 / 12

Depanare și depanare

Câștiguri:

  • Abilitatea de a descrie eficient un bug către AI cu mesaj de eroare, urmărire a stivei și cea mai mică instanță de reproducere
  • Capacitatea de a rula un flux sistematic de depanare cu AI pentru a găsi cauza principală prin ipoteza și restrângerea acesteia pas cu pas
  • Capacitatea de a verifica dacă remedierea sugerată de AI a remediat de fapt problema prin reproducere și testare de regresie

Depanarea este sarcina de a afla de ce un program se comportă diferit de cel așteptat și de a-l remedia, iar majoritatea inginerilor consumă mult timp. O depanare bună nu se bazează pe un joc de ghicituri, ci pe o restrângere sistematică: clarificați simptomul, formulați ipoteze, testați ipoteza, ajungeți la cauza principală. AI este un partener foarte puternic în acest ciclu; Dar numai dacă îi oferiți informațiile corecte. A spune „codul nu funcționează, remediați-l” forțează AI ​​să ghicească și să facă sugestii generale. Dați-i mesajul de eroare complet, urmărirea stivei și cel mai mic eșantion de reproducere și împreună veți găsi cauza principală.

În această unitate, vom vedea cum să descriem eficient o eroare pentru AI, să restrângem ipotezele pas cu pas și să verificăm prin teste de regresie că remedierea propusă rezolvă de fapt problema. Amintiți-vă: „repararea” unei erori și „suprimarea simptomului erorii” sunt două lucruri diferite; Corecția făcută fără a găsi cauza principală mută eroarea în alt loc.

Concepte: Urmărirea stivei: un dump care arată ce funcții au fost apelate în ce ordine la momentul erorii. Reproducție minimă: cel mai simplu și mai scurt cod/intrare care declanșează eroarea. Cauza principală: sursa reală a problemei, nu simptomul. Testare de regresie: Testare care asigură că aceeași eroare nu se repetă.

Descrierea unui bug către AI

Probabilitatea ca AI să găsească cauza principală este direct proporțională cu calitatea informațiilor pe care le furnizați. O descriere bună a erorii include: ce ați încercat să faceți, ce vă așteptați, ce s-a întâmplat, textul exact al erorii și urmărirea stivei, codul implicat, mediul (limbă/versiunea/OS) și cel mai mic eșantion care a produs eroarea.

  1. Clarificați simptomul. În formatul „X așteptat, Y actualizat”.
  2. Lipiți textul complet al erorii și stivuiți urma. Nu-l scurtați, cenzurați-l, dar nu rupeți structura.
  3. Oferă cea mai mică reproducere. Intrare minimă și cod care declanșează eroarea.
  4. Specificați mediul. Versiune de limbă, versiune de bibliotecă, mediu de rulare.

Prompt de descriere eficientă a erorii: „Depanez o eroare. Informații:- Ce încerc să fac: [X]- Comportament așteptat: [Y]- Comportament real: [Z]- Mesaj de eroare complet și urmărire a stivei: [paste]- Mediu: [limbă/versiune, bibliotecă/versiunea]- Cod minim implicat: [cod] Nu-mi da mai întâi o listă de verificare directă a cauzei celei mai probabile și nu-mi da-mi o listă de verificare directă în ordinea cea mai probabilă3. să verifice pentru fiecare”.

Îngustarea fluxului prin ipoteză

Depanarea sistematică este arta de a elimina posibilitățile una câte una. Utilizați AI pentru a genera ipoteze și proiectați experimentul pentru a testa fiecare ipoteză; Apoi rulați experimentul și returnați rezultatul. Acest ciclu este mult mai rapid decât obiceiul de a face modificări aleatorii și de a opri, numit „depanare a puștilor”.

Prompt de ajutor de căutare binară (bisectie): "Această eroare nu a fost acolo ieri, este acolo astăzi. Vreau să aflu care dintre ultimele 20 de modificări a adus eroarea cu bisect. Dați-mi un plan pas cu pas: în ce punct să testez, la ce jumătate ar trebui să merg în funcție de rezultat. De asemenea, spuneți-mi exact ce să verific la fiecare pas."

Prompt strategie de inserare a jurnalului: „Nu pot găsi eroarea deoarece nu pot vedea valorile intermediare în această funcție. Spuneți-mi în ce puncte trebuie să adaug linii de jurnal care imprimă ce variabile. Adăugați o explicație „ce voi învăța din acest jurnal” pentru fiecare jurnal. Specificați, de asemenea, avertismentele care mă vor împiedica să înregistrez date confidențiale."

Sfat: Dacă nu puteți rezolva o eroare, de cele mai multe ori problema este undeva pe care ați presupus incorect. Întrebați AI „ce presupunere a mea ar putea fi greșită?” Cererea îți va rupe orbirea. Cele mai grele greșeli se ascund în locul în care spui „Sunt sigur că funcționează corect”.

Solicitare slabă / Solicitare puternică

WEAK: „Codul meu dă o eroare, remediați-l: [200 de linii de cod]” (Rezultat: AI nu știe ce eroare este, ce se așteaptă; oferă sugestii generale bazate pe presupuneri, majoritatea sunt inutile.) STRONG: „Primesc NullPointerException. Așteptată: lista de utilizatori ar trebui returnată. Actual: explodează. Java 17. Repetare minimă: Se întâmplă când lista de utilizatori este goală, dar nu când este plină.

Promptul puternic pune eroarea în context: caz în care se întâmplă (listă goală), caz în care nu se întâmplă (lista completă). Acest singur indiciu („se întâmplă când este gol”) indică aproape direct cauza principală. Deoarece aceste informații nu sunt disponibile în promptul slab, AI face o ghicire oarbă.

Verificarea remedierii

O remediere este doar o remediere reală dacă face trei lucruri:

control

Întrebare

Cum se verifică

A dispărut eroarea?

Funcționează aceeași intrare acum?

Rulați din nou minim repro

Fără erori noi?

Mai este ceva spart?

Rulați întreaga suită de teste

Nu se va repeta?

Va apărea din nou aceeași eroare?

Adăugați un test de regresie pentru acest scenariu

Corecțiile făcute fără a găsi cauza principală suprimă adesea simptomul. De exemplu, trecerea peste o eroare nulă cu „skip if null” face ca motivul real să fie „de ce datele vin nule?” invizibil, iar eroarea reapare în altă parte.

Mini Carcase

Cazul 1 - Capcana de suprimare a simptomelor. O echipă reduce la tăcere o eroare nulă ocazională cu un try-catch; Eroarea dispare, dar după 2 săptămâni datele apar lipsă. Motivul real este că un serviciu returnează null la expirarea timpului. Când întrebați AI „de ce devine nul?”, apare cauza principală; Remedierea reală durează 1 oră, dar este permanentă.

Cazul 2 — Putere de reproducere minimă. Un dezvoltator nu poate remedia o eroare care spune „se blochează din când în când”. Reduce eroarea la cea mai mică intrare cu sugestia AI: problema apare doar la numele fișierelor care conțin caractere turcești (eroare de codificare). Când 300 de linii de incertitudine sunt reduse la 5 linii de reproducere definitivă, soluția devine evidentă.

Cazul 3 — Testul antiregresie. AI remediază o eroare de calcul a datei. Inginerul nu este mulțumit de acest lucru; adaugă un test de regresie pentru scenariul eronat (sfârșitul lunii, 31 ianuarie + 1 lună). Când o altă modificare atinge aceeași zonă 4 luni mai târziu, testul devine roșu și bug-ul este prins înainte de a ajunge la producție.

Greșeli comune

  • Înseamnă „nu funcționează, remediați-o”. Fără text de eroare, așteptări și reproșuri, AI presupune.
  • Nu dau urma stivei. Urma stivei indică adesea direct cauza principală.
  • Continuați să faceți modificări aleatorii. Experimentele fără a stabili o ipoteză pierd timp.
  • Suprimarea simptomului și lipsa cauzei fundamentale. Eroarea renaște în altă parte.
  • Nu se asigură remedierea cu testarea de regresie. Aceeași eroare revine în tăcere în viitor.

În concluzie

Depanarea eficientă este o restrângere sistematică, nu o ghicire. Oferirea AI a textului complet al erorii, a urmăririi stivei, a reproducerii minime și a informațiilor despre mediu crește exponențial șansele de a găsi cauza principală. Utilizați AI pentru a genera ipoteze și proiectați experimentul pentru a testa fiecare ipoteză; Tu conduci experimentul. Luați în considerare o remediere „terminată” numai când vedeți că eroarea a dispărut, nu sunt introduse erori noi și este protejată de testarea regresiei.

Sarcina de aplicare

Luați în considerare o eroare reală sau artificială. Mai întâi reduceți eroarea la cea mai mică reproducere (în ce intrare apare, în care nu). Folosind promptul eficient al rețetei de erori, cereți AI-ului 3 ipoteze de cauza principală și un pas de verificare pentru fiecare. Găsiți cauza principală testând ipotezele una câte una, remediați-o, apoi scrieți și rulați un test de regresie pentru acest scenariu pentru a arăta că eroarea a dispărut și testul oferă protecție.

lista de verificare

  • [ ] Am clarificat simptomul ca „așteptat vs realizat”.
  • [ ] Am dat textul complet al erorii și urmărirea stivei către AI.
  • [ ] Am redus eroarea la cea mai mică reproducere.
  • [ ] Testând ipotezele una câte una, am găsit cauza principală.
  • [ ] În loc să suprim simptomul, am remediat cauza principală.
  • [ ] Am adăugat și am rulat un test de regresie pentru aceeași eroare.