Unit testing

attività di collaudo di singole unità di un software

Nella Programmazione informatica, lo unit testing è una procedura usata per verificare singole parti di un codice sorgente . Per unità si intende genericamente la minima parte testabile di un codice sorgente: nella programmazione procedurale un'unità può rappresentare un singolo programma, funzione, procedura, etc.; nella programmazione orientata ad oggetti, la più piccola unità può essere il metodo.

Lo Unit Testing si articola in test case ciascuno dei quali dovrebbe essere indipendente dagli altri. Lo Unit Testing viene normalmente eseguito dagli sviluppatori, non da utenti finali.

Benefici

Lo scopo dell'Unit testing è quello di verificare il corretto funzionamento di parti di programma permettendo così una precoce individuazione dei bug. Uno unit testing accurato può dare una prova certa se un pezzo di codice funziona correttamente, con importanti vantaggi:

Semplifica le modifiche

Lo unit testing facilita la modifica del codice del modulo in momenti successivi (refactoring) con la sicurezza che il modulo continuerà a funzionare correttamente. Il procedimento consiste nello scrivere test case per tutte le funzioni e i metodi, in modo che se una modifica produce un fallimento del test, si possa facilmente individuare la modifica responsabile. Unit test già predisposti semplificano la vita al programmatore nel controllare che una porzione di codice sta ancora funzionanado correttamente. Un buon unit testing produce test case che coprano tutti i percorsi del codice dell'unità, con particolare attenzione alle condizioni nei cicli (test sugli if, while, for). In sistemi con unit testing continuo, tali test sono in grado di garantire l'automatica integrità del codice ad ogni modifica.

Semplifica l'integrazione

Lo unit testing semplifica l'integrazione di moduli diversi perché limita i malfunzionamenti a problemi nella interazione tra i moduli e non nei moduli stessi, rendendo i test di integrazione più semplici. Un argomento molto dibattuto è quello della non necessità di test di integrazione manuali, in caso si sia organizzata una procedura di unit testing sufficientemente completa. In realtà spesso un elaborato sistema di unit testing fornisce una falsa sicurezza e un test di integrazione gestito da esseri umani è in genere ugualmente necessario. Probabilmente la reale necessità del fattore umano nella procedura di test dipende dalle caratteristiche del sistema nel quale si sviluppa e soprattutto dalla disponibilità di risorse.

Supporta la documentazione

Lo unit testing fornisce una documentazione "viva" del codice, perchè è intrinsecamente un esempio di utilizzo dell'API del modulo.

I test case incorporano le caratteristiche critiche per il successo di un'unità di codice. Tali caratteristiche indicano l'uso appropriato dell'unità e i comportamenti errati che devono essere identificati nel suo funzionamento. Pertanto lo unit testing documenta tali carattestiche, sebbene in molti ambienti questi non possono costituire la sola documentazione necessaria. In compenso, la tradizionale documentazione diventa spesso obsoleta a cause di successive modifiche del codice non documentate.

Limitazioni dall'unit testing

In generale il testing non riesce ad identificare tutti gli errori in un programma, e lo stesso vale per lo Unit Testing che, analizzando per definizione le singole unità, può non identificare gli errori di integrazione, problemi legati alla performance e altre questioni di sistema. Lo unit testing è più efficace se utilizzato in congiunzione con altre tecniche di testing del software.

Come ogni forma di testing, anche lo Unit Testing non può individuare l'assenza di errori ma può solo verificarne la presenza.

Applicazioni

See also