La Con­ti­nuous Delivery (in italiano “consegna continua”) è un concetto in­no­va­ti­vo dello sviluppo dei software sempre più popolare. Secondo la Con­ti­nuous Delivery le fasi di pro­du­zio­ne, sviluppo, controllo qualità e rilascio non sono fini a sé stesse, ma si ripetono con­ti­nua­men­te e in au­to­ma­ti­co nel processo di sviluppo all’interno della co­sid­det­ta pipeline di Con­ti­nuous Delivery. Il vantaggio è che i prodotti software vengono sot­to­po­sti al controllo qualità a in­ter­val­li regolari e possono già essere ri­la­scia­ti mentre il prodotto è ancora in la­vo­ra­zio­ne. Nella pipeline si ricevono quindi co­stan­te­men­te dei feedback grazie ai quali è possibile apportare qualsiasi modifica al codice sorgente e mi­glio­ra­re così il software in maniera mirata.

De­fi­ni­zio­ne

La Con­ti­nuous Delivery è un modello in­tro­dot­to nello sviluppo di software per eseguire con­tem­po­ra­nea­men­te le fasi di sviluppo, rilascio, feedback e gestione della qualità in brevi in­ter­val­li e in un ciclo continuo. Lo sviluppo in questo modo diventa più ef­fi­cien­te e il cliente riceve prima il prodotto, anche quando questo non è ancora pronto. La Con­ti­nuous Delivery fornisce feedback allo svi­lup­pa­to­re sulla base di test au­to­ma­tiz­za­ti che con­trol­la­no prin­ci­pal­men­te il build ogni­qual­vol­ta viene mo­di­fi­ca­to il codice sorgente.

La Con­ti­nuous Delivery descrive dunque un processo che unisce e au­to­ma­tiz­za sviluppo, rilascio, feedback e gestione qualità, riducendo al minimo quelle com­pli­ca­te fasi di lavoro che ri­chie­do­no tempo.

I vantaggi della Con­ti­nuous Delivery

Secondo lo sviluppo software classico, il prodotto finale viene ri­la­scia­to non appena contiene tutte le ca­rat­te­ri­sti­che richieste, funziona bene e non risultano gravi difetti dal controllo qualità. Lo svi­lup­pa­to­re di solito prevede patch e ag­gior­na­men­ti del software a in­ter­val­li più o meno regolari. Grazie alla Con­ti­nuous Delivery il prodotto viene ri­la­scia­to già nelle prime fasi di sviluppo, mentre è ancora in ela­bo­ra­zio­ne. La bozza prevede spesso solo le funzioni di base del software, che vengono poi testate dal cliente in un ambiente reale. Il cliente (e chi testa il software per lui) gioca dunque un ruolo fon­da­men­ta­le nel controllo qualità.

Il feedback che ne deriva aiuta lo svi­lup­pa­to­re a mi­glio­ra­re le ca­rat­te­ri­sti­che del programma durante lo sviluppo, ricevendo pos­si­bil­men­te im­por­tan­ti in­di­ca­zio­ni su quale deve essere l’aspetto suc­ces­si­vo da svi­lup­pa­re. In assenza della Con­ti­nuous Delivery, questo processo risulta piuttosto faticoso e può portare malumori da entrambe le parti: il cliente aspetta un prodotto finito che soddisfi le sue esigenze e i suoi desideri; lo svi­lup­pa­to­re dall’altra parte non sa ancora in cosa esso consista esat­ta­men­te. Se la co­mu­ni­ca­zio­ne sullo stato dello sviluppo del prodotto avviene già durante le prime fasi di lavoro, è più facile tenere in con­si­de­ra­zio­ne i desideri del cliente ed evitare errori. Tale principio può essere rap­pre­sen­ta­to come un ciclo:

Le tre fasi di sviluppo, controllo e pro­du­zio­ne non si estin­guo­no in un unico processo, ma sono co­stan­te­men­te in­ter­con­nes­se tra loro: il prodotto quindi at­tra­ver­sa con­ti­nua­men­te queste singole fasi e viene sempre mi­glio­ra­to. Con un gran numero di clienti non si può più fare a meno dell’au­to­ma­tiz­za­zio­ne: ed è qui che si inserisce la Con­ti­nuous Delivery, che au­to­ma­tiz­za l’intero processo.

