Vai al contenuto

Quali differenze tra metodologia Agile, CI/CD e DevOps

Per fare un analogia, non si può costruire una casa usando un singolo attrezzo. CI / CD, Agile e DevOps sono tre termini comunemente utilizzati negli ambienti di sviluppo e test del software. Tuttavia, per capire la differenza tra loro, è meglio iniziare con cosa significano effettivamente questi termini. Agile, DevOps e CI / CD sono tre strumenti importanti, indipendenti che tuttavia si supportano a vicenda. Agile si concentra sul processo di sviluppo, CI / CD sulle pratiche e DevOps sulla cultura.

Riuscire ad applicarli assieme nelle proprie pratiche di sviluppo, produce delle trasformazioni e dei miglioramenti non di poco conto.

Sviluppo Agile

Lo sviluppo Agile di software è un termine generico per indicare un insieme di framework, come Scrum, Kanban, Scaled Agile Framework (SAFe), Lean Development ed Extreme Programming (XP)), e pratiche basati sui valori e sui principi espressi nel Manifesto per lo sviluppo Agile basato su 12 principi. Quando si affronta lo sviluppo del software in team (ad esempio), sarebbe una cosa buona e giusta osservare questi valori e principi e usarli come strumento per capire le cose giuste da fare in base al contesto particolare.

Una cosa che separa Agile dagli altri approcci di sviluppo del software è l’attenzione per le persone che svolgono il lavoro e il modo in cui lavorano insieme. Infatti la metodologia Agile si basa sul processo decisionale collaborativo tra i team inter-funzionali e auto-organizzati e sulla progressione ciclica e iterativa di feedback . Il lavoro viene svolto in cicli regolarmente ripetuti, noti come sprint, che di solito durano da due a quattro settimane. Lo sviluppo agile si concentra soprattutto sulla collaborazione e sull’auto-organizzazione. I team creano soluzioni insieme e sono, per la maggior parte, interfunzionali. Ciò significa che non esiste una divisione stagna tra le squadre. Ad esempio, i tester sono coinvolti fin dall’inizio come gli sviluppatori. Inoltre, ogni sprint di sviluppo tiene conto del feedback degli utenti.
I test agili sono ideali per le situazioni in cui i requisiti aziendali e tecnici cambiano man mano che il progetto avanza. Poiché è così che la maggior parte dei progetti funziona nel regno degli utenti digitali dinamici. Tantè che Agile è uno degli approcci di sviluppo più comunemente seguiti esistenti.

Sebbene la metodologia Agile sia stata interpretata in maniera differente in questi ultimi 15 anni, i suoi fondamenti rimangono gli stessi:

  • rimuovere le barriere di processo che danno potere agli individui
  • produrre rapidamente software funzionante
  • collaborare strettamente con i clienti e rispondere (piuttosto che resistere) al cambiamento.

Integrazione Continua / Consegna Continua (CI / CD)

CI / CD fa riferimento alle pratiche di ingegneria e distribuzione del software.

CI o integrazione continua è una pratica di ingegneria in cui i membri di un team di sviluppo integrano il loro codice a una frequenza molto elevata. I team che implementano CI mirano a integrare il codice quotidianamente o, in alcuni casi, anche ogni ora. Poiché l’integrazione è di solito un’attività che richiede tempo e fatica, il CI enfatizza l’uso di strumenti di automazione che eseguono build e test. L’obiettivo di CI è stabilire un ciclo di vita definito da software che riduca lo sforzo richiesto per la creazione e l’integrazione. L’integrazione continua comporta anche il rilevamento di errori nel codice nelle prime fasi.

CD o consegna continua è la pratica per garantire che il codice sia sempre in uno stato distribuibile. Ciò significa che tutte le modifiche al codice – nuove funzionalità, correzioni di errori, esperimenti, modifiche alla configurazione – sono sempre pronte per la distribuzione in un ambiente di produzione. Il punto del CD è quello di effettuare distribuzioni, eventi di routine che possono verificarsi in qualsiasi momento su richiesta. Non importa se la distribuzione coinvolge un sistema distribuito su larga scala, un sistema incorporato o un ambiente di produzione complesso.

