Tipologie di testing software: Il Test di Unità
Lo scopo dei test di unità è quello di isolare ciascuna parte di un programma e mostrarne correttezza e completezza nell’implementazione, facendo emergere tempestivamente eventuali difetti, in modo che essi possano essere corretti facilmente prima dell’integrazione.
Il testing di unità è realizzato mediante un approccio white-box testing e si articola tipicamente in “test case”, ovvero casi di test, ciascuno dei quali dovrebbe essere indipendente dagli altri.
Dato il forte legame tra codice sorgente, casi di test e relative specifiche da verificare, il test di unità viene normalmente eseguito dallo sviluppatore che si è occupato di quella particolare porzione di programma.
I casi di test, infatti, vengono abitualmente sviluppati in parallelo al codice applicativo e sono implementati tramite procedure automatiche, in grado di rieseguire il test ogni volta che ce ne sia la necessità.
Il motivo per cui tale tipologia di testing risulta fondamentale e irrinunciabile è che spesso i difetti sono più facilmente identificabili tramite i malfunzionamenti avvenuti in un ambiente più piccolo e circoscritto.
Se i difetti vengono identificati e risolti in breve tempo dopo la loro introduzione, il tempo per la loro localizzazione e soluzione risulta notevolmente ridotto.
Il compito del testing di un intero applicativo risulta notevolmente semplificato si è già testata la correttezza di ogni singolo modulo.
Un’altra buona ragione per eseguire i test di unità è che alcuni difetti emergono solamente in presenza di particolari configurazioni del software, che sarebbero difficilmente ricreabili in un ambiente più complesso e vasto.
Spesso vengono introdotti a tal proposito degli appositi “driver”, che simulano le unità chiamanti della componente testata, e degli “stub”, che simulano l’unità chiamata.
Inoltre, il test di unità abbassa i costi, in termini di tempo e risorse, per l’identificazione e la correzione di difetti, rispetto a quelli che si sarebbero dovuti affrontare per ottenere lo stesso risultato tramite dei test sull’intero applicativo.
Nella programmazione orientata agli oggetti la tipica componente che costituisce l’unità da testare individualmente è la classe, ed il test di unità più piccolo include il costruttore ed il distruttore.
In generale il testing non riesce ad identificare tutti gli errori in un programma e lo stesso vale per i test di unità che, analizzando per definizione le singole componenti, non possono rilevare difetti di integrazione, problemi legati alla performance e altri problemi legati al sistema in generale.
Il test di unità risulta quindi più efficace se utilizzato in congiunzione con altre tecniche di testing del software.