Grazie alla Con­ti­nuous Delivery è possibile testare in tempo reale ogni ela­bo­ra­zio­ne ed esten­sio­ne del software (pra­ti­ca­men­te ogni modifica apportata al codice sorgente), rac­co­glien­do così feedback costanti, utili a in­di­vi­dua­re i problemi e ri­sol­ver­li già nelle prime fasi di sviluppo. Un sistema molto pratico per stabilire in modo tem­pe­sti­vo quale parte del codice ha causato un bug: senza la Con­ti­nuous Delivery la ricerca del problema potrebbe diventare davvero di­spen­dio­sa.

Prima del rilascio al cliente, il software at­tra­ver­sa nel suo stadio in­ter­me­dio la pipeline di Con­ti­nuous Delivery: in questa fase vengono ef­fet­tua­ti test sia au­to­ma­ti­ci che manuali. Ogni fase di test prevede una nuova versione del software (per lo più definita come “versione beta”, a volte anche come “nightly build”, cioè una versione generata durante la nottata) che passa at­tra­ver­so la pipeline. Solo quando tutti i test sono stati superati con un feedback positivo viene creata una versione “stabile” (“stable”) e il prodotto viene uf­fi­cial­men­te pub­bli­ca­to (questo processo come anche la stessa ap­pli­ca­zio­ne ri­la­scia­ta viene chiamato “release”). La pro­ba­bi­li­tà che il cliente riceva un prodotto senza errori è molto alta.

Il grosso vantaggio della Con­ti­nuous Delivery è che conviene sia al cliente che allo svi­lup­pa­to­re: il cliente riceve il prodotto più in fretta e di regola senza errori, lo svi­lup­pa­to­re effettua dei “test sul campo” che sono molto più at­ten­di­bi­li dei test beta ef­fet­tua­ti in azienda, in quanto for­ni­sco­no dati e in­di­ca­zio­ni preziosi. Il completo processo di sviluppo diventa molto più fles­si­bi­le e il rischio di pub­bli­ca­re un software con degli errori viene ridotto al minimo.

Pa­no­ra­mi­ca dei vantaggi e degli svantaggi della Con­ti­nuous Delivery

Vantaggi Svantaggi
Gli errori di software vengono ri­co­no­sciu­ti e risolti in modo ef­fi­cien­te già durante il processo di sviluppo. Costi: è ne­ces­sa­rio un server di in­te­gra­zio­ne veloce e af­fi­da­bi­le per ef­fet­tua­re test au­to­ma­ti­ci e per un rilascio con­vin­cen­te e af­fi­da­bi­le del prodotto.
Gli sforzi collegati a un release classico del software vengono meno. Lo svi­lup­pa­to­re può con­cen­trar­si del tutto sul mero sviluppo del prodotto. I test au­to­ma­ti­ci devono fun­zio­na­re per­fet­ta­men­te. I test sbagliati possono causare dei grossi danni nella fase del controllo qualità.
La pipeline di Con­ti­nuous Delivery al­leg­ge­ri­sce enor­me­men­te il lavoro degli svi­lup­pa­to­ri nella ricerca degli errori. Necessita di una buona sintonia all’interno del team in quanto le modifiche del codice devono essere ef­fet­tua­te spesso e in modo ef­fi­cien­te.
Non comporta costi eccessivi, evitando quei costi che de­ri­ve­reb­be­ro invece da altri processi di test (ad esempio alpha e beta test). Necessita con­ti­nua­men­te di una buona in­te­ra­zio­ne con i clienti e con i loro sistemi.
Il controllo qualità può con­cen­trar­si di più sui mi­glio­ra­men­ti pro­get­tua­li che su quelli tecnici del software. Il cliente si aspetta continui ag­gior­na­men­ti e mi­glio­ra­men­ti. Raramente sarà possibile “mettere in pausa” il progetto del software.
Lo sviluppo del software avviene ve­lo­ce­men­te, dato che lo svi­lup­pa­to­re sarà so­sti­tui­to in gran parte dal processo au­to­ma­tiz­za­to di release, pre­ve­den­do meno pause. L’im­ple­men­ta­zio­ne di novità, mi­glio­ra­men­ti e cam­bia­men­ti al prodotto avviene ancora ma­nual­men­te. Per au­to­ma­tiz­za­re questo processo bisogna passare al Con­ti­nuous De­ploy­ment.
I release veloci e frequenti ac­ce­le­ra­no i feedback e i mi­glio­ra­men­ti. Il cliente si deve mostrare pronto a uti­liz­za­re un software che si trova ancora in fase di sviluppo. Inoltre deve essere motivato a inviare feedback, fon­da­men­ta­li per la buona riuscita del progetto.
Lo svi­lup­pa­to­re subisce meno pressione in fase di cam­bia­men­to al codice sorgente, perché gli errori vengono trovati ve­lo­ce­men­te. Ciò ha un buon influsso sul lavoro, ren­den­do­lo più motivante e portando ispi­ra­zio­ne.  

