La diversificazione delle esigenze del mercato e una domanda crescente di soluzioni sempre più personalizzate in funzione delle abitudini e dei dispositivi utilizzati (smartphone e tablet in testa), procede di pari passo con un’ingegnerizzazione dei sistemi che sta abituando le persone alle filosofie più pratiche del software, As a service e on demand, con una sempre più forte propensione al mondo delle app.
Tutto questo ha avuto un forte impatto sullo sviluppo applicativo, perché ha portato a un’accelerazione quasi incrementale dei tempi di produzione e di rilascio, con un proliferare di nuove soluzioni, diversificate per target e funzionalità.
Nel frattempo gli sviluppatori software hanno abbracciato nuovi linguaggi e nuovi metodi di sviluppo, imparando ad avvalersi di strumenti ausiliari e automatici di vario tipo, capaci di intervenire a livello sintattico o a livello semantico su quella che è considerata a tutti gli effetti la grammatica della programmazione.
Grazie a questi tool, infatti, è possibile verificare a vario livello la qualità del software sviluppato e risolvere, dove possibile, gli errori intercorsi nella scrittura dei vari codici di programmazione, garantendo così la qualità del software rilasciato.
Controllare la qualità del software, tra necessità e virtù
Che si tratti di aziende operanti nel settore metalmeccanico, chimico, finanziario, edile, bancario, GDO e retail, logistica e trasporti, in Italia oltre il 60% delle aziende ha al suo interno una figura se non addirittura un team preposto al controllo qualità del software. I motivi sono diversi, anche se il driver principale per oltre la metà delle aziende sono senz’altro le certificazioni (ISO in primis), che contribuiscono non solo a introdurre adeguate metriche di controllo ma anche ad avvalorare il risultato della produzione agli occhi degli utilizzatori finali.
A rivelare questi e altri dati una recentissima survey, condotta da ICT4Executive in collaborazione con lo specialista dell’analisi statica del software Julia (spin off dell’Università di Verona), su un panel qualitativo di duecento aziende. 120 utenti finali e 80 aziende operanti nella consulenza ICT, tra cui system integrator e VAR con le loro risposte puntuali hanno aiutato gli analisti a fotografare lo stato dell’arte e l’approccio al software di qualità del nostro Paese.
Come si evince dal grafico, delle aziende end user è il 58% ad avere una figura o addirittura un’area preposta al controllo qualità del software mentre i partner del canale arrivano al 65%.
Quali le aree chiave del controllo di qualità
Per tutte le organizzazioni, indipendentemente dal settore in cui operano, i controlli sono ripartiti sulle tre aree chiave dello sviluppo: vulnerabilità, performance e attività di debugging, ovvero di tutta quella serie di attività legate all’intercettazione e alla risoluzione dei bug rilevati nella compilazione delle sequenze dei vari codici di comando.
Con un 23%, a pari merito tra end user e canale, il controllo di qualità risulta un asset importante dello sviluppo. Uno scarto sensibile, invece, risulta il controllo qualità sulle performance, dove le aziende end user dimostrano una sensibilità maggiore rispetto a quella dei partner di canale, come indicato nella tabella riassuntiva sottostante.
Il dato può essere interpretato come un segno di quanto il commitment possa incidere sul controllo qualità quando a utilizzare la soluzione sono gli utenti interni o i collaboratori diretti. Lo stesso discorso sembra valere per le attività di debugging dove l’attenzione al controllo qualità delle aziende end user si attesta al 27%, rispetto al 13% del canale.
Analizzando più in dettaglio le risposte, invece, si scopre che quel 16% versus 33% delle risposte incluse nella tabella sovraindicata come Altro, raccontano un percepito e dunque un approccio differente rispetto alle attività di controllo dei software rilasciati. Mentre gli end user effettuano le loro verifiche prevalentemente a supporto delle prove in area di test, il canale, al contrario, effettua ogni tipo di controllo, dal regression testing ai test sulle funzionalità e la prestazionalità. In questo senso le attività di controllo vengono interpretate non secondo le macrocategorie succitate (vulnerabilità, debugging e performance) ma come parte integrante di un processo progettuale che va controllato su più livelli e a diversi stadi dello sviluppo, in base ai progetti.
I vantaggi nell’uso di strumenti ausiliari e automatici all’analisi e alla verifica
Fino a qualche tempo fa i macrocapitoli della programmazione erano analisi, sviluppo, test, fine tuning e rilascio. Ritmo e modalità, soprattutto negli ultimi anni, hanno profondamente cambiato gli approcci e le strategie di programmazione. Da un lato l’evoluzione continua di sistemi operativi, protocolli di rete e dispositivi hardware e, dall’altro, la sofisticazione delle minacce di un cybercrime sempre più abile a insidiarsi tra le maglie più deboli del software, hanno introdotto come modalità standard un tipo di sviluppo a rilascio continuo, associati alla gestione delle patch e degli aggiornamenti.
In questa fluidità operativa l’uso di strumenti ausiliari e automatici a supporto dei team di sviluppo diventa ormai irrinunciabile. Tutte le aziende concordano nell’affermare che, grazie al controllo qualità e all’utilizzo di strumenti ausiliari a supporto delle analisi e delle verifiche del software, hanno ottenuto un elevato miglioramento della qualità del software sviluppato.
Tra gli strumenti per l’analisi statica più utilizzati gli end user Coverty, Sonrarqube, Findbugs, Klockwork, PDM, Checkstyle dagli end user mentre Fortify, Findbugs, Sonarqube, Cast e Julia sono quelli più usati dal canale.
In base alle risposte del panel, si evince come gli strumenti che vanno per la maggiore siano ancora quelli orientati a un pattern matching sintattico più che quelli di ultima generazione incentrati su un’analisi semantica, capaci di effettuare un debugging fattivo. Il livello evolutivo delle analisi a supporto della qualità del software, dunque, non arriva a sfruttare quell’intelligenza artificiale che, tramite una serie di algoritmi matematici e approcci scientifici assolutamente più solidi, oggi consente di ragionare sull’ordine di esecuzione delle istruzioni del codice compilato, concentrandosi più a livello di codice sorgente.
Java e Android i linguaggi di programmazione che vanno per la maggiore
A fronte di un utilizzo di linguaggi più antichi legati alle attività di supporto e manutenzione dei sistemi legacy come RPG o C++, a dominare lo sviluppo sono Java e Android, con una piccola parte legata alle varianti PHP, Abat, Sap, a .Net.
La scelta di Java si deve al fatto che si tratta di un linguaggio nativamente progettato per supportare lo sviluppo di applicazioni di qualsiasi tipo, sistemi portatili e mobile inclusi, garantendo così prestazioni elevate per la più ampia gamma di piattaforme di elaborazione possibile garantendo funzionalità e performance in ambienti eterogenei. Android oltre che un linguaggio è un fenomeno legato alle strategie di Google che ha creato un sistema operativo condiviso con una comunità di brand e con caratteristiche adatte ad equipaggiare la smartizzazione imperante associata allo sviluppo della Internet of Things. Non a caso oltre tre quarti delle aziende intervistate sviluppa in Java e Android.
Interessante notare anche come il 70% delle aziende end user abbia un team di sviluppatori interni. a conferma che le attività di programmazione sono diventate parte integrante delle attività ICT.
Investire nel software come abilitatore del business
Ritmo e modalità della programmazione, soprattutto negli ultimi anni, hanno profondamente cambiato gli approcci e le strategie degli sviluppatori. Da un lato l’evoluzione continua di sistemi operativi, protocolli di rete e dispositivi hardware e, dall’altro, la sofisticazione delle minacce di un cybercrime sempre più abile a insidiarsi tra le maglie più deboli del software, hanno introdotto come modalità standard un tipo di sviluppo a rilascio continuo.
Nello sviluppo di un software, utilizzare strumenti di analisi statica consente di velocizzare la diagnostica e intercettare a vario livello gli errori di programmazione a livello sintattico e, quando gli strumenti utilizzati sono di tipo avanzato, anche a livello semantico. L’uso di questo tipo di soluzioni in fase di codifica e di test così come nelle fasi successive legate alla gestione delle patch e degli aggiornamenti, garantisce la qualità e il valore dello sviluppo del SW ed aumenta l’efficienza del processo di sviluppo e la protezione della propria immagine.