Successo e obiettivi del Testing del software

Successo e obiettivi del Testing del software

Errori, Difetti e Malfunzionamenti

Se da un lato si può affermare che l’obiettivo principale del testing sia quello di identificare e prevedere quanti più difetti possibili di un’applicazione tramite i suoi malfunzionamenti, per evitare che essi possano verificarsi durante il normale funzionamento, dall’altro è necessario capire la natura di tali difetti e in che modo essi possano generare i malfunzionamenti.

Successo e obiettivi del Testing del software

I difetti di un prodotto software saranno sempre presenti in una certa misura e ciò non dipende da una disattenzione o irresponsabilità dello sviluppatore, ma perché la complessità del software è generalmente intrattabile e gli uomini hanno capacità limitate per gestire la complessità. Una prima tipologia di difetti che si possono presentare in un’applicazione sono quelli rilevabili da malfunzionamenti del software in fase di esecuzione, solitamente causati da difetti di design applicativo o da difetti di codice.

I difetti di design applicativo evidenziano un’inadeguatezza della struttura del programma, come ad esempio l’errata interazione tra moduli o la scelta sbagliata di un algoritmo.
I difetti di codice sono invece legati ad un uso scorretto del linguaggio di programmazione e possono essere errori di sintassi, dovuti alla mancanza di comprensione del design applicativo o ad un uso sbagliato dei costrutti. L’esecuzione delle porzioni di codice contenenti tali difetti provocano i malfunzionamenti, che risultano quindi legati in modo diretto.

Un altro tipo di difetti sono quelli più difficili da osservare in fase di esecuzione del software. In questo caso la percezione di un malfunzionamento si manifesta in modo evidente tramite un comportamento difforme dalle specifiche o dai requisiti impliciti o espliciti dell’applicazione, ma la causa di tale malfunzionamento non risulta altrettanto chiara.
L’esempio più classico di questo tipo di difetti sono quelli legati all’usabilità o all’aspetto grafico di un applicativo.
La difficoltà nel rilevare tali difetti sta nella soggettività con cui i malfunzionamenti vengono percepiti e la mancanza di relazioni che legano tali percezioni ai difetti oggettivi del prodotto software.
L’ultima tipologia di difetti sono quelli non riscontrabili attraverso i malfunzionamenti.
Se precedentemente abbiamo definito un malfunzionamento come un comportamento difforme dai requisiti e dalle specifiche, un difetto inerente la definizione delle specifiche e dei requisiti stessi non è rilevabile.

Nel caso in cui le specifiche fornite dallo sviluppatore non rispondano completamente alle esigenze dell’utente finale, espresse con i requisiti informali, si possono verificare ambiguità, contraddizioni, imprecisioni e mancanze nella loro definizione.
Lo stesso discorso può essere fatto per i difetti presenti nei casi di test e nella loro progettazione e pianificazione.
Pertanto, in questo contesto, se un test non rileva malfunzionamenti non significa che l’applicazione sia priva di difetti, ma bensì che il difetto potrebbe risiedere nei test stessi o nella definizione dei requisiti e delle specifiche.

Obiettivi del Testing

Alla luce di quanto emerso riguardo ai difetti di un prodotto software possiamo affermare che l’obiettivo principale del testing è proprio quello di rilevare tali anomalie, di qualsiasi tipo o natura.
Fornendo tramite i casi di test un’adeguata copertura del codice sorgente, ovvero facendo in modo che vengano testate tutte le porzioni di codice, quindi eseguendo tutti i cammini possibili, e analizzando tutte le possibili configurazioni di test secondo criteri di classi di equivalenza è possibile rilevare l’insorgere di tali difetti in fase di esecuzione.
Come abbiamo visto, però, tale operazione potrebbe non essere sufficiente per identificare tutti i tipi di difetti analizzati in precedenza.
In un contesto simile, assumono un ruolo fondamentale anche le fasi di convalida e verifica del software, parti integranti del processo di testing.
La convalida, infatti, assicura che si stia costruendo il giusto prodotto, facendo in modo che le esigenze dell’utente finale siano perfettamente rappresentate sia nella definizione dei requisiti informali, che nelle relative specifiche formali, e che l’applicazione faccia ciò che l’utente ha realmente chiesto.

La verifica, invece, assicura che si stia sviluppando il prodotto in modo corretto, quindi che il software sia conforme in ogni sua parte alle specifiche formali.
Un insieme di test ideali in fase di esecuzione, unitamente ad una verifica e una convalida del software perfette, quindi, possono esprimere con alta probabilità la presenza o meno di difetti.
Ciò significa che lo scopo del processo di testing, oltre all’identificazione dei difetti esistenti, può essere anche quello di prevedere con una certa probabilità l’insorgere o meno di eventuali malfunzionamenti, causati da tali difetti, durante la normale operatività del software.

Essendo i malfunzionamenti dei comportamenti dell’applicazione difformi dai requisiti impliciti o espliciti definiti per l’applicazione, possiamo dire che, per un prodotto software testato accuratamente, si conoscono e si possono prevedere le caratteristiche presentate in tali specifiche.
Se le specifiche definiscono correttezza, affidabilità, robustezza, efficienza, usabilità, riusabilità, manutenibilità e portabilità di un prodotto software, allora il testing ci permette di conoscere tali caratteristiche con una precisione proporzionale alla probabilità dell’esistenza di difetti, poiché esse dipendono direttamente o indirettamente dal manifestarsi di malfunzionamenti.
Detto ciò, se il concetto di qualità, come definito nello standard è la “capacità di un insieme di caratteristiche inerenti ad un prodotto, sistema, o processo di ottemperare a requisiti di clienti e di altre parti interessate”, possiamo giungere alla conclusione che un altro scopo del testing è proprio quello di misurare e prevedere un certo grado di qualità dell’applicativo realizzato.

Precedente Il Testing o Collaudo del software Successivo Testing del software: Tecniche di analisi statica e dinamica

Lascia un commento

*