Le fasi della pipeline di Con­ti­nuous Delivery

Con la modifica del codice si attiva la pipeline di Con­ti­nuous Delivery e viene eseguito il processo di test. Di seguito le fasi che percorre la pipeline di Con­ti­nuous Delivery:

  1. Commit Stage: in questa prima fase di test la versione del software viene provata, le com­po­nen­ti di software compilate e necessari test di unità eseguiti. Dopo che i test si sono conclusi con buon esito, questa fase è terminata. Gli artefatti binari delle com­po­nen­ti di software vengono rag­grup­pa­ti in bundle e ar­chi­via­ti in re­po­si­to­ry. Questo pacchetto è de­ter­mi­nan­te per la fun­zio­na­li­tà della pipeline perché indica lo stato del software: il pacchetto contiene la quantità di dati che in seguito sarà in­stal­la­ta sul sistema finale. I risultati dei test nel Commit Stage possono quindi essere assegnati alle modifiche spe­ci­fi­che del codice sorgente: ciò rap­pre­sen­ta il vantaggio si­gni­fi­ca­ti­vo della Con­ti­nuous Delivery.
  2. Ac­cep­tan­ce Test Stage: in questa seconda fase di test avvengono i test di ac­cet­ta­zio­ne, tra cui i test di in­te­gra­zio­ne (funziona l’in­te­ra­zio­ne tra le com­po­nen­ti?) e gli im­por­tan­ti test di sistema (funziona il software sul sito utente?). Inoltre ci sono test opzionali che possono essere integrati all’Ac­cep­tan­ce Test Stage, come i test di pre­sta­zio­ne e altri test che con­trol­la­no i requisiti non fun­zio­na­li del software. Per l’Ac­cep­tan­ce Test Stage si uti­liz­za­no ancora i bundle della fase pre­ce­den­te in­stal­la­ti in un ambiente test adatto.
  3. Gli eventuali errori o le com­pli­ca­zio­ni che si re­gi­stra­no in queste fasi vengono do­cu­men­ta­te e, se ne­ces­sa­rio, inviate allo svi­lup­pa­to­re come feedback, via e-mail, programmi di mes­sag­gi­sti­ca o tramite tool speciali (vedi sotto). Le se­gna­la­zio­ni di errore o le re­gres­sio­ni si ri­fe­ri­sco­no sempre all’ultima modifica, in quanto la pipeline si attiva ad ogni modifica del codice. Quindi lo svi­lup­pa­to­re può reagire ve­lo­ce­men­te per cor­reg­ge­re errori o per ritoccare i codici errati.
  4. All’oc­cor­ren­za vengono eseguiti anche test manuali. Anche per questi test la pipeline si serve del bundle della prima fase e lo installa in un ambiente test adatto.
  5. Se i test si con­clu­do­no tutti con esito positivo, il pacchetto può essere in­stal­la­to ma­nual­men­te sul sistema di de­sti­na­zio­ne: per farlo di solito c’è bisogno sem­pli­ce­men­te di “premere un pulsante”. Se anche questa fase è au­to­ma­tiz­za­ta si parla di Con­ti­nuous De­ploy­ment.

