Continuous integration e continuous delivery

Scritto da: Susanna Barilli


None

Quando sviluppiamo un software lo facciamo in team: siamo cioè un gruppo di persone, tra ingegneri e sviluppatori, che vanno a contribuire allo sviluppo delle diverse parti del software. Isole in sé autonome che devono essere in grado di dialogare tra loro per funzionare al meglio.

Continuous integration e continuous delivery: cosa sono

Innanzitutto definiamo il concetto di continuous integration o integrazione continua.
Un esempio pratico?
Quando sviluppiamo un software lo facciamo in team: siamo cioè un gruppo di persone, tra ingegneri e sviluppatori, che vanno a contribuire allo sviluppo delle diverse parti del software.
Ad un certo punto però le diverse parti vanno assemblate, ovvero integrate tra loro affinché lavorino efficacemente insieme: vanno cioè allineate.

Ecco: la continuous integration esprime proprio quest’allineamento. Esso avviene di frequente - spesso "più volte al giorno"- e consiste nell’integrazione dagli ambienti di lavoro dei singoli sviluppatori verso un ambiente condiviso in cui risiede il software nel suo complesso.


Il concetto nacque originariamente nel contesto dell’Extreme Programming, come contromisura preventiva al problema dell'integration hell, (l’”inferno” dell'integrazione di porzioni di software sviluppati in modo indipendente su lunghi periodi di tempo e potenzialmente significativamente divergenti).
Nello sviluppo non continuous gli sviluppi delle diverse parti del software procedono indipendentemente per lungo tempo, ed è solo al momento dell’integrazione che gli eventuali (inevitabili) problemi emergono: il momento dell’integrazione diventava quindi la cartina tornasole degli errori di progettazione e/o sviluppo, cui era spesso macchinoso rimediare vista la distanza temporale trascorsa dall’inizio dello sviluppo.

Il controllo di versione: ovvero la conoscenza è potere (e responsabilità)

Con la continuous integration si apre un nuovo scenario di sviluppo: ogni fase della produzione, dal piccolo commit di codice al test sino al rilascio di funzionalità cardine viene tracciata e corrisponde ad una certa “versione” del software.
Ogni modifica o integrazione ha cioè un numero identificativo ed è tracciata ogni informazione ad essa correlata: quando, come e da chi è stata lanciata.
Cosa ne deriva?
Tantissimi vantaggi per un codice di qualità:

  • Se c’è un errore è più facile capire da dove è partito e perché
  • Gli eventuali difetti e bug vengono intercettati subito e si gioca d’anticipo nel correggerli
  • Ogni nuova versione del codice rappresenta una versione migliorata, ottimizzata di sé stessa
  • Ogni sviluppatore è palesemente reso responsabile della parte di codice rilasciata: è una esplicita chiamata alla responsabilità e allo sviluppo qualitativo cui ogni sviluppatore non può sottrarsi

Continuous delivery: quando il Giorno del Giudizio non è più il Giorno del Giudizio

La continuous delivery è la conseguenza intrinseca della continuous integration: se il software è continuamente e frequentemente integrato, allora è anche continuamente e frequentemente rilasciabile in produzione, ovvero pubblicabile online e visibile al cliente.
E’ questo un punto cardine della tecnologia agile, che anche noi in SAEP applichiamo con le dovute personalizzazioni: il software come abbiamo detto è diviso in parti e lavorazioni, ciascuna delle quali va frequentemente integrata con le altre e rilasciata in produzione.

Ogni modifica introdotta nel codice è potenzialmente rilasciabile a giro breve, senza più lunghi tempi di attesa tra sviluppo e messa in produzione delle modifiche.
In che termini lo sviluppo con continuous integration porta qualità nello sviluppo del software e in ultima istanza agli occhi del cliente finale anche non tecnico?

1. Il D-day è rimandato (alle calendae greche)

Nello sviluppo non agile e senza continuous delivery il giorno del rilascio corrispondeva al Giorno del Giudizio Universale.
Provate a pensarci: 3 mesi di sviluppo e 1 solo giorno in cui tutti i nodi possono potenzialmente venire al pettine.

Spaventerebbe chiunque, giusto?
Con la continuous delivery invece gli sviluppatori sono fisiologicamente vaccinati al rilascio: la release non è più il D-Day tanto temuto, ma solo una delle tante fasi del processo di sviluppo e continuo miglioramento del software.

2. Un miglioramento continuo

Il software stesso non è più un monolite statico e difficilmente penetrabile, ma un complesso di parti di codice in sé autonome e tra loro cooperanti che vengono testate e fatte dialogare tra loro di continuo, permettendone un’ottimizzazione progressiva senza soluzione di continuità.

3. Pianificazione trasparente di tempi e obiettivi

