Dopo un lungo periodo di mancanza dalla vita della community per mencanza di tempo rieccomi qui con un nuovo appunto informatico.
In questo paper parlerò di Debugging, un' operazione fondamentale e di estrema importanza nella vita di un programmatore.
Questo articolo non ha grandi pretese vuole semplicemente essre un introduzione all' argomento, infatti la piena confidenza e velocetà con questa 'tecnica' si acquisisce unicamente mediante   l'esperienza di programmazione.
Beh bando alle ciance e cominciamo.

Importante: In questo appunto userò qualche lineea di codice in python, il linguggio che ritengo più semplice, ma è ovvio che lo stesso 'meccanismo logico' è possibile applicarlo a qualunque altro linguaggio sia questo interpretato o compilato.

Poco dopo aver iniziato a programmare gli sviluppatori si sono accorti di come non fosse affatto facile far fare ai programmi quello che volevamo. Avevamo scoperto il Debugging. Posso ricordare il preciso momento in cui ho realizzato che avrei passato te perbuona parte della mia vita a scoprire e correggere errori nei miei stessi programmi.
- Maurice Wilkes scopre il Debugging, 1949


Il termine 'debugging' viene dalla parola inglese 'bug' ovvero errore e appunto il  Debugging è il processo di eliminazione degli errori.

Il Debugging è quel processo grazie al quale portiamo il programma a svolgere tutte le funzioni per cui è stato scritto.

Tutti noi, nella nostra esperienza di programmatori o anche solo eseguendo degli script presi per il web ci siamo accoti che a volte il programma assume comportamenti diversi da quelli che avevamo previsto ed è qui che interviene il Debugging.
Vi posso assicuro che questa operazione può essere semplice e veloce ma può anche diventare un'operazione lunga e snervante.


Per prima cosa per eseguire il processo di debugging è quella di pensare a cosa dovrebbe fare il nostro programma.
Eseguite molti test sul vostro script in modo da capire i difetti di questo e di inviduare 'il luogo' dei vostri errori' (il bug può annidarsi nella funzione più semplice e isolata)

Per scovare il bug dobbiamo immedesimarci nella macchina, nell'interprete, nel compilatore, nel linguaggio.
Un piccolo e semplicissimo esempio in python dovrebbe chiarirvi le idee:

#Calcola Area di un rettangolo
base = input("Base: ")
altezza = input("Altezza: ")
print "Area = ", base*base


-Test Output-

Base: 7
Altezza: 7
Area = 16 - CORRETTO

Base: 8
Altezza: 3
Area = 64 - ERRATO

Base: 6
Altezza: 12
Area = 36 - ERRATTO

Base: 9
Altezza: 9
Area = 81 - CORRETTO


Il programma fornisce risultato corretto nel 1° e nel 4° caso mente restituisce un risultato errato nel 2° nel 4° caso.
Ora bisogna cercare di capire cosa accumuna tutti i casi di errore che abbiamo ricevuto come output.
Una volta tovato cosa accomuna gli errori facciamo altri test per riscontrare la nostra ipotesi.

Ora bisogna controllare riga per riga il codice sorgente immedesimandoci nell'interprete python in questo caso ma ripeto che la logica è identica per qualunque linguaggio.

A queste punto ponetevi delle domande che analizzino riga per riga il vostro sorgente e rispondete a queste come se voi foste l'interprete di python.

#Calcola Area di un rettangolo
base = input("Base: ")
altezza = input("Altezza: ")
print "Area = ", base*base


Domanda: Cosa esegue per primo Python?
Risposta: Scarta la prima essendo un commento e passa alla seconda
Domanda: che effetto ha?
Risposta: Stampa a video la scritta 'Base:' e aspetta l'imput dall'utente
Domanda: Qual'è la prossima riga che Python esegue?
Risposta: La riga dopo, altezza = input("Altezza: ")
Domanda: Qual'è il suo effetto?
Risposta: Stampa a video la scritta 'Altezza: ' e aspetta l'input dall'utente
Domanda: Quale sarà  laprossima riga?
Risposta: print "Area = ", base*base
Domanda: Che effetto ha?
Risposta:Prima stampa a video 'Area=' e poi stamperà  base*base
Domanda: Con quale effetto?
Risposta: Calcola l'area che del rettangolo con i dati inseriti dall'utente. L'area di un rettangolo è data dalla moltiplicazione della base per l'altezza. Un momento l'ultimo elemento dovrebbe essere l'altezza e non la base
Domanda: E' quello l'errore causa del bug? come mai avolte l'area era corretta?
Risposta: Si quello era il bug, L'area risultava corretta solamente quando il dato della base e dell'altezza coincidevano

Modifichiamo ora il sorgente e ritestiamolo, il programma ora funziona a dovere.

Ovviamente questo era un semplicissimo esempio per far capire la logica e del debugging e le principali tappe per risolvere l' errore.

Spero che questo  tutorial possa essere stato interessante e utile per tutti quelli che lo leggeranno.

gaglio,