Unità 6 / 12

Debug e analisi delle cause principali

Guadagni:

  • Possibilità di ridurre un bug alla più piccola istanza riproducibile e spostarlo nell'intelligenza artificiale con prova completa
  • Capacità di testare ipotesi basate sull'evidenza con il controllo più economico e trovare la causa principale
  • Capacità di risolvere la causa principale e proteggerla con un test di regressione anziché correggere il sintomo

Il debug è il processo per scoprire perché un software si comporta in modo imprevisto e risolverlo. È il lavoro in cui uno sviluppatore trascorre più tempo e si stanca di più; Perché la maggior parte delle volte l’errore non è dove appare, ma è nascosto qualche passo dietro. L’intelligenza artificiale è un potente partner pensante che accelera questa ricerca, ma solo se le si forniscono le prove giuste. Il debug senza prove è l’area in cui l’intelligenza artificiale produce il maggior numero di allucinazioni.

In questa unità, stabiliamo un flusso disciplinato dalla generazione dell'errore al raggiungimento della causa principale: chiarire il sintomo, raccogliere prove (messaggio di errore, analisi dello stack, registro, voce), generare un'ipotesi, testare l'ipotesi e convalidare la correzione. L’intelligenza artificiale aiuta in ogni fase; ma la decisione "risolta" viene presa vedendo che il bug è effettivamente scomparso.

Perché le prove sono tutto?

Un LLM non vede gli errori come fai tu; Lui sa solo quello che gli dici. Una frase come “L’applicazione si blocca” non fornisce quasi nessuna informazione al modello e il modello colma il divario con una previsione, ovvero un’allucinazione. A sua volta, il messaggio di errore completo, l'analisi dello stack: un'analisi di quale funzione chiama l'errore, l'input che ha attivato l'errore e cosa era previsto, ecc. Dato il comportamento osservato, il modello può classificare le probabilità reali.

Nel debug, pensa all'intelligenza artificiale come all'assistente di un detective: più prove presenti, più accurata sarà l'ipotesi che genera. Se non ci sono prove, l'assistente farà solo supposizioni e potrebbe condurti sulla pista sbagliata.

Suggerimento: prima di trasferire un bug sull'intelligenza artificiale, ridurlo al più piccolo esempio riproducibile. Il codice e l'input più piccoli che attivano l'errore rendono le cose radicalmente più semplici sia per te che per il modello; molto spesso durante questa riduzione trovi tu stesso la causa.

Passo dopo passo: flusso di analisi della causa principale

  1. Chiarire il sintomo. "Cosa sta succedendo, cosa ti aspettavi che accadesse?" Scrivi i due in una frase.
  2. Raccogli prove. Messaggio di errore completo, analisi dello stack, righe di registro pertinenti, voce di attivazione, informazioni sulla versione.
  3. Far generare l'ipotesi. Da AI "3 possibili cause che spiegano questo sintomo e come posso testarle?" chiedere.
  4. Prova prima l’ipotesi più economica. Aggiungi un registro, stampa un valore, esegui un test. Le prove confermano l’ipotesi?
  5. Correggi la causa principale, non il sintomo. Invece di mettere a tacere il sintomo con un cerotto, affronta la causa principale.
  6. Convalidare e aggiungere test di regressione. Guarda l'errore scomparire; Quindi scrivi un test che rilevi quell'errore in modo che non ritorni.

Tre mini custodie

Caso 1: l'analisi dello stack ha portato al file corretto. Un'applicazione restituiva un errore 500 su determinate richieste. Lo sviluppatore ha fornito l'analisi completa dello stack e la richiesta di attivazione all'IA; Il modello ha ipotizzato che l'errore fosse causato da un valore Nessuno in un livello di analisi della data. Lo sviluppatore ha aggiunto un registro a quella riga, lo ha verificato e lo ha risolto in 15 minuti; Il giorno prima sono state sprecate 2 ore con esperimenti non dimostrati.

Caso 2 – L’allucinazione porta su una strada sbagliata. Un altro sviluppatore ha semplicemente scritto "la connessione al database si sta interrompendo". L’IA ha accusato un’impostazione del pool di connessioni senza alcuna prova; Lo sviluppatore ha trascorso 40 minuti ad armeggiare con questa impostazione. La vera causa era un timeout lato rete ed è stata rivelata solo esaminando i log. Lezione: un'ipotesi assunta senza prove è solo probabile, non attendibile.

Caso 3: errore instabile rilevato. C'era un test che a volte falliva. All'IA è stato fornito il codice del test, il messaggio di fallimento e l'informazione "a volte passa, a volte fallisce"; il modello indicava una dipendenza tempo/ordine condivisa dei test. La revisione ha confermato che il test era basato sull'ora locale del sistema. Una volta che l'orologio è stato aggiustato (schernito), il test è diventato stabile.

Quattro modelli copiabili

Generazione di ipotesi basate sull'evidenza:

Sto eseguendo il debug di un bug. Prove di seguito.- Comportamento previsto: {{expected}}- Comportamento osservato: {{observed}}- Messaggio di errore/analisi dello stack: {{trace}}- Attivazione dell'input: {{input}}- Ambiente/versione: {{version}} Elenca le 3 cause principali PIÙ PROBABILI che spiegano questo sintomo. Per ciascuno: come posso testare (controllo più economico) e come risolverlo se è vero. Se le prove sono insufficienti, dimmi di quali informazioni aggiuntive hai bisogno.

