Testing software: Differenza tra errore, bug, fault, difetto e guasto in informatica
Guasto, errore e fallimento
A differenza dei sistemi fisici, la maggior parte dei guasti software riguarda errori di progettazione e non di fabbricazione. Scoprire gli errori di progettazione è tanto più difficile quanto più è complesso il software.
Di seguito sono riportate tutte le definizioni.
DIFETTO: può essere semplicemente definito come una varianzione tra risultato atteso e reale. Il difetto è un errore riscontrato dopo che l’applicazione entra in produzione. Si riferisce comunemente a diversi problemi con i prodotti software, con il suo comportamento esterno o con le sue caratteristiche interne. In altre parole, Difetto è la differenza tra risultato atteso e reale nel contesto del test. In altre parole, rappresenta la deviazione del requisito del cliente.
Il difetto può essere classificato come segue:
- Sbagliato: quando i requisiti sono implementati non nel modo giusto. Questo difetto è una variazione rispetto alla specifica fornita. È sbagliato!
- Mancante: requisito del cliente non soddisfatto. Questa è una variazione rispetto alle specifiche, un’indicazione che una specifica non è stata implementata o un requisito del cliente non è stato annotato correttamente.
- Extra: un requisito incorporato nel prodotto che non è stato dato dal cliente finale. Questa è sempre una variazione rispetto alle specifiche, ma può essere un attributo desiderato dall’utente del prodotto. Tuttavia, è considerato un difetto perché differisce dai requisiti esistenti.
Vediamo adesso la differenza tra error, bug, e failure
ERROR o ERRORE: un errore è associato ad un errato sviluppo software. Nella categoria degli sviluppatori includiamo ingegneri del software, programmatori, analisti e tester. Ad esempio, uno sviluppatore potrebbe fraintendere una notazione di design, oppure un programmatore potrebbe digitare un nome di variabile in modo errato, causando un errore. È quello che viene generato a causa di login, loop o sintassi errati. L’errore si presenta normalmente nel software; porta a cambiare dunque la funzionalità del programma.
FAULT, BUG o DEFECT: una codifica errata, una definizione di processo o di dati in un programma per computer provoca l’esecuzione del programma in modo involontario o imprevisto. Un bug viene introdotto nel software a seguito di un errore. Si tratta di un’anomalia nel software che può causare un comportamento errato e non conforme alle specifiche. Quindi è il risultato dell’errore.
FAILURE o GUASTO: un failure è l’incapacità di un sistema software o di un componente di eseguire le funzioni richieste entro i requisiti di prestazione specificati. Quando un difetto raggiunge il cliente finale, viene chiamato failure (guasto). Durante lo sviluppo, i tester osservano solitamente guasti.
Testing software
Il metodo più naturale e tradizionale per verificare un prodotto è quello di provarlo in un certo numero di situazioni rappresentative, accertando che si comporti come previsto. In generale, è impossibile testare un software in tutte le sue possibili condizioni operative; pertanto risulta necessario trovare alcuni casi di test che forniscano con una sufficiente evidenza che il prodotto avrà un comportamento accettabile anche nelle situazioni in cui non è stato testato.
Il test è un’attività critica nell’ingegneria del software e dovrebbe essere eseguita nel modo più sistematico possibile, definendo in maniera chiara i risultati che si attendono e il modo in cui si vuole ottenerli. Nella pratica, invece, il test viene eseguito in maniera non sistematica e senza applicare criteri predeterminati.
Il test può essere usato per dimostrare la presenza di malfunzionamenti, non per dimostrare la loro assenza (tesi di Dijkstra, 1972).
Il test dovrebbe dunque aiutare a localizzare gli errori e non solo a rilevarne la presenza. Prima di rilasciare il software finale gli ingegneri devono testare sia i requisiti funzionali che quelli non funzionali, utilizzando eventualmente più di una tecnica di test.