<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://jardin.cscsp.ch/index.php?action=history&amp;feed=atom&amp;title=Debugging</id>
	<title>Debugging - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://jardin.cscsp.ch/index.php?action=history&amp;feed=atom&amp;title=Debugging"/>
	<link rel="alternate" type="text/html" href="https://jardin.cscsp.ch/index.php?title=Debugging&amp;action=history"/>
	<updated>2026-04-12T01:27:01Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://jardin.cscsp.ch/index.php?title=Debugging&amp;diff=759&amp;oldid=prev</id>
		<title>imported&gt;Michi81: Correggo link</title>
		<link rel="alternate" type="text/html" href="https://jardin.cscsp.ch/index.php?title=Debugging&amp;diff=759&amp;oldid=prev"/>
		<updated>2025-01-01T04:23:23Z</updated>

		<summary type="html">&lt;p&gt;Correggo link&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{nota disambigua|il termine nel contesto del [[ciclo di vita del software]]|Ispezione del software}}&lt;br /&gt;
[[File:Coding Shots Annual Plan high res-5.jpg|thumb|Uno [[sviluppatore software]] esegue un debugging]]&lt;br /&gt;
{{F|software|gennaio 2019}}&lt;br /&gt;
&lt;br /&gt;
Il &amp;#039;&amp;#039;&amp;#039;debugging&amp;#039;&amp;#039;&amp;#039; (o semplicemente &amp;#039;&amp;#039;&amp;#039;debug&amp;#039;&amp;#039;&amp;#039;) o &amp;#039;&amp;#039;&amp;#039;depurazione&amp;#039;&amp;#039;&amp;#039;, in [[informatica]], nell&amp;#039;ambito dello [[sviluppo software]], indica l&amp;#039;attività che consiste nell&amp;#039;individuazione e correzione da parte del [[programmatore]] di uno o più errori ([[bug]]) rilevati nel [[software]], direttamente in fase di [[programmazione (informatica)|programmazione]] oppure a seguito della fase di &amp;#039;&amp;#039;[[collaudo del software|testing]]&amp;#039;&amp;#039; o dell&amp;#039;utilizzo finale del [[programma (informatica)|programma]] stesso.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;attività di debug è una delle operazioni più importanti e difficili per la messa a punto di un [[programma (informatica)|programma]], spesso estremamente complicata per la complessità dei software 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&amp;#039;attività di &amp;#039;&amp;#039;debug&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Operazioni di base ==&lt;br /&gt;
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:&lt;br /&gt;
* identificazione del bug&lt;br /&gt;
* individuazione del componente in cui è presente il bug&lt;br /&gt;
* individuazione della causa del bug &lt;br /&gt;
* progettazione di una correzione per il bug&lt;br /&gt;
* implementazione e testing della suddetta correzione&lt;br /&gt;
&lt;br /&gt;
=== Rilevazione dell&amp;#039;errore ===&lt;br /&gt;
{{vedi anche|Bug (informatica)|Debugger}}&lt;br /&gt;
&lt;br /&gt;
Mentre gli &amp;#039;&amp;#039;errori di sintassi&amp;#039;&amp;#039; sono tipicamente evidenziati dall&amp;#039;[[Ambiente di sviluppo integrato|IDE]], alla fine della stesura del codice il programmatore opera una seconda fase di test valutando se l&amp;#039;output del programma è quello atteso compilando/interpretando ed eseguendo il codice. All&amp;#039;eventuale rilevazione dell{{&amp;#039;}}&amp;#039;&amp;#039;errore di semantica&amp;#039;&amp;#039; e di &amp;#039;&amp;#039;runtime&amp;#039;&amp;#039; segue la fase di &amp;#039;&amp;#039;debugging&amp;#039;&amp;#039;, ossia di individuazione della parte di [[software]], a volte molto complesso, nella quale si annida l&amp;#039;errore. Spesso tale operazione viene svolta dal programmatore di pari passo con la stesura del codice stesso, testando continuamente il codice ed evitando così l&amp;#039;accumulo degli errori.&lt;br /&gt;
&lt;br /&gt;
Questa attività è supportata da programmi specifici ([[debugger]]) messi a disposizione dall&amp;#039;IDE grazie anche all&amp;#039;uso di [[breakpoint]] su linee di codice e dai messaggi di [[standard error]] emessi nei [[file]] di [[log]] (es. rilevamento [[eccezione (informatica)|eccezioni]] nelle console dell&amp;#039;IDE), che indicano e mostrano allo [[programmatore|sviluppatore]] l&amp;#039;esecuzione, [[istruzione (informatica)|istruzione]] per istruzione, del programma, permettendo nel contempo l&amp;#039;analisi dei dati trattati dal programma stesso. In assenza di tali strumenti per le attività di &amp;#039;&amp;#039;debugging&amp;#039;&amp;#039;, si ricorre alla più semplice, ma anche meno efficace tecnica di stampare a [[monitor (video)|video]] o su [[file]] le istruzioni che il programma sta eseguendo, inserendo a tal scopo nel codice delle istruzioni di &amp;#039;&amp;#039;debug&amp;#039;&amp;#039; che evidenzino il punto di arrivo dell&amp;#039;esecuzione del programma fino all&amp;#039;errore. Sempre a questo scopo, il programmatore può, con l&amp;#039;ausilio dei [[Commento (informatica)|commenti]], far eseguire solo alcune parti del codice o al contrario non far eseguire particolari parti del codice, sospette di causare l&amp;#039;errore. Una volta individuato l&amp;#039;errore nel codice il programmatore corregge l&amp;#039;errore in maniera iterativa finché il programma non fa ciò che è desiderato.&lt;br /&gt;
&lt;br /&gt;
Una terza fase di debug è quella che il programmatore deve risolvere quando il software prodotto è stato mandato in fase di &amp;#039;&amp;#039;testing&amp;#039;&amp;#039; o [[collaudo]] al rispettivo team ed è stato rimandato indietro con la lista dei difetti riscontrati; in genere in questi casi molto spesso sono presenti errori nella stesura o interpretazione delle specifiche rispetto a ciò che è realmente desiderato senza andare in errore.&lt;br /&gt;
&lt;br /&gt;
Una quarta fase di debug può avvenire quando in fase di utilizzo del programma da parte dell&amp;#039;utente finale questi riscontra delle anomalie; in genere in questi casi si ingenera un errore con relativo messaggio che viene inviato tramite [[Internet]] alla casa produttrice del software che aggiornerà periodicamente con nuove [[release (informatica)|release]] senza errori o [[Aggiornamento (informatica)|aggiornamenti]] il prodotto (es. [[Windows|Microsoft Windows]]).&lt;br /&gt;
&lt;br /&gt;
== Accorgimenti per accelerare il processo di debug ==&lt;br /&gt;
=== Corretto atteggiamento mentale ===&lt;br /&gt;
È necessario fare autocritica, e accettare il fatto che il programma non si comporta come dovrebbe e che si è fatto un errore, cosa del tutto normale e frequente in fase di sviluppo; se tutto fosse stato previsto e non ci fossero errori, il programma funzionerebbe correttamente, ma spesso questo risultato non si ottiene quasi mai alla prima stesura del codice, ma solo per successive modifiche e correzioni. Tale atteggiamento mentale incrementa significativamente la possibilità di trovare e risolvere dei bug.&lt;br /&gt;
&lt;br /&gt;
=== Usare file di log ===&lt;br /&gt;
Oltre all&amp;#039;uso della console dell&amp;#039;IDE è opportuno creare uno o più [[log|file di log]] che può risultare molto utile per verificare se il programma funziona come previsto, e cosa succede prima, dopo e durante il verificarsi del malfunzionamento.&lt;br /&gt;
&lt;br /&gt;
=== Fare attenzione all&amp;#039;input fornito al programma ===&lt;br /&gt;
Tutti gli [[input]] forniti dall&amp;#039;utente devono essere validati prima [[sintassi|sintatticamente]] e successivamente anche [[Semantica (informatica)|semanticamente]] dal programma prima di essere elaborati. Ciò migliora anche la sicurezza del programma.&lt;br /&gt;
&lt;br /&gt;
=== Memorizzare le tipologie di errori ===&lt;br /&gt;
Nel caso si siano già scritti dei programmi simili e ci si sia trovati a bug simili a quello attuale, è buona norma, sulla scorta dell&amp;#039;esperienza, cercare di ricordare l&amp;#039;errore commesso e la soluzione adottata.&lt;br /&gt;
&lt;br /&gt;
== Accorgimenti per ridurre la necessità di debug ==&lt;br /&gt;
=== Disegno del codice ===&lt;br /&gt;
Disegnare accuratamente le [[strutture dati]] e le funzioni nella [[programmazione strutturata]] e le [[classe (informatica)|classi]] in quella [[programmazione orientata agli oggetti|orientata agli oggetti]] è il sistema migliore per ridurre gli errori nel codice e nel facilitare l&amp;#039;individuazione dell&amp;#039;errore nel caso il programma non funzioni correttamente.&lt;br /&gt;
&lt;br /&gt;
=== Leggibilità del codice ===&lt;br /&gt;
L&amp;#039;utilizzo di convenzioni chiare per i nomi delle [[variabile (informatica)|variabili]], [[funzione (informatica)|funzioni]], classi, [[metodo (informatica)|metodi]] e costanti, così come quello di nomi parlanti, ovvero che rendano chiaro l&amp;#039;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.&lt;br /&gt;
&lt;br /&gt;
=== Commenti ===&lt;br /&gt;
I commenti sono fondamentali, soprattutto se il codice viene scritto a più mani. In particolare, il commento deve dare un valore aggiunto all&amp;#039;istruzione. Ad esempio, se l&amp;#039;istruzione è&lt;br /&gt;
&amp;lt;pre&amp;gt;lordo = tara + netto ;&amp;lt;/pre&amp;gt;&lt;br /&gt;
non ha senso scrivere un commento come&lt;br /&gt;
&amp;lt;pre&amp;gt;/* il peso lordo è uguale a quello netto più la tara */&amp;lt;/pre&amp;gt;&lt;br /&gt;
perché si evince già dal nome delle variabili. Un commento come&lt;br /&gt;
&amp;lt;pre&amp;gt;/* &amp;quot;tara&amp;quot; è una costante definita nel file costanti.php */&amp;lt;/pre&amp;gt;&lt;br /&gt;
è sicuramente molto più utile.&lt;br /&gt;
&lt;br /&gt;
== Voci correlate ==&lt;br /&gt;
* [[Bug]]&lt;br /&gt;
* [[Debugger]]&lt;br /&gt;
* [[Test strutturale]]&lt;br /&gt;
* [[Sistema di sviluppo]]&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
== Altri progetti ==&lt;br /&gt;
{{interprogetto|preposizione=sul}}&lt;br /&gt;
&lt;br /&gt;
== Collegamenti esterni ==&lt;br /&gt;
* {{Collegamenti esterni}}&lt;br /&gt;
* {{cita web|http://heather.cs.ucdavis.edu/~matloff/UnixAndC/CLanguage/Debug.html|Guida a un debug rapido|lingua=en}}&lt;br /&gt;
&lt;br /&gt;
{{Collaudo del software}}&lt;br /&gt;
{{Controllo di autorità}}&lt;br /&gt;
{{portale|informatica}}&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Debugging| ]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Michi81</name></author>
	</entry>
</feed>