DevOps e il ciclo di vita dello sviluppo del software
Lo sviluppo del software è una disciplina in costante evoluzione che ha trasformato il modo in cui interagiamo con la tecnologia nella nostra vita quotidiana. Dalle applicazioni mobili ai complessi sistemi aziendali, il processo di sviluppo del software svolge un ruolo fondamentale nella creazione e nel miglioramento delle soluzioni tecnologiche che ci circondano.
In questo articolo ci immergeremo nel mondo del ciclo di vita dello sviluppo del software, un processo strutturato e accuratamente pianificato che va dal concepimento di un’idea alla consegna del prodotto finale e alla successiva sostituzione/cessione del sistema host. Scopriremo come si affronta ogni fase cruciale, dall’identificazione dei requisiti alla distribuzione e alla manutenzione, assicurando che i progetti siano sviluppati in modo efficiente e con la massima qualità.
Inoltre, illustreremo il ruolo chiave che la metodologia DevOps svolge nel processo, promuovendo una cultura di collaborazione e stretta comunicazione tra i team di sviluppo e operativi, automatizzando i processi e adottando una mentalità di miglioramento continuo.
Infine, un’attenzione particolare verrà dedicata alla possibilità di racchiudere in un’unica soluzione le diverse fasi del ciclo di vita del codice. Si tratta di un obiettivo ambizioso, ma molto vantaggioso, che sta crescendo tra le aziende del settore, grazie alla capacità di raggiungere una nicchia di mercato più ampia e di fornire una centralizzazione che porta numerosi vantaggi all’utente finale.
Che cos’è il ciclo di vita e perché è importante?
Conosciuto anche come SDLC, acronimo di Software Development Life Cycle. Il ciclo di vita dello sviluppo del software è una rappresentazione del processo completo che un progetto software segue dalla sua concezione al suo completamento e alla successiva manutenzione.
Sebbene esistano diversi cicli di sviluppo del software, lo standard ISO/IEC/IEEE 12207:2017 afferma:
“un quadro comune per i processi del ciclo di vita del software, con una terminologia ben definita, a cui l’industria del software può fare riferimento. La norma contiene processi, attività e compiti applicabili durante l’acquisizione, la fornitura, lo sviluppo, il funzionamento, la manutenzione o la dismissione di sistemi software, prodotti e servizi. Questi processi del ciclo di vita sono realizzati attraverso il coinvolgimento delle parti interessate, con l’obiettivo finale di raggiungere la soddisfazione del cliente“.
La sua importanza è motivata dal boom che il settore sta vivendo, spinto dalla digitalizzazione del mondo in cui viviamo, che fa crescere la domanda di professionisti e la necessità di definire processi ottimali e standardizzati.
Quali sono le fasi?
Una volta stabilito che cos’è il ciclo di vita e perché è importante quando si tratta di sviluppo di un software, vedremo nel dettaglio in quali fasi è suddiviso e qual è l’obiettivo di ciascuna di esse.
Pianificazione
Questa fase iniziale si concentra sull’identificazione dell’ambito del progetto e dei suoi requisiti per un’ulteriore analisi. L’obiettivo di questa fase è comprendere lo scopo del progetto, le esigenze del cliente e i risultati desiderati. Verranno determinati gli obiettivi SMART: Specifici, Misurabili, Realizzabili, Realistici e Tempestivi.
Design
Una volta analizzate le informazioni descritte nella fase precedente, si determinano i passi da compiere per raggiungere l’obiettivo – il “come” completare un progetto. Sulla base dei requisiti stabiliti nella fase precedente, verrà elaborato un modello astratto del sistema da costruire. Questo modello fornisce i dettagli del software da sviluppare, comprese le architetture del sistema, le strutture dei dati, la progettazione dell’interfaccia utente e altri aspetti tecnici necessari per implementare il sistema. Verrà stabilita una ripartizione dei costi, delle tempistiche e delle tappe fondamentali, nonché dei materiali e della documentazione necessari. Questa fase prevede anche il calcolo e la previsione dei rischi, l’implementazione dei processi di modifica e la definizione dei protocolli.
Implementazione
In questa fase del ciclo di vita si implementa il prodotto software, cioè viene generato il codice sorgente nel linguaggio di programmazione scelto per il nostro progetto.
Test
Una volta terminato il processo di sviluppo e implementazione, inizia la fase di test, che consiste nel verificare il progetto realizzato. In questa fase si verificano gli errori che possono essere comparsi nelle fasi precedenti. È una fase di correzione ed eliminazione degli errori, ma anche di miglioramento delle possibili anomalie non previste nelle fasi precedenti. A questo scopo, sono comuni i seguenti processi: test unitari, test di integrazione, test di sistema e test di accettazione.
Distribuzione
Una volta che il software ha superato i test in modo soddisfacente, procediamo alla sua implementazione nell’ambiente desiderato, sia esso di preproduzione o di produzione. Ciò dipenderà dalla casistica del cliente e sarà associato a un flusso di lavoro.
Manutenzione
In questo periodo il software è già in funzione. Nel corso del tempo, alcune funzioni possono diventare obsolete, possono essere individuate alcune limitazioni o possono apparire proposte che migliorano la stabilità del progetto, per cui è necessaria una fase di manutenzione. Questa fase prevede la correzione di bug, aggiornamenti periodici del software o l’implementazione e la distribuzione di miglioramenti.
Dove sta l’importanza della metodologia DevOps?
La metodologia DevOps è un approccio allo sviluppo del software che cerca di integrare la collaborazione e la comunicazione tra i team di sviluppo (Dev) e operativi (Ops) per ottenere una consegna del software più rapida, efficiente e affidabile.
Osservando le fasi del ciclo DevOps nell’immagine precedente, esse sono molto simili alle fasi che compongono il ciclo di vita del software. In
altre parole, la metodologia DevOps abbraccia il ciclo di vita del software aggiungendo un cambiamento di mentalità che migliora notevolmente l’efficienza e la comunicazione tra il team di sviluppo e le operazioni. Secondo la definizione colloquiale, DevOps è l’olio che fa girare gli ingranaggi in modo ottimale.
Di seguito riportiamo i miglioramenti e come possiamo ottenerli:
- Collaborazione: la cooperazione tra le diverse aree dell’organizzazione è promossa in ogni momento, l’intero team è coinvolto in ciascuna delle fasi.
- Automazione: l’obiettivo è eliminare l’azione umana da tutti i processi ripetitivi, ottenendo così un aumento esponenziale dell’affidabilità nei processi critici, come l’implementazione del software in un ambiente produttivo, e riducendo i momenti di tensione tra le diverse aree. Questo punto è fondamentale per il miglioramento delle relazioni interpersonali.
- Integrazione continua (CI): ha l’obiettivo di automatizzare e facilitare l’integrazione frequente delle modifiche al codice sorgente di un progetto in un repository condiviso. In sostanza, cerca di garantire che il codice nuovo o modificato venga incorporato regolarmente in quello esistente, in modo che gli errori, sia nella qualità del codice che nella sicurezza, e i potenziali conflitti possano essere rapidamente individuati e risolti.
- Continuous Delivery (CD): estende il concetto di integrazione continua automatizzando il deployment delle applicazioni nell’ambiente desiderato dopo l’esito positivo dei test. Nel caso in cui questi test non siano stati positivi, il processo di continuous delivery viene bloccato finché i risultati non soddisfano i requisiti stabiliti. Questo aspetto è fondamentale per ottenere un controllo esaustivo sul codice sorgente che viene distribuito negli ambienti produttivi, dato che questo compito diventa più complicato man mano che ci si evolve verso apparecchiature/infrastrutture più complesse.
- Scalabilità e flessibilità: la metodologia DevOps si adatta bene agli ambienti di sviluppo agili e ai sistemi distribuiti, consentendo l’adattabilità in base alle necessità e la distribuzione automatizzata delle applicazioni in ambienti complessi.
- Monitoraggio: DevOps promuove l’osservabilità e la revisione costante delle prestazioni delle applicazioni e dei server in cui sono ospitate. L’obiettivo di questo processo è raccogliere il maggior numero possibile di informazioni sul sistema per poter anticipare la comparsa di futuri problemi reali. Se non è possibile anticipare l’errore, l’obiettivo è risolverlo nel più breve tempo possibile attraverso processi automatizzati che riducono notevolmente i tempi di implementazione della soluzione.
Una nuova sfida all’orizzonte
Il ciclo di vita dello sviluppo del software è una “grande torta”, che era chiaramente divisa per fasi e in ognuna di esse c’era un gruppo di aziende incaricate di risolvere i problemi esistenti.
Come si è visto, ogni fase è interrelata, ma sufficientemente diversa dalle altre da rendere impossibile che una di queste grandi aziende ne comprenda più di una, a causa della sua complessità.
Tuttavia, al giorno d’oggi sono apparse aziende che cercano di raggiungere questo obiettivo. Due chiari esempi sono GitHub e GitLab, oltre ad altre soluzioni, che sono nati come strumenti di controllo di versione basati su git. In base a quanto detto sopra, questi esempi apparterrebbero inizialmente alla fase di implementazione, ma, lungi dall’essere etichettati, hanno scelto di aprire il mercato e di coprire le fasi successive. Nel caso di GitLab, hanno scelto di fare un ulteriore passo avanti e di includere anche la fase di pianificazione, una fase che è piuttosto dominata da strumenti di ticketing come Jira o Confluence per la documentazione.
Con questo cambiamento di mentalità, oltre all’aumento dei ricavi grazie alla possibilità di raggiungere un pubblico più ampio, ci sono una serie di vantaggi da considerare:
- Omogeneizzazione: la diversità delle applicazioni all’interno dell’architettura viene eliminata, offrendo all’utente finale un’esperienza migliore e rendendo la sua vita quotidiana molto più confortevole grazie a un’unica soluzione con un unico dominio. Questo elimina la necessità di cercare soluzioni basate su un protocollo LDAP, consentendo la gestione degli utenti di diverse applicazioni in modo centralizzato.
- Eliminazione dei processi di integrazione: racchiudendo un gran numero di processi in un’unica applicazione, si elimina lo sforzo associato alla configurazione e alla successiva manutenzione delle integrazioni tra applicazioni diverse.
- Riduzione dei costi associati alla manutenzione delle diverse applicazioni: disponendo di un’unica soluzione, non è più necessario mantenere un insieme di applicazioni, ciascuna con le proprie peculiarità e la relativa manutenzione.
- Riduzione dei punti di errore e miglioramento delle prestazioni: essendo racchiusi nella stessa soluzione, si riducono i punti deboli in cui possono comparire gli errori, oltre a eliminare i ritardi generati dalla comunicazione tra le applicazioni, migliorando così le prestazioni del processo.
- Miglioramento esponenziale della tracciabilità: centralizzando diversi processi in un’unica soluzione, è possibile tracciare l’intero processo in modo più intuitivo e semplice. È possibile tracciare una linea completamente chiara tra la generazione di ticket durante una sessione Scrum e l’implementazione del codice nell’ambiente di produzione.
- Big data: aumenta la capacità di estrarre informazioni relative ai processi, questo permetterà la creazione di grafici del flusso del valore e di metriche DORA, da cui gli utenti potranno trovare punti di miglioramento e ottenere un processo molto più efficiente.
- Riduzione del debito tecnico: il debito tecnico è stato comunemente associato all’area dello sviluppo del codice, ma è molto importante metterlo in relazione con l’architettura utilizzata e i suoi possibili errori. Tenendo conto di quanto sopra, un’unica soluzione evita funzioni ridondanti, costi duplicati e sovraccarico operativo. Inoltre, facilita la governance dell’applicazione, con un impatto positivo sull’esperienza degli sviluppatori.
Come risultato di questa evoluzione, emerge il concetto di piattaforma DevOps, definita come un insieme di strumenti, pratiche e servizi che consentono ai team di sviluppo e operativi di collaborare in modo efficace e automatizzare il ciclo di vita dello sviluppo, fornendo un ambiente unificato in cui i team possono collaborare in modo più efficace, automatizzare i processi chiave e migliorare l’efficienza nello sviluppo e nell’operatività del software.
In alternativa, una catena di strumenti DevOps frammentata richiede l’integrazione tra i diversi strumenti per lavorare in modo orchestrato, la manutenzione (compresi il patching e l’aggiornamento all’ultima versione) e costanti aggiustamenti a livello di configurazione.
Queste attività dispendiose sottraggono tempo all’effettivo lavoro quotidiano, riducendo al minimo il valore fornito al cliente finale. I fornitori di piattaforme DevOps mirano ad accelerare la fornitura di valore al cliente offrendo un insieme di funzionalità completamente integrate e gestite con supporto nativo per l’orchestrazione.
Il vero costo di DevOps
Facciamo ora un esercizio di stima che ci permetterà di confrontare il costo di una toolchain DevOps con il costo di una piattaforma DevOps.
Questo caso ipotetico prevede un’azienda con 100 sviluppatori e un budget di sviluppo annuale di 140.000 dollari. L’azienda dispone di un modello DevOps efficiente, che le consente di effettuare tra le 5 e le 15 consegne giornaliere. Questo modello DevOps supporta diverse tecnologie e linguaggi di programmazione.
Costo approssimativo di una piattaforma DevOps
Un calcolo generico delle diverse opzioni di piattaforma DevOps presenti oggi sul mercato mostra che il valore medio di un abbonamento è di 25 dollari/utente/mese, che per un team di 100 persone significa un costo annuale di 30.000 dollari.
La manutenzione di una piattaforma DevOps in modalità SaaS è a carico del produttore, quindi l’utente non deve sostenere questo costo. Dobbiamo tenere in considerazione che la situazione cambia se l’azienda che consuma il prodotto sceglie una soluzione autogestita, in tal caso l’azienda sarà responsabile della manutenzione e i costi aumenteranno.
Il costo approssimativo di una catena di utensili
Poiché ogni azienda può utilizzare una diversa combinazione di strumenti opensource/enterprise per coprire l’intero ciclo di vita dello sviluppo del codice, abbiamo scelto tra le possibili opzioni quella più comunemente usata, che consiste in:
- Strumento di ticketing, in cui abbiamo un inventario di attività, che descrive chiaramente le diverse azioni da svolgere e il loro stato.
- Il controllo della versione del codice è uno strumento essenziale nello sviluppo del software e nella gestione collaborativa dei progetti. La sua funzione principale è quella di tracciare e gestire le diverse versioni dei file e del codice sorgente nel tempo.
- Il controllo della qualità del codice, progettata per analizzare e valutare il codice sorgente di un programma software al fine di identificare i problemi, applicare buone pratiche di programmazione e migliorare la qualità complessiva del codice.
- Monitoraggio della sicurezza, soluzioni progettate per proteggere sistemi informatici, reti, applicazioni e dati dalle minacce e dalle vulnerabilità. Questi strumenti affrontano un’ampia gamma di rischi informatici, dagli attacchi di malware e hacker ai problemi di conformità normativa.
- Motore CI/CD, strumento o piattaforma che automatizza e facilita il processo di integrazione, test e consegna del codice nello sviluppo del software.
- Archiviazione di artefatti, repository centralizzato in cui vengono conservati e gestiti i componenti software generati durante il processo di sviluppo, compilazione e costruzione di un progetto.
Esiste un costo associato alla manutenzione di ciascuno dei componenti della catena che non è sempre contemplato (opensource, o enterprise per cui il costo della licenza non è incluso), in quanto solitamente diluito in altre attività, e che risulta in un valore approssimativo di 37.000 dollari.
Se lo si confronta con il valore ottenuto da una piattaforma DevOps, non è così distante come si potrebbe pensare, e potrebbe addirittura essere inferiore. Ma il costo c’è ed è quindi consigliabile fare dei calcoli che permettano di prendere la decisione giusta su cosa sia più vantaggioso.
Dove si dirige il mercato?
A questo punto si profilano all’orizzonte diverse domande: quale sarà la scelta preferita dai consumatori e ci sarà un cambiamento di mentalità verso l’utilizzo delle piattaforme DevOps?
Si prevede che l’uso delle piattaforme DevOps aumenterà in modo esponenziale nei prossimi anni. Stimolate dalla crescita del settore, le organizzazioni hanno bisogno di modernizzare le loro applicazioni, il che richiede un cambiamento fondamentale negli strumenti sottostanti. Le piattaforme DevOps saranno sempre più richieste man mano che le organizzazioni adotteranno pratiche agili e DevOps per fornire applicazioni diverse, tra cui applicazioni cloud-native, applicazioni mobili, web Edge e IoT.
Secondo una stima di Gartner, entro il 2027 il 75% delle organizzazioni passerà dall’utilizzo di più soluzioni a delle piattaforme DevOps per semplificare la distribuzione delle applicazioni, rispetto al 25% di oggi (2023).
Gartner utilizza anche il suo quadrante magico per identificare i principali attori e valutarli sulla base dei loro punti di forza e di debolezza, definendo quali soluzioni sono i punti di riferimento del settore e quali potrebbero diventarlo in futuro.