Cos'è il debugging e come si fa
Cos'è il debugging spiegato semplice: come trovare e correggere i bug nel codice con print, breakpoint e metodo. Guida pratica per chi inizia a programmare.
Scrivere codice che funziona al primo colpo è raro. La maggior parte del tempo di un programmatore non passa a scrivere codice nuovo, ma a capire perché quello esistente non fa quello che dovrebbe. Questo lavoro investigativo si chiama debugging.
In questo articolo ti spiego cos'è il debugging, da dove arriva il termine "bug" e come si fa nella pratica con metodo invece che a caso.
Cos'è il debugging in parole semplici
Il debugging è il processo di individuare, analizzare e correggere gli errori (bug) presenti in un programma, in modo che il codice si comporti come previsto. In sostanza è il lavoro detective della programmazione: cerchi l'indizio che spiega il malfunzionamento.
Il termine "bug" (insetto) ha origini curiose: negli anni '40 un vero insetto finì dentro un computer causando un guasto. Da allora chiamiamo "bug" ogni errore nel software, e "debugging" l'atto di rimuoverli.
I tipi di errori che incontri
Non tutti i bug sono uguali. Conviene distinguere tre famiglie:
- Errori di sintassi: hai scritto codice che il linguaggio non capisce (una parentesi mancante, una virgola di troppo). Il programma non parte proprio.
- Errori a runtime: il codice parte ma si blocca durante l'esecuzione, ad esempio dividendo per zero.
- Errori logici: il programma gira senza crashare, ma il risultato è sbagliato. Sono i più insidiosi, perché niente segnala il problema.
Il metodo, non il panico
Davanti a un bug la tentazione è cambiare codice a caso finché funziona. È l'approccio peggiore. Meglio seguire un metodo:
- Riproduci il bug: trova i passi esatti che lo fanno comparire.
- Leggi il messaggio di errore: spesso dice già file e riga del problema.
- Isola la causa: restringi la zona di codice sospetta.
- Forma un'ipotesi su cosa stia andando storto.
- Verifica e correggi, poi controlla di non aver rotto altro.
Lo strumento più semplice: il print
La tecnica più immediata è stampare i valori delle variabili per vedere cosa succede davvero.
def media(numeri):
print("Input ricevuto:", numeri) # debug
totale = sum(numeri)
print("Totale:", totale) # debug
return totale / len(numeri)
media([10, 20, 30])
Vedendo i valori reali scopri subito se il problema è nei dati in ingresso o nel calcolo. È rozzo ma efficacissimo, e tutti i programmatori lo usano.
Il debugger e i breakpoint
Gli editor moderni offrono un debugger vero e proprio. Ti permette di mettere un breakpoint, cioè un punto in cui il programma si ferma, e di ispezionare lo stato riga per riga: quali variabili esistono, che valore hanno, dove sta andando l'esecuzione. È molto più potente del print quando il bug è complesso.
function totale(prezzi) {
let somma = 0;
for (const p of prezzi) {
somma += p; // metti qui un breakpoint per ispezionare 'somma'
}
return somma;
}
Consigli che fanno la differenza
- Cambia una cosa alla volta, così sai cosa ha avuto effetto.
- Spiega il problema ad alta voce, anche a un oggetto: spesso la soluzione emerge mentre parli.
- Fai pause: con la mente fresca i bug si trovano in metà tempo.
- Usa Git per tornare a una versione funzionante; se non sai come, leggi la guida a Git e GitHub.
Le regex, ad esempio, sono una fonte tipica di bug sottili: se le usi, ti torna utile capire bene cosa sono le espressioni regolari.
In sintesi
Il debugging è l'arte di trovare e correggere gli errori nel codice con metodo, non a caso. Distingui i tipi di errore, leggi i messaggi, isola la causa e usa print o breakpoint per vedere cosa succede davvero. È una competenza che migliora con la pratica e che vale quanto saper scrivere codice.
Imparare a fare debugging fa parte del percorso per programmare da zero. Se vuoi allenarti con esercizi e bug reali da risolvere, dai un'occhiata ai corsi di CodeGrind.