8.1 L'origine dei bug
Il debugging del software è il processo di ricerca e correzione degli errori o bug in un programma. Questo processo è una delle parti più interessanti e importanti dello sviluppo software e aiuta a garantire il corretto funzionamento dei programmi.
Storia della comparsa del termine "bug"
Il termine "bug" (errore) nel contesto dei programmi per computer ha iniziato a essere usato negli anni '40. Anche se la stessa concezione di "bug" esisteva già prima dell'avvento dei computer, indicando malfunzionamenti meccanici in vari dispositivi.
Il primo caso documentato di utilizzo del termine "bug" nella tecnologia informatica fu con il team che lavorava sul computer Mark II all'Università di Harvard nel 1947 (!). Il team scoprì che uno dei relè della macchina non funzionava perché una falena era entrata al suo interno. Rimossero l'insetto e lo registrarono nel diario come "il primo caso reale di rilevamento di un insetto" (literal bug).
Anche se non fu il primo caso di utilizzo del termine "bug" per indicare un errore, questo incidente divenne famoso e contribuì alla popolarizzazione del termine "bug".
Debugging del programma
Il debugging è il processo di ricerca, diagnosi e correzione dei bug nel software. Il processo di debugging include diverse fasi:
- Individuazione dell'errore: Determinazione dei sintomi che indicano la presenza di un errore nel programma.
- Riproduzione dell'errore: Creazione di condizioni in cui l'errore si manifesta di nuovo, per capire meglio la sua natura.
- Diagnosi del problema: Utilizzo di vari strumenti e metodi per analizzare il codice e trovare la causa dell'errore.
- Correzione dell'errore: Apportare modifiche al codice per eliminare l'errore.
- Testing: Verifica della correzione e test del programma per assicurarsi che l'errore sia stato eliminato e che non siano emersi nuovi problemi.
Quindi bug è un nome generico per qualsiasi errore in programmi, e debug è il processo di individuazione e correzione di questi errori.
8.2 Strumenti e metodi di debugging
Logging
Aggiungere log nel codice del programma permette di monitorare la sua esecuzione e ottenere informazioni sullo stato delle variabili e delle operazioni in diversi punti dell'esecuzione del programma. Per il logging in Python c'è un'ottima libreria — logging
.
Esempio di utilizzo del logging:
import logging
# Configurazione del logging per mostrare le informazioni di debug
logging.basicConfig(level=logging.DEBUG)
def divide(a, b):
# Log del tentativo di divisione
logging.debug(f"Divisione di {a} per {b}")
if b == 0:
# Log dell'errore se b è uguale a 0
logging.error("Tentativo di divisione per zero!")
return None
# Eseguiamo la divisione se b non è uguale a 0
return a / b
result = divide(10, 2)
print(result)
Uso dei debugger (Debuggers)
I debugger sono strumenti che permettono agli sviluppatori di eseguire il
programma passo dopo passo, impostare punti di interruzione (breakpoints)
, controllare
i valori delle variabili e modificarli durante l'esecuzione del programma.
Debugger popolari:
- GDB: GNU Debugger per C, C++ e altri linguaggi di programmazione.
- PDB: Debugger integrato in Python.
- Visual Studio Debugger: Debugger integrato in Microsoft Visual Studio.
- PyCharm Debugger: Debugger integrato in PyCharm IDE per Python.
Esempio di utilizzo di PDB
import pdb
def faulty_function(a, b):
pdb.set_trace() # Impostazione del breakpoint
result = a / b
return result
faulty_function(10, 0)
Quando il programma arriva a pdb.set_trace()
, si ferma, e puoi
eseguire i comandi del debugger, come
next
(passo successivo), print
(stampa del valore
di una variabile) e altri.
Studieremo il debug dei programmi usando l'esempio del debugger integrato in PyCharm.
8.3 Uso del debug
In generale, il debug include l'uso attivo di strumenti di debugging e pratiche per l'individuazione e la correzione degli errori.
Impostazione dei breakpoint: Imposta i breakpoint nel codice, per fermare l'esecuzione del programma nei punti di tuo interesse.
Esecuzione passo dopo passo: Esegui il programma passo dopo passo, osservando i cambiamenti nello stato del programma e nei valori delle variabili.
Analisi delle variabili: Studia i valori delle variabili e delle espressioni nelle diverse fasi dell'esecuzione del programma, per individuare dati errati o errori logici.
Correzione degli errori: Apporta modifiche al codice per eliminare gli errori trovati.
Ritesting: Dopo aver corretto gli errori, esegui il test del programma per assicurarti che l'errore sia stato eliminato e che non siano emersi nuovi problemi.
Sembra semplice, vero? Nella prossima lezione approfondiremo tutti questi passaggi :)
GO TO FULL VERSION