Info Debugging

Antox C.

Utente Mitico
Autore del topic
21 Ottobre 2009
6.241
47
Miglior risposta
0
Debugging (o semplicemente debug) è un'attività che consiste nella individuazione della porzione di software affetta da errore (bug) rilevati nei software a seguito dell'utilizzo del programma.

L'errore può essere rilevato sia in fase di collaudo del programma, quando cioè questo è ancora in fase di sviluppo e non è stato ancora dichiarato pronto per essere utilizzato dall'utente finale, sia in fase di utilizzo del programma da parte dell'utente finale.
Alla rilevazione dell'errore segue la fase di debugging, ossia di individuazione della parte di software, a volte molto complesso, nella quale si annida l'errore.
Questa attività è oggi supportata da programmi specifici (debugger), che mostrano allo sviluppatore l'esecuzione, istruzione per istruzione, del programma, permettendo nel contempo l'analisi dei dati trattati dal programma stesso.
In assenza di tali strumenti per le attività di debugging, si ricorre alla più semplice ma anche meno efficace tecnica di loggare (stampare) a video o su file le istruzioni che il programma sta eseguendo, inserendo a tal scopo nel codice delle istruzioni di debug.
L'attività di debug è una delle operazioni più importanti per la messa a punto di un programma, spesso estremamente difficile per la complessità dei software oggi in uso e delicata per il pericolo di introdurre nuovi errori o comportamenti difformi da quelli desiderati nel tentativo di correggere quelli per cui si è svolta l'attività di debug.

Operazioni di base

Sebbene ogni sessione di debug sia unica e costituisca una storia a sé, alcuni principi generici sono applicabili a tutte le sessioni di debug. In particolare, per il debug di applicazioni software, in genere si possono riconoscere cinque fasi nel debug:
identificazione del bug
individuazione del componente in cui è presente il bug
individuazione della causa del bug
progettazione di una correzione per il bug
implementazione e testing della suddetta correzione

Accorgimenti per accelerare il processo di debug

Il corretto atteggiamento mentale
È necessario fare autocritica, e accettare il fatto che il programma non si comporta come dovrebbe e che si è fatto un errore; se tutto fosse stato previsto e non ci fossero errori, il programma funzionerebbe correttamente. Tale atteggiamento mentale incrementa significativamente la possibilità di trovare dei bug.

Usare dei file di log
Creare uno o più file di log può risultare molto utile per verificare se il programma funziona come previsto, e cosa succede prima, dopo e durante il verificarsi del malfunzionamento.

Fare attenzione all'input fornito al programma
Tutti gli input forniti dall'utente devono essere validati prima sintatticamente e successivamente anche semanticamente dal programma prima di essere elaborati. Ciò migliora anche la sicurezza del programma.
Ricordare le proprie esperienze [modifica]
Nel caso si siano già scritti dei programmi simili e ci si sia trovati a bug simili a quello attuale, è buona norma cercare di ricordare l'errore commesso e la soluzione adottata.
Accorgimenti per ridurre la necessità di debug [modifica]

Disegno del codice
Disegnare accuratamente le strutture dati e le funzioni nella programmazione strutturata e le classi in quella orientata agli oggetti è il sistema migliore per ridurre gli errori nel codice e nel facilitare l'individuazione dell'errore nel caso il programma non funzioni correttamente.
Leggibilità del codice [modifica]
L'utilizzo di convenzioni chiare per i nomi delle variabili, funzioni, classi, metodi e costanti, così come quello di nomi parlanti, ovvero che rendano chiaro l'utilizzo di una componente e, soprattutto, evitare di riutilizzare la stessa componente per scopi diversi, rende più chiaro e leggibile il codice anche a fronte di una ricerca di errori.
Commenti
I commenti sono fondamentali, soprattutto se il codice viene scritto a più mani. In particolare, il commento deve dare un valore aggiunto all'istruzione. Ad esempio, se l'istruzione è
lordo = tara + netto
non ha senso scrivere un commento come
/* il peso lordo è uguale a quello netto più la tara */
perché si evince già dal nome delle variabili. Un commento come
/* "tara" è una costante definita nel file costanti.hpp */
è sicuramente molto più utile.

Giro del fumo
Il "giro del fumo" consiste nel leggere il codice come farebbe un computer, cercando di capire se la logica utilizzata funziona. Si tratta di un metodo che funziona molto bene nella programmazione strutturata mentre in quella orientata agli oggetti è applicabile solo ai singoli metodi dato che quel tipo di codice è guidato dagli eventi e quindi non ha necessariamente un flusso ben definito.

PS: E' un copia/incolla, ma vi consiglio a leggerlo, anche le parti che vi interessano di più. E' molto interessante! ^^

Fonte: Wikipedia