Sentiamo spesso parlare di bug, magari perché ne è stato appena scoperto uno importante in qualche software molto diffuso, o perché qualche malintenzionato ne ha sfruttato uno per eseguire un attacco informatico di qualche tipo. Ma cosa sono i bug? Che cos’è un bug in informatica e come si risolve? Perché a volte alcuni bug non vengono mai risolti?
Continuate a leggere e scopriremo questo ed altro sul mondo dei bug!
Indice
- Cos’è un bug?
- Storia e origine dei bug – Il primo bug
- Come si risolve un bug in informatica?
- Qual’è la differenza fra un errore e un bug?
- Perché il bug che ho trovato/segnalato non viene risolto?
- Conclusioni
Cos’è un bug?
Per capire cos’è un bug, possiamo leggere la definizione che ne da wikipedia, piuttosto completa ed accurata:
Il bug (pronuncia inglese /bʌg/; in italiano /ˈbaɡ/), in italiano anche baco, nell’ambito della programmazione informatica, è un problema che porta al malfunzionamento del software, per esempio producendo un risultato inatteso o errato, tipicamente dovuto a un errore nella scrittura del codice sorgente di un programma.
Un programma contenente un gran numero di bachi che interferiscono con la sua funzionalità è detto in gergo buggato (in inglese buggy), mentre l’atto di correzione dagli errori è detto bugfixing.
Bug – Wikipedia
Un bug è quindi in pratica un problema che fa si che un programma non funzioni come ci si aspetti.
Quando si scrive un software, si distinguono solitamente due tipi di errori che il programmatore può fare: errori di sintassi ed errori logici.
I primi sono solitamente i più facili da trovare e risolvere. Il compilatore che si occupa di trasformare il codice sorgente nel programma vero e proprio pretende infatti che venga rispettata la giusta sintassi del linguaggio di programmazione utilizzato. Se questa non viene rispettata (pensiamo come paragone ad un errore grammaticale o di battitura nella scrittura di un testo) il compilatore non è in grado di interpretare il codice e quindi lancia subito un errore.
I secondi sono quelli più insidiosi, il compilatore infatti non si cura di interpretare il significato logico di ciò che abbiamo scritto, ma solamente della sua sintassi. Il programma viene quindi compilato e può essere eseguito, dell’errore logico ci si accorgerà solamente quando osserveremo che il programma non si sta comportando come avremmo voluto. In questo caso possiamo paragonare questo tipo di errori ad un errore nel significato logico di una frase che risulta grammaticalmente corretta.
Storia e origine dei bug – Il primo bug
Il primo bug della storia si fa risalire al 1947, precisamente al 9 settembre. In quel giorno, all’università di Harvard, la tenente Crace Hopper ed il suo gruppo erano alla ricerca della causa di un malfunzionamento nel computer Mark II. Dopo approfondite ricerche, finalmente trovarono la causa: Una piccola falena era incastrata fra i relè del calcolatore, impedendone il corretto funzionamento.
La povera falena venne rimossa, incollata con dello scotch nel registro del computer, e venne aggiunta l’annotazione “First actual case of bug being found” (Primo caso di bug trovato). In inglese la parola bug può essere tradotta con insetto, quindi si è partiti da insetti fisici trovati nei calcolatori a fare “danni”, alla generalizzazione del termine bug come generico errore che impedisce ad un computer di funzionare correttamente.
Di Courtesy of the Naval Surface Warfare Center, Dahlgren, VA., 1988. – U.S. Naval Historical Center Online Library Photograph NH 96566-KN
The above link is no longer valid on 13.04.2017, the image available here., Pubblico dominio, Collegamento
Ci sono diverse evidenze del fatto che il termine bug venisse utilizzato per descrivere genericamente un malfunzionamento di circuiti elettrici anche prima di questo evento. Questo documento però è considerata la prima (e più evidente) documentazione scritta di un bug informatico.
Come si risolve un bug in informatica?
Con il progresso informatico degli ultimi anni, le risorse di calcolo disponibili nei moderni dispositivi permettono di eseguire programmi sempre più complessi e ricchi di funzionalità. Questo però porta inevitabilmente alla crescita della quantità di codice sorgente che deve essere scritto dai programmatori per offrire tutte queste funzionalità. In informatica si dice che non esiste codice privo di bug. Questo perché spesso il codice è talmente complesso, e i possibili scenari di utilizzo sono talmente tanti che a volta è impossibile (anche per questioni di tempo, risorse a disposizione e costi di sviluppo) prevedere ogni situazione che si possa verificare. Basta pensare al mondo dei giochi, in cui il giocatore può muoversi liberamente negli scenari, compiendo azioni in qualsiasi ordine e premendo potenzialmente qualsiasi combinazione di tasti.
Quando un bug viene scoperto, e l’autore del programma decide di risolverlo, dovrà modificare la parte di codice sorgente che causa il malfunzionamento e poi rilasciare una nuova versione del programma o quella che viene chiamata patch, solitamente un piccolo programma, il quale non fa altro che sostituire il pezzo di applicazione all’origine del malfunzionamento con la versione aggiornata.
Il tempo necessario a risolvere un bug è dipendente da molti fattori. I principali sono ovviamente la sua complessità, il numero di sviluppatori che possono essere impegnati a risolverlo, e quanto tempo questi hanno da dedicare allo sviluppo della soluzione.
Se trovate un bug in un programma, il modo migliore per far si che venga risolto è solitamente quello di contattare il produttore del software. In questo caso dovremo cercare di fornire più dettagli possibile sul bug. Possono essere utili una descrizione del bug, un’eventuale procedura o sequenza di azioni che permettano allo sviluppatore di riprodurre l’errore sul proprio computer, eventuali foto o trascrizioni dell’eventuale schermata di errore incontrata.
Qual’è la differenza fra un errore e un bug?
La differenza fra un errore e un bug è sostanzialmente linguistica. Un errore è ciò che l’utente finale solitamente vede come risultato di un bug. Quando qualcosa va storto in un programma, spesso l’utente visualizza un errore, che lo avvisa che c’è stato un malfunzionamento e qualche volta riporta alcuni dettagli che possono essere utili agli sviluppatori per capire da cosa è stato causato l’errore.
Un esempio molto conosciuto di messaggio di errore è la famosissima schermata blu di windows. Tale schermata viene visualizzata quando si verifica un malfunzionamento e il sistema operativo non può proseguire con le normali operazioni. Nella schermata stessa sono solitamente riportati alcuni dati che possono aiutare sia l’utente che lo sviluppatore a capire cosa ha provocato il blocco.
Un bug invece è, come abbiamo già detto, un errore nel codice sorgente, ed è solitamente la causa di un errore.
Perché il bug che ho trovato/segnalato non viene risolto?
Quando incontriamo o segnaliamo un bug, non è detto che questo venga corretto immediatamente, o potrebbe essere che non venga corretto affatto.
Correggere un bug, come abbiamo accennato precedentemente, implica il lavoro di uno o più programmatori per cercare il problema nel codice sorgente, correggerlo e distribuire la versione corretta del codice.
Ci potrebbero essere diversi motivi per cui il bug da voi segnalato non è stato ancora risolto:
- Il bug si verifica solamente per un gruppo ristretto di persone e la sua priorità è molto bassa. A volte un bug si verifica solo in determinati casi specifici e senza gravi ripercussioni, in questo caso potrebbe essere antieconomico per l’azienda impiegare molte risorse per correggerlo.
- Il bug non può essere replicato o trovato. Nella maggior parte dei casi, per riuscire a trovare la parte di codice che sta provocando il malfunzionamento, gli sviluppatori hanno necessità di replicare il bug. Bisogna quindi ricreare il problema in un ambiente controllato che permetta al tecnico di analizzare con i propri occhi e i propri strumenti il malfunzionamento e cercare di risalire a cosa lo sta provocando. In alcuni casi può capitare che, per qualche motivo, non sia possibile replicare il bug e quindi non sia possibile risalire alla sua causa.
- La soluzione del bug verrà rilasciata in una versione futura. Se non vediamo ancora risolto il nostro bug, è possibile che la soluzione sia stata trovata, ma che il produttore abbia in programma di distribuirla con una nuova versione in programma per una data futura.
- Il programma è sviluppato e manutenuto da un piccolo gruppo di persone che non ha le risorse necessarie a risolverlo. Non sempre i programmi sono sviluppati da grandi aziende con molte risorse. Ci sono molti programmi sviluppati da piccole aziende, o spesso da piccoli gruppi di volontari, che magari hanno poche risorse e potrebbero avere molte altre cose da fare in termini di nuovi sviluppi e correzione di bug segnalati. In questo caso potete cercare di capire contattando gli sviluppatori se hanno in programma o no la soluzione al vostro problema.
- La soluzione è troppo complicata o richiederebbe troppe risorse. Questo caso può essere una somma del punto precedente con il primo. Potrebbe trattarsi di un piccolo gruppo di sviluppatori che ha già bug più importanti da risolvere, o potrebbe trattarsi di un bug troppo complicato o lungo da risolvere. Ricordiamoci sempre che spesso si tende a cercare di capire quale sia il rapporto costi/benefici nella pianificazione della risoluzione dei bug di un’applicazione. Un bug complicato che si verifica in pochi casi è meno prioritario di uno altrettanto complicato ma che si verifica a un numero più ampio di utenti o con conseguenze più gravi.
- Il programma in cui abbiamo trovato un bug non è più supportato dal produttore. Immaginiamo di trovare oggi un bug nel funzionamento di Windows XP. In questo caso è molto probabile che non venga risolto in quanto Microsoft ha annunciato la fine del supporto di questo sistema operativo già da diversi anni. Come tutto anche il software ha un suo ciclo di vita, viene sviluppato, poi utilizzato, migliorato, manutenuto, e quando il produttore magari ha rilasciato delle nuove versioni (nel caso dell’esempio nuove versioni di windows) il software passa solitamente per un periodo in cui non viene più migliorato ma solamente manutenuto per risolvere i bug più critici, e poi viene dichiarata quella che in gergo di chiama “EOL” (End Of Life, fine di vita), ovvero il momento dal quale il produttore smette di fornire alcun supporto.
- L’azienda o la comunità di sviluppatori non esiste più. In questo caso potrebbe essere fallita l’azienda che produceva il software in questione, o il gruppo che lo sviluppava non è più attivo ed ha abbandonato il programma.
Come abbiamo visto quindi, ci sono molti motivi per cui il nostro bug potrebbe non essere stato risolto. In alcuni casi si tratta di una questione di tempo prima che la soluzione venga rilasciata, in altri dovremo metterci l’anima in pace e convivere con il nostro bug.
Conclusioni
Ora dovreste sapere tutto su cosa sono i bug in informatica, come si risolvono e perché a volte, anche se conosciuti, non vengono risolti.