Con­ti­nuous In­te­gra­tion e Con­ti­nuous Delivery

Associato alla Con­ti­nuous Delivery viene spesso uti­liz­za­to il concetto di Con­ti­nuous In­te­gra­tion. Tuttavia c’è una grande dif­fe­ren­za tra le due: mentre la Con­ti­nuous In­te­gra­tion prevede l’au­to­ma­tiz­za­zio­ne dei processi di test e condivide per la maggior parte la pipeline con la Con­ti­nuous Delivery, il concetto di Con­ti­nuous Delivery è più esteso e prevede anche il processo di release au­to­ma­tiz­za­to del software. In questo modo la Con­ti­nuous Delivery integra il modello della Con­ti­nuous In­te­gra­tion per l’utente finale, ri­la­scian­do il prodotto già nella fase di test.

Se uno svi­lup­pa­to­re utilizza la Con­ti­nuous In­te­gra­tion o se estende il processo di sviluppo alla Con­ti­nuous Delivery, dipende dalla pia­ni­fi­ca­zio­ne dello sviluppo, dal team di sviluppo e dal cliente. Qui di seguito le mettiamo a confronto:

Con­ti­nuous In­te­gra­tion (CI) Con­ti­nuous Delivery (CD)
Processo di test au­to­ma­tiz­za­to che controlla in modo critico tutte le modifiche del codice sorgente. Amplia il processo di test in­te­gran­do­vi il processo di rilascio. Novità e modifiche del codice arrivano au­to­ma­ti­ca­men­te all’utente finale.
Il team deve creare un test au­to­ma­ti­co per ogni fun­zio­na­li­tà, ogni mi­glio­ra­men­to e ogni cam­bia­men­to di codice. Anche per la CD è im­por­tan­te che i test siano ef­fi­cien­ti in quanto i risultati arrivano im­me­dia­ta­men­te all’utente finale.
Necessita di un server dedicato d’in­te­gra­zio­ne continua che controlla e utilizza i test au­to­ma­ti­ci. Anche l’in­stal­la­zio­ne sul sistema di de­sti­na­zio­ne deve avvenire pos­si­bil­men­te in modo au­to­ma­tiz­za­to con maggiori requisiti sul server.
Gli svi­lup­pa­to­ri devono riunire di continuo le modifiche al codice. Gli svi­lup­pa­to­ri devono curare il contatto con il cliente ed essere quanto più possibile tra­spa­ren­ti riguardo al software.
Necessita di molte risorse per as­si­cu­ra­re la qualità del prodotto in fase di rilascio. Il dispendio di risorse diventa maggiore nella CD. Il prodotto può essere ri­la­scia­to molto prima ed essere sot­to­po­sto a un “vero” test.
Lo sviluppo in sé è più ef­fi­cien­te, ma deve essere messo in pausa spesso dai release manuali. Può essere svi­lup­pa­ta inin­ter­rot­ta­men­te, in quanto il processo di release è per la maggior parte au­to­ma­tiz­za­to.

Tool co­no­sciu­ti per la Con­ti­nuous Delivery

Esistono diversi programmi che sem­pli­fi­ca­no l’uso della Con­ti­nuous Delivery. Ve li pre­sen­tia­mo.

Jenkins

Jenkins è un’ap­pli­ca­zio­ne web per l’in­te­gra­zio­ne continua di com­po­nen­ti per software. Jenkins, basato su lin­guag­gio Java, necessita di un container EJB e dispone di diversi tool di build (Apache Ant, Maven/Gradle, CVS, Sub­ver­sion, Git e altri) oltre ai processi di test au­to­ma­ti­ci (JUnit, Emma) im­por­tan­ti per la Con­ti­nuous Delivery. Altri plug-in in opzione as­si­cu­ra­no la com­pa­ti­bi­li­tà con altri com­pi­la­to­ri. L’in­ter­fac­cia di pro­gram­ma­zio­ne basata su REST permette anche agli altri programmi di servirsi di Jenkins. Jenkins è un programma open source gratuito. È con­si­glia­to so­prat­tut­to per i prin­ci­pian­ti, in quanto l’in­ter­fac­cia e le fun­zio­na­li­tà sono molto semplici da usare.

