Huawei HDG Italia organizza periodicamente interessanti meetup che affrontano temi legati alla tecnologia e allo sviluppo software.
Professionisti e sviluppatori possono approfittare dell’iniziativa e partecipare agli eventi organizzati dalla community HDG Italia. I meetup sono organizzati con cadenza regolare e vedono tra gli invitati i massimi esperti del settore.
Nel corso del meetup HDG Italia DevSecOps: il futuro del DevOps Serena Sensini ha spiegato quali sono le diverse domande che al giorno d’oggi ci poniamo all’interno di un’azienda che si occupa di sviluppo software.
Un tempo lo sviluppatore si concentrava essenzialmente sulle dipendenze presenti nel suo progetto, se i requisiti hardware fossero sufficienti per sostenere il corretto funzionamento dell’applicazione, della posizione in cui è fisicamente ospitato il database, come aggiornare l’applicazione.
Oggi invece ci chiediamo se siano disponibili dei log per tracciare il funzionamento delle applicazioni, quanti utenti sono collegati e quante connessioni concorrenti devono essere gestite (qual è l’entità dei carichi di lavoro anche in base ai momenti in cui l’applicazione è in esecuzione?), se esistono strumenti per effettuare attività di debugging, quali sono i requisiti minimi necessari perché la soluzione sviluppata possa stare in piedi, chi ha fatto modifiche al software e in quali parti.
Cos’è la cultura DevOps e quali sono i benefici nel ciclo di sviluppo del software
A tutte le domande poste al precedente paragrafo offre una risposta concreta la cultura DevOps che si occupa dell’intero processo di sviluppo del software.
DevOps non è una tecnologia vera e propria ma fa parte di una cultura d’impresa, di una “filosofia” che di norma viene adottata all’interno dei processi aziendali.
Seguendo la filosofia DevOps si cresce tanto in termini di approccio allo sviluppo software tanto che figure come quella del DevOps engineer sono ormai diventate cruciali per orchestrare l’intero processo di sviluppo ma anche il ciclo di vita di un progetto software nel suo complesso.
Attenersi ai principi del DevOps aiuta ad “aprire la mente” e cambiare punto di vista nell’attività di sviluppo del software come probabilmente non si era mai fatto in precedenza.
I vari passaggi della filosofia DevOps sono schematizzati in figura con il processo che inizia partendo dalla pianificazione (plan) del progetto: in questa fase si stabiliscono i momenti in cui saranno completate le varie porzioni di codice e rilasciata ogni funzionalità.
Si passa quindi allo sviluppo vero e proprio del codice (code) organizzandosi sempre per blocchi funzionali, per porzioni di codice che vanno ad offrire specifiche caratteristiche.
Strumenti che permettono di effettuare il versioning del codice quindi di creare una cronologia degli interventi effettuati sono essenziali in questa fase.
Nel caso di Java impossibile non citare ad esempio SVNKit che viene distribuito come libreria pura occupandosi di subversioning. Alternative sono Git e GitLab ma il loro utilizzo va valutato caso per caso.
Gli strumenti di build permettono invece di rendere eseguibile il codice precedentemente sviluppato.
Vanno poi previsti i cosiddetti “piani di test” per stabilire in che modo e con quali tempistiche provare le varie funzionalità del software. In questo passaggio ci si assicura che, in varie condizioni, il software funzioni in modo aderente a quanto pianificato all’inizio. In questa fase è importante verificare che il requisito sia stato correttamente e completamente soddisfatto.
L’integrazione con un tool open source come Jenkins che assiste il programmatore Java in varie fasi di sviluppo, compresa quella di deployment è essenziale in ottica DevOps.
Le fasi successive consistono nell’approntare un solido sistema di help desk che permetta di trattare tutte le richieste di supporto provenienti dagli utenti/clienti: si tratta di un aspetto chiave nel caso di applicazioni che affondano le radici nel cloud ma anche per i progetti che funzionano esclusivamente o prevalentemente on-premise.
Infine, una soluzione di monitoraggio del software è essenziale perché consente di scoprire “casi particolari” e condizioni specifiche in cui l’applicazione non funziona, ad esempio perché sfuggite nel corso della fase di testing.
Il simbolo dell’infinito nel caso di DevOps fa riferimento al fatto che le varie attività e ciascuno step illustrato in precedenza vanno a comporre una sorta di “ciclo continuo”; com’è ovvio nessuna fase è indipendente dalle altre ma può essere gestita e portata avanti a sé.
All’atto pratico fare DevOps è più complesso della semplice schematizzazione finora proposta perché sono molti di più i passaggi da svolgere: alcuni di essi prevedono una serie di “sotto-operazioni” aggiuntive da trattare.
Per rendersene conto basta vedere quest’immagine realizzata da Larry Maccherone (Comcast) qualche anno fa.
La parte di sinistra in entrambi gli schemi DevOps si riferisce essenzialmente allo sviluppo (“Dev”) mentre la sezione di destra agli aspetti di operations (“Ops”) quando cioè il software è nelle mani degli utenti: da qui il significato del termine DevOps.
I principali strumenti che chi si occupa di DevOps ha a disposizione sono riassunti in questa immagine. Si tratta ovviamente di una selezione perché in realtà sono disponibili molti altri tool ma l’immagine offre comunque un buon spaccato sullo “stato dell’arte”.
Ci sono gli strumenti di scripting, quelli di CI/CD ovvero continuous integration/deployment (modalità con cui il codice viene portato su altri ambienti conservando l’integrazione), di build, di gestione del codice, di deployment, quelli per la virtualizzazione e la containerizzazione, per la reportistica, le statistiche e i dati analytics, per l’effettuazione di test automatizzati e per l’analisi statica del codice.
La migrazione da DevOps a DevSecOps: l’aspetto della sicurezza diventa fondamentale
La parte relativa alla sicurezza del software è sempre più essenziale: da qui l’importanza di svolgere pen testing e verifiche in termini di compliance se l’obiettivo è quello di ottenere anche dei certificati riconosciuti.
È inoltre prevista un’attività di analisi statica del codice per verificare che quanto sviluppato non solo sia formalmente corretto ma sia pulito e leggibile.
La sicurezza è un elemento ricorrente anche in ambito operations: come fare per gestire i rischi, prevenire gli attacchi e reagire ad eventuali incidenti?
L’evoluzione della filosofia DevOps è quindi diventata DevSecOps: l’abbreviazione “Sec” (security) che è stata aggiunta mette ben in evidenza quanto il ruolo della sicurezza sia diventato sempre più centrale nello sviluppo del software.
Una volta gli aspetti legati alla sicurezza venivano tipicamente presi in esame soltanto alla fine dello sviluppo del software svolgendo una specifica fase di testing. Programmando invece con attenzione le verifiche di sicurezza nel corso della fase di sviluppo si hanno evidenti benefici in termini di costi perché si possono prevenire o comunque ridurre al minimo i rischi di incidenti a posteriori. Investire sulla sicurezza “prima” permette di ridurre i costi complessivi di un progetto software.
Con l’approccio DevSecOps sviluppatori, tester, architetti della sicurezza, architetti infrastrutturali, database analyst e molte altre figure collaborano al fine di progettare, costruire, validare, distribuire, rendere operativo e manutenere il software nell’ambito di un processo che offra risultati progressivi, affidabile, ripetibile e sicuro.
Lo sviluppo del software non è quindi “a compartimenti stagni” ma i vari team cooperano spalla a spalla nelle varie fasi. L’aspetto della sicurezza deve inoltre essere sempre tenuto in considerazione e strettamente integrato a livello di ciascun team. Chi si occupa di DevSecOps deve verificare che la sicurezza sia un tema fatto proprio da parte di chiunque intervenga sul software.
Come si vede nell’immagine (fonte: Dynatrace) che riassume la filosofia DevSecOps, la sicurezza avvolge tutte le fasi dello sviluppo e del ciclo di vita del software.
Preoccuparsi della sicurezza è importante fin dall’inizio dello sviluppo di qualunque soluzione software e comunque in ogni fase (Security-as-Code).
Come sintetizzato in questa immagina pubblicata su Slideshare il vecchio approccio vedeva un team di sviluppo software composto da project manager, leader developer, un insieme di sviluppatori e più esperti che si occupavano nello specifico della sicurezza. Separate rispetto a queste figure c’erano i security architect, la parte di testing, di operations e gli esperti in ambito sistemistico.
Nella cultura DevSecOps si ha la figura del DevSecOps engineer, persone che si occupano di seguire lo sviluppo del software in tutte le sue sfaccettature e che dispongono di una buona conoscenza relativamente alla sicurezza.
Non è semplice migrare da un’impostazione per lo sviluppo software “alla vecchia maniera” passando allo schema DevOps ma è complessa anche la transizione da DevOps a DevSecOps.
I vantaggi di DevSecOps sono però tangibili perché abbracciando tale filosofia i tempi di rilascio si abbreviano enormemente perché a fronte di una curva di apprendimento iniziale piuttosto marcata l’ottimizzazione del software in tutte le fasi renderà molto più semplice concludere il lavoro.
La qualità del codice migliora significativamente perché eventuali problematiche emergono nelle fasi antecedenti il rilascio e il time-to-market si abbrevia perché il cliente ha l’opportunità di valutare via via i vari rilasci (eventuali modifiche ed evoluzioni del software sono già previste nel flusso).
Il nostro invito è quello di vedere la registrazione su YouTube del meetup che ha visto protagonista Serena Sensini per approfondire l’argomento. Ampliando il proprio bagaglio di competenze è infatti possibile acquisire una visione d’insieme che permetta di ricoprire il ruolo di DevOps/DevSecOps engineer di per sé, come abbiamo visto, largamente multidisciplinare.
In questo senso i meetup organizzati da Huawei HDG Italia offrono spunti davvero interessanti, a costo zero per chi è un professionista nel settore, per già sviluppa ma anche per coloro che vogliono semplicemente approfondire.