Dal sintomo alla causa
Una prenotazione può sembrare riuscita ma essere duplicata o non salvata. Il debugging parte da ciò che accade davvero: osservare, isolare e verificare; non modificare codice a tentativi.
Aiutami a diagnosticare un errore di prenotazione. Separa ciò che è osservato dalle ipotesi, chiedi i dati mancanti e suggerisci prove non distruttive prima di qualsiasi modifica.
Quattro parole che non vanno confuse
Sintomo: il risultato visibile. Causa: il meccanismo che lo produce. Correzione: la modifica che rimuove la causa. Prova: il test che conferma il risultato. Un messaggio di errore non equivale alla diagnosi.
Per questo errore separa sintomo, causa ipotizzata, correzione proposta e prova necessaria. Non trattare il messaggio di errore come una spiegazione completa. [errore e contesto]
Passaggio 1 · Il risultato atteso
Prima di aprire il codice descrivi il comportamento corretto con un esempio misurabile. «Registrare una sola prenotazione» aiuta molto più di «non funziona».
Fammi definire il risultato atteso in modo verificabile: input, output, condizioni e comportamento da preservare. Poi chiedimi che cosa avviene invece.
Passaggio 2 · Raccogliere le prove
Raccogli testo esatto dell’errore, stack trace, orario e comportamento osservato. Elimina token, password e dati personali prima di condividere log o schermate.
Aiutami a raccogliere prove dell’errore. Indicami quali messaggi, righe e log sono pertinenti, e come oscurare segreti e dati personali. [sintomo]
Passaggio 3 · Riprodurre il difetto
Annota sequenza dei clic, dati di prova, browser, dispositivo, linguaggio e versione. Un bug che compare solo con un campo vuoto o su telefono offre indizi importanti.
Progetta una procedura minima e ripetibile per ricreare questo bug con dati fittizi. Includi ambiente, passaggi, input e risultato osservato. [descrizione]
Passaggio 4 · Tre ipotesi, tre prove
Ordina fino a tre cause plausibili e associa a ciascuna un esperimento che possa confermarla o smentirla. Evita una lista infinita di possibili cause.
Non correggere subito. Elenca fatti osservati, fino a tre cause plausibili ordinate per probabilità, una prova per ciascuna e le informazioni mancanti. [errore]
Passaggio 5 · Isolare la causa
Riduci il problema a un frammento minimo riproducibile. Non cambiare contemporaneamente query, template e configurazione: perderesti la possibilità di capire quale modifica ha funzionato.
Aiutami a ridurre questo errore a un caso minimo riproducibile, mantenendo il comportamento difettoso. Proponi una prova alla volta. [codice]
Passaggio 6 · Correggere il minimo
Conserva una copia prima di intervenire e preferisci una modifica circoscritta. Non disabilitare controlli di sicurezza, log o validazioni per far scomparire il sintomo.
Dopo avere identificato la causa, proponi la modifica minima, spiegando il rischio di regressione e come tornare alla versione precedente. [codice e causa confermata]
Passaggio 7 · Dimostrare il risultato
Ripeti il test che falliva e prova casi vicini: input vuoti, doppi clic, date limite e browser diversi. Se non hai eseguito il programma, non dichiarare che il bug è risolto.
Prepara test prima/dopo e di regressione per questa modifica. Distingui i test da eseguire dai risultati effettivamente osservati. [bug e patch]
Laboratorio del libro · 1020 anziché 30
Due campi HTML contengono le stringhe "10" e "20". In JavaScript prezzo1 + prezzo2 può concatenarle e produrre "1020". Convertire i valori è necessario, ma vanno gestiti anche input vuoti, non numerici e, per il denaro reale, precisione e arrotondamenti.
In JavaScript, due valori letti da campi di un modulo vengono concatenati invece di sommarsi. Il codice è: const totale = prezzo1 + prezzo2; Spiega come controllare i tipi, proponi una correzione che gestisca valori non numerici e scrivi almeno quattro test. Non presumere input sempre validi.
Quando la diagnosi dell’AI è sbagliata
Un assistente può inventare funzioni inesistenti o proporre una soluzione elegante al problema sbagliato. Domanda sempre quale risultato confermerebbe l’ipotesi e quale la smentirebbe.
Valuta criticamente questa diagnosi: quale prova la conferma, quale la smentisce e quali informazioni mancano? Non inventare funzioni, versioni o test eseguiti. [diagnosi]
Debugging senza esporre dati
Nei log possono comparire email, percorsi interni, token e identificativi. Condividi soltanto frammenti anonimizzati. Per sistemi sensibili usa ambienti di prova e coinvolgi i responsabili competenti.
Aiutami a preparare un report di errore anonimo, sostituendo segreti e dati personali con segnaposto e mantenendo soltanto le informazioni tecniche indispensabili.
Un rapporto da conservare
Documenta sintomo iniziale, condizioni di riproduzione, ipotesi scartate, causa confermata, patch, test realmente eseguiti e problemi residui. La documentazione rende più semplice evitare ricadute.
Prepara un rapporto di debugging usando soltanto i dati che fornirò. Separa sintomi, ipotesi scartate, causa confermata, modifica, test effettivamente eseguiti e questioni aperte. Concludi con una checklist di regressione.
14 casi pratici · Dal pulsante immobile al deploy
Ogni caso segue lo stesso metodo: descrivere il sintomo, raccogliere prove, distinguere ipotesi, applicare una modifica minima e verificare le regressioni. I primi sette casi sono introduttivi; i successivi affrontano problemi avanzati.
Pulsante che non reagisce
Il clic non produce un risultato visibile; controlla il momento in cui lo script collega l’evento, l’esistenza dell’elemento e gli errori in console.
Analizza un pulsante HTML e JavaScript che non reagisce al clic. Prima chiedimi HTML, JavaScript, errori della console e quando il codice viene eseguito. Proponi controlli ordinati e una modifica minima. Non riscrivere tutta la pagina.
Data che cambia giorno
Un promemoria previsto per lunedì appare domenica: distingui data civile, istante UTC, parsing e fuso orario.
Aiutami a diagnosticare uno scostamento di un giorno nella visualizzazione di una data. Chiedimi formato, fuso orario, parsing e ambiente. Proponi test vicino a mezzanotte e al cambio d’ora.
Modulo che perde i dati
Dopo un errore di validazione, i campi già compilati si svuotano. Occorre preservare soltanto valori non sensibili e rendere chiari gli errori.
Analizza un modulo che perde i dati dopo un errore di validazione. Suggerisci come preservare valori non sensibili, mostrare errori comprensibili e verificare client e server.
Contatore condiviso incoerente
Due aggiornamenti simultanei possono sovrascriversi. Un’operazione atomica può essere più adatta di una correzione grafica.
Spiegami perché un contatore condiviso può perdere aggiornamenti quando due utenti lo modificano contemporaneamente. Distingui interfaccia e concorrenza; proponi una prova riproducibile.
Ricerca che ignora gli accenti
La rubrica non trova «Èlia» digitando «elia». La normalizzazione deve essere coerente con lingua e tipo di ricerca.
Analizza una ricerca testuale che fallisce con accenti, maiuscole e spazi. Proponi una strategia coerente con la lingua, evitando di eliminare caratteri significativi.
Pagina mobile che esce dallo schermo
Controlli non visibili su telefono: individua l’elemento troppo largo e verifica zoom, orientamento e accessibilità.
Aiutami a individuare la causa di un layout che esce dallo schermo su smartphone. Chiedimi HTML, CSS, viewport e screenshot. Proponi correzioni mirate e controlli di accessibilità.
File salvato ma non trovato
Un messaggio di successo non dimostra che il file sia stato scritto nel percorso corretto.
Guidami nel debugging di un salvataggio file che sembra riuscire ma non produce un documento nel percorso previsto. Verifica percorso assoluto, permessi, errori e conferma effettiva della scrittura. Non suggerire cancellazioni.
Errore 500 dopo la migrazione PHP
Un aggiornamento può introdurre incompatibilità, estensioni mancanti, configurazioni o permessi diversi.
Aiutami a diagnosticare un errore HTTP 500 dopo l’aggiornamento PHP. Ho queste versioni e log: [dati]. Distingui incompatibilità, estensioni mancanti, configurazione e permessi. Suggerisci verifiche non distruttive, una per volta.
Query SQL improvvisamente lenta
La stessa query ora impiega più tempo: servono piano di esecuzione, indici, filtri, volume dati e misurazioni confrontabili.
Analizza una query SQL lenta. Chiedimi schema, indici, volume dati, query e piano di esecuzione anonimizzati. Proponi ipotesi e confronti misurabili senza modifiche distruttive immediate.
Timeout intermittenti di una API
Distinguere rete, rate limit, durata di elaborazione e retry; non ripetere automaticamente operazioni che possono duplicarsi.
Esamina timeout intermittenti verso un’API. Distingui rete, limiti del servizio, elaborazione e retry. Proponi log sicuri, identificatori di richiesta e tentativi limitati.
Test che fallisce soltanto nella suite
Il test passa isolato ma fallisce con altri: possibili stati condivisi, dipendenze temporali e risorse non ripulite.
Analizza un test instabile che passa isolatamente ma fallisce nella suite. Cerca stato globale, dati condivisi, dipendenze temporali e risorse non ripulite. Proponi isolamento e verifica.
Dati di un altro account nella cache
Un sospetto difetto di isolamento tra utenti va trattato come incidente: prima contenimento, poi verifiche con account fittizi.
Aiutami a gestire in modo difensivo un possibile difetto di autorizzazione o cache che espone dati tra account. Indica prima contenimento e verifiche sicure con dati fittizi. Non suggerire sfruttamento su sistemi reali.
Memoria in crescita durante un import
Il consumo aumenta elaborando molte righe, ma non è automaticamente una perdita di memoria.
Analizza un aumento progressivo della memoria durante l’elaborazione di un file grande. Chiedimi linguaggio, dimensioni, profilo e frammento minimo. Proponi misure e una soluzione verificabile senza presumere un leak.
Deploy completato, applicazione non sana
Una pipeline verde non garantisce che le funzioni critiche siano disponibili dopo la pubblicazione.
Analizza un deploy riuscito seguito da errori applicativi. Distingui pipeline, configurazione, migrazioni, dipendenze e health check. Proponi controlli in ordine di rischio e criteri per rollback.
Una diagnosi completa, senza salti logici
Il prompt finale del libro richiede contesto, comportamento atteso e osservato, errore completo, riproduzione e codice senza segreti. L’assistente deve formulare al massimo tre cause plausibili, spiegare come confermarle e proporre la patch soltanto dopo avere chiarito la causa.
Agisci come un debugger esperto, prudente e didattico. Linguaggio e versione: [dati]. Ambiente: [dati]. Comportamento atteso: [descrizione]. Comportamento osservato: [descrizione]. Errore completo: [errore]. Passaggi per riprodurlo: [passaggi]. Codice pertinente: [senza segreti]. Prima separa fatti e ipotesi. Individua fino a tre cause plausibili, con una prova che confermi o smentisca ciascuna. Guidami passo dopo passo partendo dai controlli meno rischiosi. Proponi la correzione minima solo dopo avere chiarito la causa. Indica test e regressioni; non inventare esecuzioni.
🔎 Prima e dopo · Quattro esempi inediti
Seleziona un caso: dal tentativo di correggere a intuito a una diagnosi che si può verificare. Ogni prompt è copiabile.
Il valore del sensore è sbagliato: cambio tutta la formula.
Il sensore mostra 120% in alcune letture. Prima verifico unità, scala e valori grezzi con tre campioni noti, poi intervengo solo sulla conversione se risulta errata.
Aiutami a diagnosticare un sensore di umidità che mostra 120%. Separa dati osservati e ipotesi su scala, calibrazione e conversione. Proponi tre prove e una patch minima solo dopo la diagnosi.
🛠️ Debugger Lab · Crea il tuo prompt
Descrivi un errore reale o inserisci un esempio. Il laboratorio prepara una richiesta strutturata da copiare in ChatGPT; non esegue codice, non invia dati e non richiede API.
🧠 Quiz finale · Capitolo 34
Tre domande per verificare il metodo. Dopo la correzione comparirà soltanto ✓ o ✗ accanto alla risposta selezionata.
1. Qual è il primo passo quando compare un bug?
2. Come si valuta una possibile causa?
3. Quando è corretto dichiarare che un test è passato?
Rispondi alle tre domande per vedere il punteggio.
I progressi del quiz sono salvati su questo dispositivo.