Il debug o debugging, nella programmazione e ingegneria informatica, è un processo a più fasi che comporta l’identificazione di un problema, l’isolamento della fonte del problema e quindi la correzione del problema o la determinazione di un modo per aggirare il problema. Il passaggio finale del debug è testare la correzione o la soluzione alternativa e assicurarsi che funzioni.
Il processo di debug
Il debug fa parte del processo di test del software ed è parte integrante dell’intero ciclo di vita dello sviluppo del software. Il processo di debug inizia non appena il codice viene scritto e continua nelle fasi successive quando il codice viene combinato con altre unità di programmazione per formare un prodotto software. In un programma di grandi dimensioni con migliaia e migliaia di righe di codice, il processo di debug può essere semplificato utilizzando strategie come unit test, revisioni del codice e pair programming.
Una volta identificato un errore, è necessario trovare effettivamente l’errore nel codice. A questo punto, può essere utile esaminare i log del codice e utilizzare uno strumento di debug autonomo o il componente di debug di un ambiente di sviluppo integrato (IDE). Gli errori nelle funzioni che sono usate più di frequente vengono ovviamente individuati e corretti per primi. In alcuni casi, il modulo che presenta il problema è ovvio, mentre la riga di codice non lo è. In tal caso, unit test – come JUnit e xUnit, che consentono al programmatore di eseguire una funzione specifica con input specifici – possono essere utili per il debug.
La pratica standard consiste nell’impostare un “breakpoint” ed eseguire il programma fino a quel breakpoint, momento in cui l’esecuzione del programma si interrompe. Il componente di debug di un IDE fornisce in genere al programmatore la possibilità di visualizzare la memoria e vedere le variabili, eseguire il programma al punto di interruzione successivo, eseguire solo la riga di codice successiva e, in alcuni casi, modificare il valore delle variabili o persino cambiare il contenuto della riga di codice che sta per essere eseguito.
Strumenti di debug più comuni
Gli analizzatori di codice sorgente, che si occupano di sicurezza, errori di codice comuni e analizzatori di complessità, possono anche essere utili nel debug. Un analizzatore di complessità può trovare moduli così complessi da essere difficili da capire e testare. Alcuni strumenti possono effettivamente analizzare un’esecuzione di test per vedere quali righe di codice non sono state eseguite, il che può aiutare nel debug. Altri strumenti di debug includono logging avanzato e simulatori che consentono al programmatore di modellare la modalità di visualizzazione e comportamento di un’app su un dispositivo mobile.
Ricerca e rimozione di errori del software
Alcuni strumenti, in particolare strumenti open source e linguaggi di scripting, non vengono eseguiti in un IDE e richiedono un approccio più manuale al debug. Tali tecniche includono il rilascio di valori in un registro, estese istruzioni di “stampa” aggiunte durante l’esecuzione del codice o comandi di “attesa” codificati che simulano un punto di interruzione in attesa dell’input da tastiera in momenti specifici.
L’uso della parola bug (letteralmente =”piccolo insetto”) come sinonimo di errore è nato nel settore dell’ingegneria. L’applicazione del termine all’informatica e l’ispirazione per l’uso della parola debug come sinonimo di risoluzione dei problemi è stata attribuita all’Ammiraglio Grace Hopper, una pioniera della programmazione informatica, nota anche per il suo secco senso dell’umorismo. Era il 1947 quando un vero e proprio bug (una falena) si è trovata tra i relè elettrici ed ha causato un problema nel primo computer della Marina americana, il Mark II, l’allora tenente Hopper e il suo team “hanno eseguito il debug” del computer e salvato la falena. Ora risiede nello Smithsonian Museum.
E. P.