A cura di Maria Loughlin, VP of Engineering di CA Veracode
Come molte aziende hanno già avuto modo di scoprire, per conquistare un vantaggio competitivo nella Digital Economy è necessario un approccio mirato e onnicomprensivo. In questo contesto, una delle ironie dell’approccio DevOps è che, mentre la metodologia supporta una produzione più rapida e automatica del software, non accresce la qualità del codice a meno che questa non sia già stata considerata una priorità dal team incaricato dello sviluppo software.
È risaputo che il codice pervade tutto il nostro mondo — lo si trova nei motori dei jet, nelle automobili, nella rete elettrica, nei sistemi sanitari, nel commercio, nei dispositivi, praticamente ovunque. Eppure, è sempre più difficile produrre software sicuro e affidabile. Le applicazioni, oltre a crescere nelle dimensioni, diventano sempre più complesse e articolate, e interconnesse con un numero sempre maggiore di piattaforme, sistemi e dispositivi. Le API e l’Internet of things (IoT) introducono codice — e rendono il processo distribuito — su milioni di applicazioni e dispositivi, oltre che sul cloud.
Questo ambiente così complicato costringe i responsabili delle aziende, dell’IT e gli sviluppatori del software a cambiare il proprio modo di pensare e lavorare. Ad esempio, un numero crescente di sistemi e dispositivi fa sempre più affidamento sull’intelligenza artificiale (AI) per guidare le attività e avviene sempre più spesso che siano i sistemi automatizzati a decidere la linea d’azione in base a input che continuano a cambiare. Ogni sistema — e il relativo software — deve sapersi quindi adattare in modo dinamico.
Il risultato è che la qualità del software non può più essere relegata a un ruolo secondario: deve essere parte integrante di un framework che abbracci l’intera organizzazione. A conti fatti, un’azienda deve rispondere del proprio codice — e promuovere atteggiamenti che contribuiscano a produrre software di qualità elevata — come una maggiore comprensione dei motivi per cui la qualità del codice è importante, non solo in termini di performance, ma anche ai fini della sicurezza e dei risultati di business. Un’iniziativa DevOps può andare a buon fine solo nel momento in cui l’impresa riconosce il ruolo svolto dagli odierni framework software.
Ridefinire la qualità del software
Il mondo digitale sta generando una serie di sfide particolari associate alla qualità del software — sfide che si spingono ben oltre al garantire la quantità del codice necessaria per gestire i sistemi. Ad esempio, la UI/UX (User Interface/User eXperience) si è ormai ritagliata un ruolo da protagonista assoluta nel mondo digitale, soprattutto con l’enorme diffusione delle app. Non è più ammissibile considerare il testing della UI/UX come una funzione tradizionale del testing di massa: è indispensabile un’esperienza di qualità.
Esistono poi numerose altre sfide. Infatti, con la maturazione e la proliferazione dell’IoT si avverte sempre più la necessità di innovare l’ambiente di testing. Stiamo assistendo a una vera e propria esplosione nella varietà e nella quantità di dispositivi periferici che crea un nuovo scenario dal punto di vista della QA ed è essenziale garantire una performance del software adeguata e commisurata ai bisogni degli utenti. In questo contesto, mai come oggi si avverte l’esigenza di accordi SLA (Service Level Agreement) tra i fornitori e i fruitori dei servizi.
Anche l’intelligenza artificiale (AI) sta rivoluzionando l’ambiente di testing, andando a occupare alcuni ruoli svolti finora da operatori umani. Eppure, persino chi sperava di sostituire i tradizionali software tester (umani) con l’AI non esita ad ammettere che anche le applicazioni considerate in gran parte autonome continueranno ad aver bisogno di training per raggiungere gli obiettivi tecnologici e commerciali. In parole povere, l’AI affiancherà (anziché rimpiazzare) gli operatori di QA (Quality Assurance), creando nuovi campi di specializzazione.
Migliorare la qualità del codice
Tutte queste variabili stanno cambiando la posta in gioco, cogliendo impreparate molte organizzazioni. Un esempio è il rollout del portale Healthcare.gov negli Stati Uniti, che ha subito diversi mesi di ritardo a causa di disfunzioni presenti nei processi. Alla fine, il costo di realizzazione di questo framework IT è stato tre volte superiore alle stime originarie per via dei continui problemi di performance, carico e gestione. Da parte sua, il settore privato si trova da diversi anni alle prese con continue violazioni.
A mio avviso vi sono quattro tipologie di iniziative che aiuteranno le aziende a trasformare lo sviluppo del software in un esempio di successo:
- Scegliere l’automazione – Per comprende ogni cosa: dai controlli di qualità alla scansione del codice, fino al rilevamento delle vulnerabilità. Le metriche e i test sulla qualità fanno parte di una pipeline di Continuous Delivery e i rispettivi benchmark devono essere chiaramente definiti in tutta l’organizzazione. Qualsiasi investimento finalizzato ad automatizzare la qualità — unit test, functional test, performance test, load test e system test — produce risparmi consistenti nel lungo periodo.
- Adottare un approccio modulare – Le organizzazioni che producono batch di codice più piccoli e specializzati semplificano la scansione e il testing aumentando la velocità di delivery complessiva. Tutto questo rende più facile identificare i problemi quando il software è costituito da moduli e sottomoduli. In definitiva, l’impiego di questi moduli facilita l’adozione di un approccio Agile, grazie al quale l’azienda può generare e riconfigurare il software senza scendere a compromessi sulla qualità.
- Definire in modo chiaro l’ambito di applicazione – È cambiato anche ciò che deve essere sottoposto a test e scansioni. In un mondo dove l’infrastruttura è costituita da codice, dobbiamo pianificare e testare anche la qualità degli script che servono a creare e a configurare l’infrastruttura — compito che richiede le scelte giuste a livello di processi e di framework di governance interna, oltre che in termini di strumenti tecnologie da adottare.
- Feedback continuo – Sbagliare è importante ed è essenziale rendersene conto subito per poi superare il fallimento. Un prodotto in rapida evoluzione può essere modellato in base ai feedback ricevuti dai clienti: un veloce scambio di informazioni consente di eliminare completamente eventuali difetti e ottimizzare il software per i propri utenti o clienti. Questo implica, ad esempio, riuscire a tenere traccia delle interazioni degli utenti con un sito per mezzo di test blue-green t o A-B che analizzino le funzionalità e il nuovo codice in base a un sottogruppo di utenti.
La sicurezza non può essere una considerazione secondaria
Infine, è necessario associare maggiore sicurezza alla qualità del codice. Pur adottando il modello DevOps, molte organizzazioni non si rendono conto della necessità di disporre di codice sicuro e di qualità elevata. Incredibile a dirsi, già alla prima scansione, ben il 69% delle app non supera la prova della OWASP Top 10. Un approccio DevSecOps a 360 gradi (che includa automazione, software modulare, ambito applicativo e feedback continuo) consentirà alle aziende che lo abbracciano di avere maggiore successo sul mercato – facendo leva sul codice per essere più competitive.
Le organizzazioni che adottano queste best practice sono consapevoli che eventuali ritardi, dovuti a difetti nel codice, al mancato lancio di un prodotto o a recensioni negative degli utenti, possono compromettere gli obiettivi aziendali, e che i malfunzionamenti delle app e le violazioni della sicurezza rischiano di incidere direttamente sui risultati finanziari.
In conclusione, ritengo che mai come oggi si avverta la necessità di predisporre una valutazione dei rischi strategici e, anziché adottare un atteggiamento orientato alla reazione e alla difesa, si debba scegliere di concentrarsi sulla qualità durante tutto il ciclo di vita del software. Il passaggio da DevOps a DevSecOps può rivelarsi la vera chiave per la trasformazione.