Loading AI tools
errore nella scrittura di un programma software Da Wikipedia, l'enciclopedia libera
Il bug (pronuncia inglese /bʌg/; in italiano /ˈbaɡ/[1]), in italiano anche baco[2], nell'ambito della programmazione informatica, è un'anomalia che porta al malfunzionamento di un software, per esempio producendo un risultato inatteso o errato, tipicamente dovuto a un errore nella scrittura del codice sorgente di un programma. Un bug, in sostanza, è un difetto software di tipo funzionale, nonostante a volte il termine venga usato per indicare anche falle di sicurezza (vulnerabilità) nonché per gravi carenze di prestazione. Esempi di bug sono quelli che portano ai Blue Screen of Death su Windows, cioè schermate blu con messaggi di errore che hanno interessato soprattutto le prime versioni del sistema operativo. Altri tipi di errori, seppur differenti, che si avvicinano ai bug sono i glitch e gli exploit, diffusi spesso nei videogiochi.[3]
Un programma contenente bachi che interferiscono con la sua funzionalità è detto in gergo buggato (in inglese buggy), mentre l'atto di correzione dagli errori è detto debug o bugfixing.
La diffusione dell'uso del termine bug, che in inglese indica genericamente un piccolo insetto, è legato a un curioso aneddoto risalente ai tempi pionieristici dell'informatica: il 9 settembre 1947 la tenente Grace Hopper e il suo gruppo stavano cercando la causa del malfunzionamento di un computer Mark II quando, con stupore, si accorsero che una falena si era incastrata tra i circuiti. Dopo aver rimosso l'insetto (alle ore 15:45), operazione che avrebbe ripristinato il regolare funzionamento dell'elaboratore, la Hopper incollò la falena rimossa sul registro del computer e annotò: «1545. Relay #70 Panel F (moth) in relay. First actual case of bug being found». Questo registro è conservato presso lo Smithsonian National Museum of American History.[4]
In realtà il termine bug nel senso di problema tecnico è stato usato almeno dal 1870: è citato in questo senso in una lettera di Edison del 1878, probabilmente questo uso del termine è di origine scozzese.
«It has been just so in all of my inventions. The first step is an intuition, and comes with a burst, then difficulties arise — this thing gives out and [it is] then that “Bugs” — as such little faults and difficulties are called — show themselves and months of intense watching, study and labor are requisite before commercial success or failure is certainly reached.»
«È stato così per tutte le mie invenzioni. Il primo passo è un'intuizione, e viene come una fiammata, poi le difficoltà crescono... le cose non vanno più ed è allora che i "bachi" – così sono chiamati questi piccoli guasti e difficoltà – si manifestano, e servono mesi di intensa osservazione, studio e lavoro prima che il successo commerciale oppure il fallimento sia sicuramente raggiunto.»
Durante lo sviluppo e l'esecuzione di un codice sorgente possono verificarsi i cosiddetti "errori di programmazione" che si possono distinguere essenzialmente in tre principali categorie: errori di sintassi, errori in esecuzione o di runtime, ed errori nella logica del programma.
Quanto indicato riferendosi al compilatore vale naturalmente anche per programmi interpretati, come per esempio Python, PHP, JavaScript, Matlab, per citare alcuni tra i più popolari. In questi casi, data la possibilità di eseguire i comandi in modo interattivo, può essere più semplice rilevare gli errori anche senza l'uso di un debugger, che è comunque ugualmente disponibile in molti casi.
Molto raramente può accadere che un compilatore difettoso produca un errore anche se il codice sorgente è corretto.
for (i = 0; i<10; i++); faiqualcosa();
eseguirà dieci volte l'istruzione nulla e chiamerà una sola volta la funzione "faiqualcosa()
".x = 0; while(x>=0) { faiqualcosa(); x++; }
non si può arrestare perché l'espressione logica risulta vera per qualunque valore di x.Meno comunemente, il termine bug può indicare un difetto di progettazione in un componente hardware, che ne causa un comportamento imprevisto o comunque diverso da quello specificato dal produttore. Ad esempio un noto bug in un componente hardware è quello che nel 1994 afflisse l'allora neonato microprocessore Pentium, che in determinate situazioni restituiva risultati errati anche in semplici calcoli aritmetici. I primi Pentium infatti avevano problemi nella FPU (Floating Point Unit, Unità a virgola mobile o coprocessore matematico), a causa della quale restituivano valori errati in alcune operazioni decimali. In un primo tempo venne pubblicato un programma che escludeva questa unità; in seguito tutti i microprocessori vennero sostituiti.
Un bug può avere una grande varietà di effetti. Alcuni incidono poco sulla funzionalità del programma e quindi possono rimanere sconosciuti per lungo tempo. Al contrario, se il baco è abbastanza grave, può causare il crash o un blocco del programma che porta ad una negazione del servizio richiesto. Altri, qualificati come bachi della sicurezza, potrebbero consentire a un utente malintenzionato di aggirare i controlli di accesso, al fine di ottenere privilegi non autorizzati.
Gli effetti dei bachi possono giungere ad essere estremamente gravi: negli anni ottanta, in Canada e negli Stati Uniti d'America, alcuni bachi presenti nel software di controllo di un macchinario per la radioterapia, il Therac-25, portarono gli apparecchi prima ad erogare una quantità eccessiva di radiazioni senza sistemi di protezione attivi e poi ad attivarsi quando non richiesto, rendendosi direttamente responsabili del decesso di alcuni pazienti. Da allora tali eventi vengono spesso utilizzati come esempi per mostrare e far comprendere quali pericoli possa causare una cattiva programmazione, soprattutto nei software con finalità pratiche.[6]
Nel 2002 il National Institute of Standards and Technology ha calcolato che i bug e gli errori software hanno causato una perdita di 59 miliardi di dollari negli USA, l'equivalente dello 0,6% del PIL.[7]
Durante la progettazione del software, l'immissione dei dati o la traduzione (compilazione, interpretazione od assemblazione) del codice sorgente, possono pervenire degli errori (per lo più derivanti da fattori umani come sviste o inaccortezze) nell'eseguibile ottenuto, i quali vanno a costituire i bug.
L'errore che causa un bug è difficilmente un errore di sintassi, perché il compilatore avvertirebbe immediatamente il programmatore arrestando il processo di compilazione; per questo sono molto più "insidiosi" gli errori logici nella stesura dell'algoritmo.
L'industria del software è continuamente impegnata nella ricerca sul prevenire l'introduzione di bachi durante la scrittura del programma, per facilitare la scrittura e diminuire i tempi di sviluppo. Gli approcci e i metodi più comuni sono:
Tipicamente il primo passo nell'individuazione di un bug è trovare un modo per riprodurlo facilmente. Una volta che l'errore viene riprodotto, il programmatore può usare un debugger per seguire l'esecuzione nella regione difettosa e trovare il punto in cui il programma dà problemi. A volte un baco non riguarda una singola istruzione, ma rappresenta un errore concettuale da parte del programmatore. Una volta individuato l'errore si procede appunto alla correzione o eliminazione.
In inglese informatico, ormai diffuso anche in altre lingue, il fix è il correttivo cioè la riparazione di un bug. Fix è un termine generico che corrisponde a soluzioni definitive diverse, a seconda dei casi. Una soluzione temporanea che non corregge il bug ma ne contiene l'effetto è il workaround.
È comune pubblicare un programma con bachi conosciuti che non sono considerati gravi; successivamente il baco potrebbe essere corretto con una nuova versione o attraverso una patch.
Diversi produttori (ad esempio Microsoft), sui loro bollettini, usano l'espressione inglese addesses an issue (lett. "affrontata una questione", tradotta nella versione italiana con risolto un problema) per indicare un concetto un po' più ampio di un bug o per non ricorrere ad un termine specialistico nei confronti dell'utente-consumatore. Google usa un'espressione ibrida (fix for issue), altri produttori quella resolved an issue, con il consueto significato.
Mentre il bug è un errore di scrittura del codice del programma un glitch è un errore prevalentemente di tipo visivo o di maggior entità.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.