Home > Articoli > Unit testing: Cos’è e perché è importante farlo anche per il codice T-SQL!

Unit testing: Cos’è e perché è importante farlo anche per il codice T-SQL!

Questo articolo è il primo di una serie di post in cui tratteremo l’importante tema dello unit testing applicato allo sviluppo di soluzioni database in T-SQL per SQL Server. Let’s start!

Cos’è lo Unit Test?

Lo unit test è un livello di test del software che ha lo scopo di testare una porzione di codice discreta. La parola “unit” si riferisce alla più piccola porzione di codice che è possibile testare separatamente, una funzione o una procedura autonoma che può essere testata in modo isolato. Nello sviluppo di soluzioni database, la “unit” è tipicamente una stored procedure (un trigger) oppure una function. Quando eseguiamo lo unit test di una stored procedura o di una function il test dovrebbe essere focalizzato esclusivamente sul codice che stiamo testando e non su come la procedura interagisce con le alte, è molto importante quindi definire da subito il “System Under Test” (SUT) e isolarlo in modo che non venga influenzato dal comportamento di altre procedure richiamate all’interno di quella che si desidera testare.

Il test deve essere ripetibile perché durante lo sviluppo non solo vorremo verificare di aver soddisfatto i requisiti una volta ma vorremo continuare a soddisfarli mentre sviluppiamo nuovo codice. La ripetibilità del test ci darà la possibilità di automatizzarlo, condizione essenziale per integrare test automatici all’interno di uno strumento di Continuous Integration.

Ogni singolo “test case” deve verificare una sola condizione, le condizioni di test dovrebbero riflettere i requisiti richiesti al software. Così facendo otterremo una serie di test case discreti su ogni unità. Verificando una sola condizione, che riflette un requisito, sarà quindi possibile identificare con chiarezza quali condizioni non sono state verificate e quali invece soddisfano i requisiti confermando o meno che tutte le singole parti funzionino.

Le unit di test sono uno strumento di sviluppo, vengono tipicamente implementate da chi ha realizzato il codice, la stored procedure, la funzione, ecc. Il Team che effettua collaudi software può implementare unit test aggiuntive per aumentare la copertura del test.

Che vantaggi avrò scrivendo le unit di test?

Le unit test trasmettono sicurezza! Quante volte, a fronte di una richiesta di modifica, avete sentito la frase “Perché dobbiamo modificare proprio quella stored procedure? E se poi non funziona più? E’ talmente complessa! Al termine delle modifiche dovrò provare ogni singolo caso! Sai quanto tempo ci vorrà? E’ impossibile saperlo!“. Spesso, anche l’autore di una parte di codice complessa pone resistenza alle modifiche perché teme ripercussioni sull’installato funzionante. Dovrà ritestare tutti i casi con il timore di dimenticarne qualcuno, con forte incertezza sui tempi di sviluppo. Al contrario, potendo contare su una batteria di test ripetibili, lo sviluppatore non avrà timore di modificare parti complesse di codice perché sa che potrà contare sulle unit di test a cui affiderà la verifica dei risultati attesi a fronte di certi dati di input.

Le unit di test forniscono la documentazione dei requisiti che soddisfano perché si crea un legame diretto tra ogni test ed il requisito che verifica.

Le unit di test educano alla progettazione. Pensando ai test fin dall’inizio miglioreremo la fase di progettazione, penseremo in anticipo a cosa si deve realizzare, la maggior parte della progettazione verrà quindi eseguita in anticipo, riflettendo sulle specifiche richieste, piuttosto che precipitandosi a scrivere codice.

Le unit di test semplificano il processo di controllo degli errori perché identificano con precisione quale test case è fallito.

Convinti dell’importanza di iniziare subito a scrivere unit test per il vostro codice T-SQL, vi state chiedendo: Da dove posso iniziare? Nel prossimo paragrafo introdurremo tSQLt, uno dei framework più popolari per la scrittura di unit test in SQL Server.

Introduzione a tSQLt

tSQLt, sviluppato da Sebastian Meine e Dennis Lloyd, è il framework open source per l’implementazione di unit test in T-SQL per SQL Server. tSQLt è scritto in T-SQL, funziona con tutte le edizioni di SQL Server a partire dalla versione 2005 SP2, richiede l’abilitazione di SQL CLR.

tSQLt fornisce le seguenti funzionalità per semplificare la creazione e la gestione delle unit test:

  • I test vengono eseguiti automaticamente all’interno di transazioni, questo approccio è stato adottato per mantenere i test indipendenti e ridurre il lavoro di pulizia delle strutture temporanee eventualmente utilizzate durante i test
  • I test possono essere raggruppati all’interno di uno schema, questo consente di organizzare meglio i test e utilizzare metodi di configurazione comuni
  • L’output può essere in testo normale o XML, semplificando l’integrazione con strumenti di Continuous Integration
  • Il framework offre la possibilità di creare fake table e fake view nonché stored procedure “spies” offrendo tutti gli strumenti per testare il codice in isolamento

È possibile scaricare l’ultima versione di tSQLt dalla pagina download del sito (un aggiornamento è stato rilasciato alcuni giorni fa), la guida completa è disponibile qui ed è presente anche una guida rapida per chi ha fretta di mettere le mani in pasta!

Nel prossimo articolo descriveremo come installare tSQLt all’interno di un database SQL Server e tratteremo l’anatomia di una unit di test!

Chi è Sergio Govoni

Sergio Govoni è laureato in Scienze e Tecnologie Informatiche. Da oltre 16 anni lavora presso una software house che produce un noto sistema ERP, distribuito a livello nazionale ed internazionale, multi azienda client/server su piattaforma Win32. Attualmente si occupa di progettazione e analisi funzionale, coordina un team di sviluppo ed è responsabile tecnico di prodotto. Lavora con SQL Server dalla versione 7.0 e si è occupato d'implementazione e manutenzione di database relazionali in ambito gestionale, ottimizzazione delle prestazioni e problem solving. Nello staff di UGISS si dedica alla formazione e alla divulgazione in ambito SQL Server e tecnologie a esso collegate, scrivendo articoli e partecipando come speaker ai workshop e alle iniziative del primo e più importante User Group Italiano sulla tecnologia SQL Server. Ha conseguito la certificazione MCP, MCTS SQL Server. Per il suo contributo nelle comunità tecniche e per la condivisione della propria esperienza con altri, dal 2010 riceve il riconoscimento SQL Server MVP (Microsoft Most Valuable Professional). Nel corso dell'anno 2011 ha contribuito alla scrittura del libro SQL Server MVP Deep Dives Volume 2 (http://www.manning.com/delaney/).

Leggi Anche

Unit testing: Come scrivere la tua prima unit test!

Nell’articolo precedente, il secondo di questa serie, abbiamo descritto come installare il framework tSQLt, il …