🔧 4 DEBUGGING: TROVARE E CORREGGERE ERRORI
Questa guida è strutturata per trasformare il debugging da momento di frustrazione a processo metodico di indagine scientifica. Debuggare non significa solo "aggiustare il codice", ma comprendere profondamente il flusso d'esecuzione del software.
1. Tassonomia degli Errori: Identificare il Nemico
In Python, non tutti gli errori si manifestano allo stesso modo. Saperli distinguere è il primo passo per risolverli.
Errori Sintattici (Syntax Errors): Sono violazioni delle regole grammaticali del linguaggio. Il codice non viene nemmeno avviato.
Esempio:
if x = 5:(manca il doppio uguale) o una parentesi non chiusa.
Errori di Runtime (Exceptions): Il codice è scritto bene, ma accade qualcosa di imprevisto durante l'esecuzione che il computer non sa gestire.
Esempio:
10 / 0(ZeroDivisionError) o cercare di aprire un file che non esiste.
Errori Logici (Semantic Errors): I più insidiosi. Il programma gira senza errori, ma il risultato è sbagliato.
Esempio: Calcolare la media dividendo per un numero errato o usare
>al posto di<.
2. Strategie di Debugging: L'Approccio Metodico
Invece di cambiare il codice a caso sperando che funzioni, segui queste tecniche:
Isolamento (Divide et Impera): Se hai un programma di 100 righe, commentane una parte o sposta le funzioni sospette in un file separato per testarle singolarmente.
Stampe di Controllo (Print Debugging): Inserire
print(f"Valore di x: {x}")prima e dopo un'operazione critica per verificare se i dati sono quelli attesi.Rubber Duck Debugging: Spiegare il codice riga per riga a un oggetto inanimato (o a un collega). Spesso l'errore balza all'occhio nell'atto di verbalizzare la logica.
3. Strumenti Avanzati: Usare l'IDE come un Chirurgo
I moderni ambienti di sviluppo (IDE) offrono strumenti molto più potenti della semplice stampa a video.
Breakpoints e Step Execution
Breakpoint: Un "posto di blocco" che metti su una riga di codice. L'esecuzione si fermerà esattamente lì.
Step Over: Esegue la riga corrente e passa alla successiva.
Step Into: Entra dentro una funzione per vedere cosa succede al suo interno.
Variable Watch: Una finestra che mostra il valore di tutte le variabili attive. Se vedi un
Nonedove ti aspetti un numero, hai trovato il colpevole.
Consiglio didattico: Su Thonny, l'icona della "fogliolina" (Debug current script) permette di vedere Python che valuta ogni singola sotto-espressione, ideale per i principianti.
4. Decifrare il Traceback (Il Messaggio di Errore)
Il Traceback è la "scatola nera" del tuo crash. Va letto dal basso verso l'alto:
L'ultima riga ti dice cosa è successo (es.
NameError: name 'y' is not defined).Le righe precedenti ti dicono dove è successo (file e numero di riga).
5. Attività Didattiche Proposte
| Attività | Descrizione | Obiettivo |
| Caccia al Bug | Fornire un codice che calcola l'area del cerchio ma usa + invece di *. | Distinguere tra errore logico e sintattico. |
| Diario del Debug | Chiedere allo studente di scrivere: "Cosa pensavo facesse il codice" vs "Cosa faceva davvero". | Sviluppare metacognizione. |
| Analisi del Flusso | Usare il debugger di VS Code per monitorare un ciclo for che non termina mai. | Capire il controllo di flusso e le condizioni di uscita. |