Consiglio

Leggete il nostro tutorial di Jenkins passo per passo per capire come funziona l’ap­pli­ca­zio­ne.

CircleCI

CircleCI è un’altra ap­pli­ca­zio­ne basata su web per Con­ti­nuous In­te­gra­tion, Delivery e De­ploy­ment. CircleCI lavora so­prat­tut­to con GitHub, GitHub En­ter­pri­se e Bitbucket. Inoltre la piat­ta­for­ma offre molte fun­zio­na­li­tà pratiche come la gestione degli incarichi, la gestione delle risorse, supporto docker, supporto di tutti i linguaggi di pro­gram­ma­zio­ne co­no­sciu­ti, caching sicuro, analisi dei dati con sta­ti­sti­che e sicurezza. Nel 2017 CircleCI ha ricevuto il premio di “Leader in Con­ti­nuous In­te­gra­tion” da Forrester. Il primo container è gratuito, a partire dal secondo il costo è di circa 45 euro per ogni container al mese.

Team Foun­da­tion Server di Microsoft

Microsoft Team Foun­da­tion Server (TFS) è un tool di col­la­bo­ra­zio­ne per i progetti software che devono essere pia­ni­fi­ca­ti, creati e infine gestiti. Il TFS è il suc­ces­so­re non ufficiale di Microsoft Visual Sour­ce­Sa­fe. Per lavorare insieme a diversi progetti software TFS supporta diversi processi di sviluppo, tra cui CMMI, lo sviluppo agile di software e Scrum. In fase di lavoro vengono collegati e integrati programmi Office come Word ed Excel, di modo che TFS non debba passare a un altro programma.

Sono a di­spo­si­zio­ne diverse fun­zio­na­li­tà per Con­ti­nuous In­te­gra­tion, Delivery e De­ploy­ment con le quali si co­strui­sce una pipeline. TFS suddivide l’intero processo in fasi di controllo della versione, build, report e gestione utente.

I team composti da massimo 5 persone uti­liz­za­no la versione Express gratuita, i team più grandi la versione com­mer­cia­le che costa circa 6 dollari per utente al mese; inoltre bisogna ac­qui­sta­re anche una licenza di server. È possibile ac­qui­sta­re anche TSF senza l’ab­bo­na­men­to mensile: per farlo bisogna però con­tat­ta­re un ri­ven­di­to­re locale. Il prezzo varia da 500 a 700 euro.

Codeship

Codeship è una piat­ta­for­ma SaaS per la Con­ti­nuous In­te­gra­tion (e Delivery) che si adatta com­ple­ta­men­te alle esigenze dell’utente. Codeship supporta GitLab, GitHub e Bitbucket. Le fun­zio­na­li­tà di­spo­ni­bi­li si basano sul piano ta­rif­fa­rio: la versione gratuita offre Codeship in un ambiente CI pre­de­fi­ni­to e il workflow che risulta da CI/CD. Inoltre la variante gratuita ga­ran­ti­sce un caching ef­fi­cien­te e pa­ral­le­la­men­te dei test di build in container separati e pre­con­fi­gu­ra­ti. Il piano gratuito offre 100 build al mese con un build continuo e una pipeline di test. Degna di nota è la mancanza di un limite per progetti, utenti e team.

Per poter sfruttare al massimo Codeship, si può ac­qui­sta­re “Codeship Basic” al prezzo di 45 euro al mese, che diventa più caro a seconda della grandezza del team. La versione “Codeship Pro” aumenta le sue fun­zio­na­li­tà con un supporto per Docker, che offre il “controllo completo” sull’ambiente build, i build locali e un miglior controllo sul workflow. Inoltre sono ac­ces­si­bi­li diversi tool per rendere la Con­ti­nuous In­te­gra­tion/Delivery ancora più ef­fi­cien­te e tra­spa­ren­te. Codeship Pro ha un prezzo mensile di circa 70 euro che varia a seconda dei build paralleli.

Vai al menu prin­ci­pa­le