Definizione del testing software o collaudo del software
Introduzione al testing software
L’Institute of Electrical and Electronics Engineers (IEEE) definisce il testing software come “il processo di valutazione di un sistema attraverso strumenti manuali o automatici col fine di determinare se il sistema soddisfa i requisiti specificati oppure se il suo comportamento verificato differisce da quello atteso”.
A differenza di un comune prodotto non informatico, lo sviluppo di un software può dipendere da altri sistemi o da altri software, pertanto il testing può essere fatto più volte durante le fasi del ciclo di vita del software in base al modello di sviluppo adottato.
Al fine di installare in produzione un software finito, lo scopo del testing è quello di rilevare i difetti tramite i malfunzionamenti per poterli correggere prima che venga utilizzato dall’utente finale.
Teorema di Dijkstra (anno 1969): “il test di un programma può rilevare la presenza di malfunzionamenti, ma mai dimostrarne l’assenza”.
Definizione del testing software
Il test del software è un processo di esecuzione di un programma o di un’applicazione con l’intento di trovare i bug del software. Questo, può anche essere indicato come il processo di convalida e verifica che un programma software, un’applicazione o un prodotto:
- Soddisfa i requisiti tecnici e aziendali che ne hanno guidato la progettazione e lo sviluppo
- Funziona come previsto
- Può essere implementato con la stessa caratteristica.
In pratica, il test del software è una parte importante dello sviluppo del software. Se il test del software non viene eseguito correttamente, le applicazioni possono contenere errori che possono portare a rilavorazioni, guasti costosi o, peggio, perdite di vite umane.
Modelli di sviluppo e fase di testing software
L’ingegneria del software definisce modello di sviluppo il modo in cui i processi, definiti per la progettazione e messa in esercizio di un programma software, interagiscono e si connettono tra di loro.
Le singole attività descritte nel ciclo di vita del software sono:
- Definizione dei requisiti ed analisi di progetto;
- Progettazione;
- Implementazioni;
- Collaudo del software (o testing software);
- Rilascio;
- Manutenzione.
A seconda del modello utilizzato, le attività possono essere ripetute più volte, affrontate ad alto livello con la stesura di documenti oppure ad un livello più basso con la sola fase di scrittura del codice. Alcuni modelli prevedono più incontri con il cliente e sviluppi incrementali, altri un incontro all’inizio ed uno alla fine prima della messa in esercizio.
L’evoluzione dei modelli è avvenuta in modo incrementale, il miglioramento del primo diventava un secondo modello. Primo fra tutti quello a “cascata” mentre negli ultimi anni si sta passando a modelli con metodologie dette “agili” .
Modelli Agili
Dagli anni ’90 è nata una nuova filosofia di sviluppo, le attività definite nei modelli precedentemente creati dall’ingegneria del software sono state considerate “pesanti”, “lente” e non competitive con il mercato a fronte dell’evoluzione tecnologica in corso. Si è pensato, duqnue, di creare delle metodologie più “leggere” ed “agili” per affrontare i problemi più rapidamente, direttamente con il cliente, senza dover aspettare la fase successiva come accade nei modelli precedentemente descritti. L’ordine delle attività non è più sequenziale ma dinamico in base all’andamento dello sviluppo.
Un esempio di metodologia agile è l’ “Extreme Programming” (letteralmente “programmazione estrema”, abbreviata in XP), un approccio all’ingegneria del software formulato da Kent Beck, Ward Cunningham e Ron Jeffries. Kent Beck, scrisse il primo libro sull’XP, Extreme Programming Explained: Embrace Change. Aspetti interessanti sono la programmazione a più mani (generalmente in coppia), la verifica continua del programma durante lo sviluppo per mezzo di programmi di test e la frequente reingegnerizzazione del software a passi incrementali, senza dover rispettare fasi di sviluppo particolari. Vengono adottati processi di sviluppo come la Test Driven Development (letteralmente “sviluppo guidato alle verifiche”, abbreviato in TDD ), dove in base alle funzionalità e specifiche che si dovranno implementare, si creano prima i test e poi il codice sorgente.
Si noti, infine, che in qualsiasi modello di sviluppo che si adotti, la fase di testing sarà sempre un passo fondamentale per la buona riuscita del progetto.
Importanza del test del software
Ad alto livello, il test del software è necessario per rilevare i bug nel software e per verificare se il software soddisfa i requisiti dei clienti. Questo aiuta il team di sviluppo a correggere i bug e fornire un prodotto di buona qualità.
Ci sono diversi punti nel processo di sviluppo del software in cui l’errore umano può portare a software che non soddisfa i requisiti dei clienti. Alcuni di loro sono elencati di seguito.
- Il cliente o la persona che fornisce i requisiti per conto dell’organizzazione del cliente potrebbe non sapere esattamente cosa è richiesto o potrebbe dimenticare di fornire alcuni dettagli, il che potrebbe portare a funzionalità mancanti
- La persona che sta raccogliendo i requisiti può interpretare erroneamente o perdere completamente un requisito quando li documenta
- Durante la fase di progettazione, se ci sono problemi nella progettazione, potrebbe portare a bug in futuro
- I bug possono essere introdotti durante la fase di sviluppo durante l’errore umano, la mancanza di esperienza, ecc
- I tester possono perdere i bug durante la fase di test a causa di errori umani, mancanza di tempo, esperienza insufficiente, ecc
- I clienti potrebbero non avere la larghezza di banda per testare tutte le funzionalità del prodotto e potrebbero rilasciare il prodotto ai propri utenti finali, il che può portare gli utenti finali a trovare errori nell’applicazione
Infine, il business e la reputazione di un’organizzazione dipendono dalla qualità dei suoi prodotti e in alcuni casi anche le entrate possono dipendere dalle vendite del prodotto software.
Gli utenti potrebbero preferire acquistare un prodotto concorrente rispetto a un prodotto di scarsa qualità e questo può comportare una perdita di entrate per l’organizzazione. Nel mondo di oggi, la qualità è una delle massime priorità per qualsiasi organizzazione.