CD può anche significare distribuzione continua – una pratica in cui tutte le modifiche vengono automaticamente distribuite in produzione. A differenza della consegna continua, non vi è alcun passaggio di approvazione manuale finale prima del rilascio in produzione.

Per entrambe queste pratiche, è importante disporre degli strumenti CI / CD corretti. Nessuna pipeline CI / CD può funzionare senza gli strumenti ottimali. Pratiche CI / CD  facilitano lo sviluppo agile perché le modifiche del software raggiungono la produzione più frequentemente. Di conseguenza, i clienti hanno più opportunità di sperimentare e fornire feedback sui cambiamenti.

La cultura DevOps

DevOps si concentra sui limiti della cultura e dei ruoli mentre si sviluppa con metodi Agile. Quando gli sviluppatori Agili sono diventati più efficaci nello scrivere codice, avere una rigorosa distinzione tra i team, come ad esempio il tema del controllo qualità (QA) oppure gli sviluppatori (Dev) o il team operativo (Ops),  si è rivelato inefficiente. Per risolvere questo, è stato stabilito l’approccio DevOps.

DevOps si riferisce principalmente a una mentalità che si concentra sulla comunicazione e la collaborazione tra sviluppatori e tester. Ciò era necessario perché, nelle configurazioni non DevOps, gli sviluppatori spesso non sono consapevoli dei blocchi QA e Ops (“Funziona bene sulla mia macchina”). Inoltre, al personale addetto al controllo qualità e al controllo alle operazioni spesso manca il contesto dei requisiti aziendali poiché lavora su più progetti.

L’obiettivo di DevOps è fare in modo che gli sviluppatori e i QA siano allineati in tutte le fasi di un progetto. In una configurazione non DevOps, gli sviluppatori “lanciano oltre la barriera” il codice ai QA. I QA trovano bug e li segnalano agli sviluppatori per il debug. Gli sviluppatori danno la colpa ai QA e all’ambiente di test per i bug. Quando i bug vengono finalmente risolti, il team QA “lancia oltre la barriera” il codice agli Ops. Poiché i membri del team Ops devono limitare le modifiche al proprio sistema, esiste un’alta possibilità che il loro sistema si arresti in modo anomalo quando viene rilasciato il codice. Ops incolpa QA e sviluppatori e il ciclo continua…

La soluzione proposta dall’impostazione DevOps è che i team siano interfunzionali. Si collabora insieme e la collaborazione deve includere tutti coloro che sono coinvolti nella consegna del software, addestrando ciascun team sulle abilità dell’altro.

L’implementazione DevOps di successo si basa fortemente sull’automazione. È della massima importanza utilizzare i giusti framework di automazione dei test, stabiliti nelle giuste toolchain che automatizzeranno ampie sezioni della pipeline di sviluppo e distribuzione. DevOps non riguarda solo gli strumenti. Si inizia con un cambiamento nella mentalità tra tutte le parti coinvolte e utilizza strumenti per eseguire quella mentalità nella creazione e nel test del software. Questo approccio migliora la capacità di tutti di apprezzare e partecipare a vicenda e porta a una collaborazione di alta qualità e comunicazioni più frequenti.

Differenze tra CI / CD, Agile e DevOps

Non ci sono differenze reali tranne i livelli ai quali ciascun termine opera.

  • Agile è un ampio framework che comprende le altre due pratiche. Si concentra sui processi che evidenziano il cambiamento mentre accelera la consegna. È una filosofia di sviluppo software che viene implementata in varie metodologie: Scrum, Kanban, Scaled Agile Framework (SAFe), ecc.
  • DevOps è una pratica di sviluppo agile e una mentalità che utilizza principi agili (collaborazione, comunicazione, utilizzo degli strumenti giusti) per semplificare la costruzione, il test e il rilascio del software.
  • CI / CD è una tattica DevOps, che utilizza i giusti strumenti di test automatizzati per implementare lo sviluppo agile.

Tutte e tre le pratiche hanno lo stesso obiettivo: creare software migliore in minor tempo. Non c’è alcuna differenza stagna tra loro poiché queste pratiche si sovrappongono quasi sempre. Qualsiasi sviluppatore / QA / Ops che abbia familiarità con una pratica, quasi inevitabilmente, conoscerà le altre.