Interpretazione dell'analisi dello stack:

Leggi questa analisi dello stack. Distinguere tra quale riga PROBABILMENTE inizia l'errore (la radice) e quali righe sono solo continuazioni della catena. Suggerisci 1-2 posti in cui cercare prima. Codice correlato:{{code}}Traccia:{{trace}}

Sottrazione minima di riproduzione:

Il codice seguente produce un errore. Riducilo all'istanza PIÙ PICCOLA che attiva comunque l'errore ma elimina tutto ciò che non è necessario. Non dare per scontato che ogni pezzo che rimuovi non influisca sull'errore, ma aggiungi una nota che dice "se l'errore scompare quando lo rimuovi, ecco perché".{{code}}

Convalida post-correzione e test di regressione:

Supponiamo che la causa principale sia {{cause}} e apporti la seguente correzione: {{fix}}.1) Questa correzione risolve effettivamente il sintomo, avrà effetti collaterali?2) Scrivi un test di regressione che rileverà questo bug in futuro.

Prompt debole / Prompt forte

Debole: "Il codice non funziona, perché?"
Forte: "Nodo 20 / Express. POST /orders restituisce 500 quando items è una stringa vuota nel corpo; avrebbe dovuto restituire 400. Stack trace: TypeError: Cannot read property of unfined (reading '0') — in allegato c'è la traccia completa e il gestore associato. Dammi le 3 cause più probabili che spiegano questo sintomo e come testarle ciascuna. [traccia + codice]"

Versione potente; Fornisce l'ambiente, l'endpoint, l'input del trigger, il tipo esatto di errore e il comportamento previsto. Il modello non può più fare previsioni, ma analisi.

passo

Il contributo dell'IA

il tuo controllo

raccogliere prove

Quali prove sono necessarie, ricorda

Raccoglie davvero prove

generazione di ipotesi

Elenca le possibili ragioni

Dà priorità al contesto

verifica delle ipotesi

Metodo di prova consigliato

Opera e osserva personalmente

correzione

la patch consiglia

Risolve la causa principale? E' vero.

regressione

scrive un test

Verifica che il test sia interrotto

Risolvere la causa principale, non il sintomo

Nella maggior parte dei casi l'intelligenza artificiale suggerirà una patch che silenzia rapidamente il sintomo: aggiungere un try/catch, inserire un controllo nullo, ingoiare l'errore. Questo a volte è vero, spesso pericoloso; perché la causa originaria rimane al suo posto e irrompe di nuovo da qualche altra parte. A ogni correzione chiediti: "Risolve la causa dell'errore o lo rende invisibile?" Una volta individuata la causa principale, la correzione è solitamente più piccola, più solida e permanente.

Attenzione: l'inserimento silenzioso di un'eccezione (catch vuoto) non risolve l'errore; semplicemente nasconde e rende impossibile la diagnosi futura. Se l’intelligenza artificiale suggerisce una “soluzione” di questo tipo, non accettatela senza metterne in discussione la causa principale.

Errori comuni

  • Fare domande senza prove. Frasi ambigue spingono il modello all'allucinazione; Fornire errore completo, traccia e input.
  • Bloccarsi sulla prima ipotesi. Il primo suggerimento dell'IA potrebbe non essere il più probabile; Inizia con l’ipotesi controllabile più economica.
  • Correggere il sintomo e perdere la causa principale. L'errore silenziato ritorna.
  • Chiusura della correzione senza verificarla. Vedi in condizioni simili alla produzione che l'errore effettivamente scompare.
  • Non scrivere test di regressione. Se non vengono aggiunti test, lo stesso errore verrà restituito silenziosamente nelle versioni successive.

In sintesi

Nel debug, la potenza dell'intelligenza artificiale è direttamente proporzionale alle prove fornite: senza il messaggio di errore completo, l'analisi dello stack, l'input di attivazione e il comportamento previsto, il modello si limita a speculare. Il flusso disciplinato (chiarire i sintomi, raccogliere prove, generare ipotesi, testare con il controllo più economico, correggere la causa principale, verificare e aggiungere test di regressione) chiude il bug in modo rapido e permanente. L'intelligenza artificiale è un generatore di ipotesi; Sei tu a decidere che il bug è effettivamente risolto.

Compito dell'applicazione

Scegli un bug reale che hai riscontrato di recente (o riproduci un bug di prova). Eseguire prima il passaggio di "riproduzione minima"; Rimuovere il codice e l'input più piccoli che attivano l'errore. Quindi ottieni 3 possibili cause e metodi di test dall'intelligenza artificiale con il modello di "generazione di ipotesi basate sull'evidenza". Testa tu stesso l'ipotesi più economica, trova la causa principale, risolvila e infine scrivi un test di regressione che rileverà questo bug in futuro e verificherà che il test sia effettivamente rotto.

lista di controllo

  • [] Riduco l'errore al campione riproducibile più piccolo prima di spostarlo nell'intelligenza artificiale.
  • [] Aggiungo al prompt il messaggio di errore completo, l'analisi dello stack, l'input e il comportamento previsto.
  • [ ] Parto da quella controllabile più economica, senza chiudermi in un’unica ipotesi.
  • [ ] Verifico di aver risolto la causa principale anziché correggere il sintomo.
  • [] Osservo che la correzione risolve effettivamente il bug.
  • [ ] Aggiungo un test di regressione per ogni bug risolto.