Testing software: Tecniche e approci per la progettazione dei test case

Testing software: Tecniche e approci per la progettazione dei test case

Il testing è una parte essenziale e molto importante per la creazione di un programma robusto ed efficiente, che permette di ridurre in modo sostanziale i costi di manutenzione del programma sviluppato.
Purtroppo nessun testing può ridurre a zero la probabilità di non avere bug o failure, in quanto le possibili combinazioni di valori di input validi sono enormi, e non possono essere riprodotte in un tempo ragionevole. Tuttavia un buon testing può rendere la probabilità di malfunzionamenti abbastanza bassa da essere accettabile dall’utente.
In altre parole, il testing è una procedura usata per verificare comportamenti a run-time di un programma e l’obiettivo del testing è quello di realizzare un software il più esente da errori possibile.

Nessun testing può ridurre a zero la probabilità di non avere bug o failure, in quanto le possibili combinazioni di valori di input validi sono enormi, e non possono essere riprodotte in un tempo ragionevole. Tuttavia un buon testing può rendere la probabilità di malfunzionamenti abbastanza bassa da essere accettabile dall’utente. Il principale ostacolo al testing è sintetizzato nella Tesi di Dijkstra. Tale tesi afferma che il testing può indicare la presenza di errori, ma non ne può garantire l’assenza. Un corollario diretto di tale tesi è che il software error-free non esiste o non è certificabile.

Testing software: Tecniche e approci per la progettazione dei test case

Progettazione dei test case

La progettazione dei test case è una parte del testing del sistema e dei componenti in cui si progettano gli input e gli output attesi.
L’obiettivo del processo è la creazione di un insieme di test efficace nella scoperta dei difetti del programma e in grado di mostrare che il sistema soddisfa i suoi requisiti.
Per progettare un test case si seleziona una funzione del sistema o del componente che si sta testando e un insieme di input per eseguire quella funzione, si documentano gli output attesi o i loro campi di variazione e, dove applicabile, si progettano controlli automatici che verifichino che gli output previsti e reali siano gli stessi.

Esistono diversi approcci per progettare i test case:

  1. test basati su requisiti: i test case sono progettati per testare i requisiti del sistema. Viene utilizzato per lo più nella fase di progettazione del sistema poichè i requisiti di solito sono implementati da diversi componenti; per ogni requisito si identificano test case che possono dimostrare che il sistema lo soddisfa.
  2. test di partizione: si identificano le partizioni di input e output e si progettano i test in modo che il sistema esegua tutti gli input di tutte le partizioni e generi tutti gli output in tutte le partizioni. Le partizioni sono gruppi di dati che hanno caratteristiche comuni, ad esempio come tutti i numeri negativi, tutti i nomi inferiori a 30 caratteri, tutti gli eventi che derivano dalla scelta di oggetti in un menù e così via.
  3. test stutturale: si utilizza la conoscenza della struttura del programma per progettare test che esercitano tutte le parti del programma. Essenzialmente quando si testa un programma si dovrebbe provare a eseguire ogni istruzione almeno una volta. Il test strutturale aiuta a identificare i test case che possono rendere possibile questo.

Infine, bisogna dire che per cercare di aumentare l’efficacia, tagliare i costi e ridurre i tempi di sviluppo, sarebbe estremamente utile poter disporre di tool in grado di generare automaticamente grandi quantità di casi di test, a partire dal codice o dalle specifiche del programa sotto osservazione.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: www.vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *