TDD & Continuous Integration con Jenkins

TDD

Con il termine Test Driven Development (TDD) si fa riferimento ad una tecnica di ingegneria del software nella quale i test sono scritti prima del codice sorgente. Sia la letteratura che la pratica dimostrano come l’attuazione del TDD produca importanti vantaggi durante lo sviluppo del software quali una migliore progettazione, una drastica diminuzione sulla manutenzione del codice e un rapido sviluppo del software.

Il concetto fondamentale è quello di “ottenere qualcosa subito e poi perfezionare”.

TDD_sketch Dopo l’esecuzione dei test, avviene il refactoring del codice e poi, di nuovo, la procedura Test-Code-Refactoring. Il processo viene iterato tante volte quanto e’ necessario affinche’ la funzionalita’ voluta rispetti le specifiche dichiarate in fase di analisi.

La natura metodica del TDD assicura che tutte le singole funzionalita’ siano testate in maniera profonda, sia singolarmente sia insieme. Poiché i test sono condotti fin dall’inizio del ciclo di progettazione, il tempo e il denaro spesi per il debug è ridotto al minimo.

Le tecnologie oggi disponibili, consentono la registrazione di batterie di test che, eseguite in automatico ad ogni modifica del programma, garantiscono la qualità del software prodotto.
Una delle principali limitazioni del TDD risiede nel fatto che i test possono talvolta essere concepiti o applicati in modo non aderente a quello che poi è il reale impiego in produzione portando ad unità che, in produzione, non funzionano come previsto. Infatti anche se tutte le unità funzionano perfettamente singolarmente e in tutti gli scenari previsti, gli utenti finali possono però incontrare situazioni non immaginate dagli sviluppatori. I risultati finali del TDD sono da considerarsi validi come i test che sono stati progettati, l’accuratezza con cui sono stati eseguiti e la misura in cui imitano le condizioni incontrate dagli utenti finali.

Continuous Integration e Continuous Delivery con Jenkins

Git_Jenkins Continuous Integration ExampleIl termine ‘Continuous Integration’ (Integrazione Continua) identifica una serie di operazioni automatiche, utili per la compilazione del progetto.
L’obiettivo primario è quello di verificare che il codice, anche subendo modifiche da diversi sviluppatori, sia sempre in uno stato compilabile ed utilizzabile da tutto il team. In caso di errori, il processo di compilazione viene interrotto e viene immediatamente inviata una notifica agli sviluppatori, in modo tale che sia possibile risolvere il problema il prima possibile.

Con ‘Continuos Delivery’ (Distribuzione Continua) si fa riferimento alla pratica della distribuzione automatica di ogni nuova versione del progetto direttamente in produzione. In questo modo ogni nuova versione che abbia superato tutti i test è disponibile in produzione attraverso un processo completamente automatizzato.

Jenkins

Tra i molteplici strumenti che permettono di implementare l’integrazione continua, una menzione particolare spetta a Jenkins, un tool open source scritto in java. Jenkins è capace di monitorare ogni cambiamento del codice sorgente con i maggiori sistemi di versionamento (GIT, SVN, CVS..) e generare automaticamente codice compilato usando Ant o Maven.
Jenkins permette con estrema facilità di controllare l’introduzione di errori e generare automaticamente nuove builds. In questo modo si riducono notevolmente i tempi per la risoluzione dei bugs e si ha la certezza che il codice sorgente sia sempre in una condizione stabile.

RCP Vision impiega quotidianamente tecniche e tecnologie per il TDD e la Continuous Integration. Grazie all’adozione di questi strumenti, la qualità del nostro software è costantemente monitorata e garantita e siamo in grado di monitorare e condividere con i nostri clienti lo stato di avanzamento dei progetti con precisione e facilità.

Per ulteriori informazioni   info@rcp-vision.com

Share