Con lo sviluppo software sotto capillare controllo, è molto più semplice pianificare obiettivi realistici e progressivi su un periodo di tempo concordato tra team di sviluppo e team cliente.
Gli obiettivi possono essere presidiati, le richieste integrative o i cambiamenti in corsa sono capillarmente tracciati, così come i loro impatti sull’integrazione con le altre funzionalità previste.

Questo consente di avere controllo anche su eventuali ritardi – non più subiti come conseguenze di meccanismi imprevedibili, ma come scelte consapevoli di eventuali cambi di direzione - sui tempi complessivi di sviluppo ed i relativi costi.

La combo continuous integration + continuous delivery sconfigge la paura del rilascio e apre la strada ad un’evoluzione del software in sostanza più rapida, controllata e di qualità rispetto al passato.

Articoli correlati

sviluppo-single-page-application-milano.jpg
Le SPA o Single Page Application sono applicazioni web fruibili come singola pagina senza necessità di caricamento per pagine: scopriamone …
Progressive Web App cosa sono SAEP ICT
Le PWA sono un’ottima alternativa alle app e ai siti tradizionali, con diversi vantaggi anche per gli sviluppatori. Scopriamo in …
consulenza-informatica-milano.jpg
Cosa si intende per consulenza informatica?La consulenza informatica consiste nell'offerta di servizi professionali da parte di esperti IT per aiutare …
Che Cos'è l'ICT: Definizione, Applicazioni e Sviluppo
Ti sarà capitato di chiederti cosa significhi ICT - Information and Communication Technologies - acronimo oggi molto diffuso, talvolta abusato, …
sviluppo-software-personalizzato.jpg
Lo sviluppo di software personalizzato é un approccio molto utilizzato tra le aziende che vogliono ottimizzare i propri processi. A …
Sviluppo in Python - intervista
Ciao Matteo, innanzitutto raccontaci almeno un po’ di te: come sei arrivato in SAEP ICT e che tipo di percorso …
app-per-offerte-commerciali.jpg
Offerte e preventivi: i parametri utili per snellire i processiCome ogni commerciale o agente di commercio sa, la creazione dell’offerta …
sviluppo-applicazioni-angular-milano.jpg
Caratteristiche principali di AngularAngular è un framework opensource dedicato allo sviluppo di applicazioni WEB e sviluppato principalmente da Google. Dire …
catalogo digitale.jpeg
Scegliere di sviluppare un catalogo digitale significa in prima battuta rinunciare.A cosa?Ai costi del cartaceo, innanzitutto: costi di stampa, costi …
sviluppo-software-linguaggio-python.jpg
Il linguaggio di programmazione Python è confermato da O'Reilly come uno degli argomenti più cercati ed utilizzati sulla propria piattaforma.Ricordiamo …
agile_1.jpg
Ogni progetto è caratterizzato in maniera univoca dai suoi vincoli. Secondo il concetto di triple constraint la natura sistemica dei …
ecommerce con tecnologia headless
Nell’ultimo biennio ed in particolare nell’ultima importante fase di emergenza sanitaria, le esigenze dei clienti B2B hanno virato verso una …
GDPR
Il Regolamento Europeo 2016/679, meglio conosciuto come GDPR è un insieme di norme in materia di trattamento dei dati personali …
Portal
Con l’avvento dei nuovi canali di comunicazione nati grazie al Web, le imprese moderne dispongono di diversi strumenti per instaurare …
software-house
Nel corso degli anni, le Software House hanno giocato un ruolo cruciale nell'evoluzione del settore IT. La loro storia si …
Interfaccia Utente
Cos'è l'interfaccia utente nel mondo digitale?L'interfaccia utente (o UI - User interface) nel mondo digitale rappresenta il punto di contatto …
web app
Cosa si intende per web app?Una web app è un software applicativo che utilizza tecnologie web e a cui è …
User Experience cos'è e perché è importante
Cos'è la User Experience (UX) e perché è così importante?La User Experience, spesso abbreviata in UX (esperienza Utente), si riferisce …
Software gestionale
Quali caratteristiche deve avere un gestionale per adattarsi perfettamente alle esigenze specifiche di un eCommerce? E soprattutto, quali sono i …
API-gateway-cos-e-saep-ict
Cos'è un API Gateway?Il termine API, acronimo di Application Programming Interface, si riferisce a un insieme di definizioni, protocolli e …
Progettazione software
Cosa si intende per progettazione di un software?La progettazione software è il processo di definizione dell'architettura, dei componenti, delle interfacce …
cosa si intende per cybersecurity
Ma cosa si intende esattamente per cybersecurity, e perché è così cruciale proteggersi dalle minacce online? In questo articolo approfondiremo …
Linguaggi di programmazione
Nel mondo della tecnologia e dello sviluppo software, i linguaggi di programmazione giocano un ruolo fondamentale. Sono gli strumenti con …
Che cos'è il software applicativo e come funziona
Che cos’è un software applicativo?Un software applicativo è un tipo di software progettato per consentire agli utenti di svolgere compiti …