AI e automazione del ciclo di sviluppo software

L’informatica, dalla sua introduzione nella società civile, ha sempre rappresentato forse il principale fattore per aumentare la produttività umana sostituendone operazioni ripetitive e soggette ad errore, soprattutto nell’ambito della gestione, manipolazione, pubblicazione, ricerca e archiviazione delle informazioni. Una accelerazione, quasi un cambio di paradigma, lo si deve sicuramente alla crescita globale di internet. La rete delle reti infatti ha via via permesso la reinvenzione e la completa automazione di interi processi che sono sempre stati tradizionalmente gestiti da personale umano. Basti citare la posta elettronica, l’e-commerce e l’home banking, tre tra le grandi tecnologie oramai consolidate, rese possibili da internet, che hanno ampiamente dimostrato di essere tecnologie completamente sostitutive dei rispettivi processi tradizionali, e non solo sostitutive ma anche migliorative per l’utilizzatore. Questo fenomeno non ha ancora rappresentato la completa scomparsa del processo tradizionale (non internet) corrispondente all’innovazione specifica, ma, in molti casi, la reinvenzione e la revisione. Si è sempre registrata invece una perdita di posti di lavoro nei settori colpiti da quelle che vengono, appunto, definite come “Killer application”. Ci sono evidenti segnali che l’IA sarà una rivoluzione, se non molto più potente, quantomeno della stessa portata di Internet, per quanto concerne la intrinseca potenzialità di trasformazione di processi non solo produttivi ma anche, o soprattutto, cognitivi.

Nella bibliografia sugli studi recenti ho trovato un paper1 che ritengo di rilevante interesse per inquadrare il dibattito sull’IA e gli impatti sull’occupazione futuri. L’autore ci introduce al tema illustrando come negli ultimi anni, ci sia stato un crescente dibattito pubblico sul potenziale impatto dell’intelligenza artificiale e dei robot sul lavoro. Tuttavia, nonostante l’attenzione dedicata al problema dai media mainstream, l’autore non rileva molti sostanziali passi avanti che permettano di comprendere lo specifico ruolo che avrà l’IA nella società del futuro. Quello che raramente appare è la questione di fondo, cioè lo sviluppo di un’analisi volta a chiarire se l’intelligenza artificiale e i robot siano proprio come le rivoluzioni tecnologiche del passato, che causarono cambiamenti profondi nel mondo del lavoro ma ne lasciarono invariata la struttura fondamentale, o rappresenti qualcosa di nuovo e non ancora sperimentato dall’umanità. Dal lato tecnologico, la discussione si concentra spesso su esempi sorprendenti di compiti che l’IA e robot possono ora svolgere, ma senza mettere questi esempi in prospettiva sviluppandone tutte le potenzialità. Come si confrontano queste prestazioni specifiche con l’intera gamma di compiti da svolgere sul lavoro? Sul versante degli studi economici, invece, la discussione si concentra spesso sull’analisi dei cambiamenti passati causati dalla tecnologia, ma senza dimostrare che vi siano analogie con l’IA. Come facciamo a sapere che l’intelligenza artificiale e i robot influenzeranno il lavoro nello stesso modo in cui le tecnologie hanno fatto in passato? Nessuno dei due approcci sposta l’argomento al di là della semplice ripetizione di conclusioni opposte secondo cui queste nuove tecnologie causeranno o meno grandi cambiamenti. Per fare qualche progresso nell’analisi del problema, è utile prestare molta attenzione al modo in cui finiscono queste discussioni, che spesso è con una descrizione entusiasta dei nuovi lavori che verranno dall’intelligenza artificiale e dai robot. Tali descrizioni tendono a coinvolgere lavori che richiedono pensiero critico, creatività, iniziativa imprenditoriale e interazione sociale. Infine, di solito c’è una dichiarazione sulla necessità di migliorare l’istruzione per preparare le persone a questi nuovi lavori. Sembra quindi molto improbabile farsi un’idea profonda leggendo i media, soprattutto quando questi ultimi partono con articoli enfatici che mettono in risalto questo e quel aspetto mirabolante dell’IA.

Un’altra interessante e divulgativa digressione sul lavoro e l’IA è stata trattata da Federico Pedrocchi e inserita in una serie di episodi audio da Audible nel 2018 (La serie parla di IA a tutto campo ed un episodio è dedicato agli impatti sul lavoro)2.

Si inizia introducendo il concetto di schiavitù, riferendosi al robot, come macchina più o meno simile all’essere umano che aiuti o sostituisca l’uomo in alcuni compiti. Interessante indagare sull’etimologia della parola robot scoprendo che deriva dal ceco Robot automa forzato…robòt (o ròbot) s. m. [nel sign. 1, der., attrav. il fr. robot, dal cèco Robot ‹ròbot›, nome proprio, der. a sua volta di robota «lavoro», con cui lo scrittore cèco Karel Čapek denominava gli automi che lavorano al posto degli operai nel suo dramma fantascientifico R.U.R. del 1920; nel sign. 2, der. direttamente dal cèco robota nel senso di «lavoro servile; servizio della gleba»]3. Quindi semplici macchine senza status, utilizzabili per sostituire i compiti degli aristoi, in modo che questi ultimi potessero concedersi a pensare. Già aristotele pensava a delle macchine che potessero sostituire l’uomo nel lavoro e la concezione di schiavitù del mondo greco sembra utilizzare degli uomini appunto come macchine da lavoro, gli schiavi. Ancora oggi, come allora, il discorso in cui si inseriscono i robòt è sicuramente la loro capacità produttiva confrontata con quella dell’essere umano.\ In un dossier del 2017 dell’Harward Business Review Italia, sulle nuove tecnologie, si traccia un parallelo tra l’introduzione di tecnologia e l’efficentamento dei processi produttivi, durante tutta la storia del lavoro umano, la rivoluzione digitale che porterà all’introduzione dell’IA è in continuità con questa continua ricerca del miglioramento produttivo. Essendo però una rivoluzione, non si prevede che quest’ultima sia ordinata e senza sussulti, ma che introduca discontinuità, cambiamenti di scenario, nuovi player che guadagnano importanti spazi di mercato, altri storici che vengono invece superati e inevitabilmente escono di scena.

In questo momento si da per scontato che uomo e macchine intelligenti lavoreranno assieme, con la seconda che assiste processi decisionali e aiuta l’umano a lavorare meglio. Ci sono voci critiche rispetto all’adozione pervasiva dell’IA, la principale delle quali vede nello scenario dei processi decisionali “data driven” guidati da IA, una omogeneità eccessiva delle aziende che arrivano sostanzialmente tutte alle stesse conclusioni perché interpretano i dati con gli stessi algoritmi. La creatività e la capacità associativa umana è ritenuta indispensabile per creare vantaggio competitivo. La straordinaria storia evolutiva delle specie ha portato, in tempi lunghissimi, all’evoluzione che vede l’umano così ricco di caratteristiche come oggi lo conosciamo, l’interrogativo che viene spontaneo è, questa ricchezza inesauribile è codificabile? Per molti studiosi non sembra esserlo, o quantomeno lo è solo parzialmente, cioè lo sono i comportamenti produttivi o i comportamenti acquisiti che, anche nell’umano, diventano automatismi (come per esempio la guida di un veicolo). Queste perplessità sull’effettiva capacità per l’IA di sostituire le abilità dell’umano lasciano però aperte molte preoccupazioni sul fronte occupazionale, soprattutto in un immediato futuro. Nel 2019 uno studio di Saverio Lovergine presentato all’Università Pontificia Salesiana e reperibile online, dal titolo “Questa volta è diverso?” presenta le principali teorie economiche e proiezioni in termini di occupazione dall’introduzione delle nuove tecnologie, il dato interessante è che lo spazio delle “macchine” viene visto via via crescere fino ad avere una sostanziale parità, nel mondo dell’occupazione, non molto lontano da oggi, cioè nel 2025.

Ci possiamo quindi aspettare che nel futuro prossimo molte attività che richiedono analisi dati di contesto e decisioni deterministiche basate sui dati vengano sostituite dall’IA. Si può pensare in questa direzione a tutte le consulenze semplici basate, appunto, sull’accuratezza dei dati raccolti, da check up di base dei valori biometrici a personalizzazione di terapie farmacologiche, a tutto quanto rappresenta la separazione di oggetti in base al riconoscimento delle immagini ed alla capacità del calcolatore di accumulare apprendimento a partire dalle operazioni eseguite: raccolta differenziata rifiuti sul campo (per esempio in mare), processi di produzione nel settore agroalimentare dove l’insieme delle condizioni ambientali, metereologici, predittivi e dello stato del terreno da trattare potranno portare ad una maggiore accuratezza nel dosaggio di acqua e additivi per la coltivazione o nel variare alcuni aspetti di ricette nella produzione alimentare. Ma ci si può anche spingere a pensare che alcune consulenze oggi umane possano un domani essere offerte da strumenti IA. Si veda in particolare la consulenza finanziaria sulla sostenibilità economica di un investimento, di una polizza o sull’opportunità di coprire un rischio con una polizza ed aspetti di questo tipo. Già il trading online sta ampiamente sperimentando le tecnologie di IA, si parla infatti di robotrading riferendosi a sistemi altamente automatizzati che hanno lo scopo di massimizzare la resa degli investimenti.

Non pretendendo di essere minimamente esaustivi vorrei provare, nello spazio di questa relazione, a riflettere se, all’interno del ciclo di sviluppo del software, quindi alla programmazione così come la conosciamo oggi, vi siano o vi saranno lavori o attività che verranno sostituite gradualmente da sistemi di IA.

Il ciclo di vita del software è materia indagata in genere dall’ingegneria del software, che disegna un flusso di attività principali del processo di sviluppo e spesso le divide in sottoattività, siamo infatti stati abituati, solo per citarne alcune, a sentir parlare di analisi, stesura dei requisiti, sviluppo del software, test, rilascio, etc…

L’approccio nello sviluppo del software è passato velocemente da quella che può essere definita come un’impostazione “artigianale” o, se vogliamo, individuale, ad una impostazione industriale, con il coinvolgimento di grandi team, numerosi in termini di personale specializzato, fasi, sottofasi, e processi molto raffinati. Il passaggio ha seguito via via l’aumentare progressivo della complessità dei sistemi software che venivano e vengono utilizzati, spesso, anche in ambienti ad altà criticità, come le infrastrutture critiche stesse (centrali elettriche, forniture di gas, aereospace, etc…).

Ci sono naturalmente filosofie di sviluppo del software diverse e a volte in contrasto, si pensi al dibattito tra lo sviluppo “a cascata” e tutte le forme contemporanee che prendono il via dall’Agile development, che tende a porre maggiore enfasi all’interazione tra l’owner dei requisiti (il cliente in senso largo) ed il team di sviluppo e non prevede necessariamente la stesura ed il “congelamento” dell’intero perimetro dei requisiti prima di dar inizio alla fase di sviluppo ma piuttosto varie metodologie di prototipazione rapida che consentono di arrivare velocemente a dei semilavorati che possono poi essere modificati ed integrati. In ogni caso, per semplificare il dibattito possiamo pensare a raggruppare le fasi dello sviluppo software in alcune macro-attività che sono irrinunciabili.

  • Analisi (sotto questa voce ci sono molte sottoattività che vanno dai requisiti al costo di progetto)
  • Progettazione (idem come sopra)
  • Sviluppo del codice
  • Sviluppo dei test e risoluzione degli errori
  • Collaudo
  • Messa in produzione o confezionamento prodotto finale
  • Manutenzione ed evoluzione\

Vediamo in seguito quali esperimenti attuali ci possono far pensare che un domani, non tanto lontano, alcune di queste attività saranno quantomeno assistite da sistemi di IA.

Esperimenti di IA in campo sviluppo software

Uno spazio rilevante andrebbe dedicato ai passi avanti fatti in ambito di produzione di strumenti a supporto della progettazione, collegata anche alla manutenzione ed evoluzione del software, che hanno già dimostrato in passato di poter generare automaticamente codice, ma lo ritengo troppo complesso da affrontare sia per le mie attuali competenze che in questo spazio.

Accenno solo ad un progetto molto noto che prende le mosse da ben prima dell’attuale enfasi sull’IA e che potrebbe sicuramente essere ripreso in un ottica assistita, mi riferisco al progetto Rational finito, successivamente ai suoi primi sviluppi ed al rilascio di punta “Rational Rose”, in casa IBM e fatto confluire come estensione della piattaforma open source Eclipse.

Partirei invece qui da due delle fasi che maggiormente sembrano attirare l’interesse, quantomeno dalla numerosità degli esperimenti in essere, in campo di applicazione dell’IA allo sviluppo del software. Mi riferisco alla fase di test e collaudo del software sviluppato.

Soprattutto nelle filosofie che adottano l’Agile/DevOps, gli strumenti per l’automazione dei test stanno crescendo continuamente di importanza e il loro livello di sviluppo diventa, in alcuni casi, anche il discriminante nella scelta di un framework rispetto ad un altro. Proprio per il continuo rilascio di piccoli moduli caratteristico di questa metodologia di sviluppo (per altro oramai dominante) il test continuo diventa una fase indispensabile e sostanzialmente impraticabile a livello manuale. Oggigiorno infatti i principali casi d’uso del software vengono scritti come test ed il calcolatore si occupa di rilanciarli ogni volta che viene fatto un nuovo rilascio, in modo da assicurarsi che il nuovo codice non abbia inficiato altre parti del software testate e correttamente funzionanti in precedenza, occorrenza tutt’altro che rara nella programmazione orientata agli oggetti.

Oltre che risultare, una volta scritti i test, di generale beneficio per i tempi complessivi di sviluppo (si aumenta la velocità di esecuzione dei test stessi e si riduce significativamente il tempo di analisi finalizzato al bug fixing), l’automazione significa soprattutto ripetibilità dei test, e quindi qualità del software.

Tutto quanto elencato nei paragrafi precedenti non vede ancora l’assistenza dell’IA, ci si aspetta infatti un cambio di paradigma da quest’ultima. All’introduzione dell’IA nella fase di testing del software si chiede oggi la capacità di simulare differenti profili di utente in base al contesto di utilizzo, in base all’età, all’alfabetizzazione informatica, al profilo etnico-demografico, etc…Questo spingerebbe il concetto di test molto oltre l’attuale perimetro che prevede la simulazione di un utilizzo standard a casi finiti (anche se spesso numerosissimi) sostanzialmente monoprofilo.

L’altro aspetto in cui si può ben sperare, vista l’ampia diffusione odierna di queste tecniche, è che l’applicazione del Machine Learning, cioè della progressiva accumulazione di “esperienza” diagnostica dell’IA, favorita o dalle segnalazioni umane o da strategie di “reinforcement” adeguatamente sviluppate, permetta un continuo miglioramento delle capacità di monitoraggio della qualità di sviluppo di un software.

All’interno del ciclo di vita di sviluppo di un software direi che è più semplice ed immediato vedere, se non una sostituzione che mi sembra lontana e non così vantaggiosa, un progressivo affiancamento dell’IA al lavoro del test manager, del test designer e del test developer.

Rimanendo in ambito di produzione digitale non si può che leggere con ottimismo questa potenziale evoluzione, il miglioramento dei test (sempre intesi con progettazione e supervisione umana), significa miglioramento della qualità del software prodotto e, come scritto nelle premesse, essendo quest’ultimo ormai il motore di molte infrastrutture critiche e di processi di grande riliveo sociale, il miglioramento generale sia della fruizione che delle situazioni di rischio.

Si stanno costruendo via via applicazioni software sempre più complesse, il time to market sta diventando un fattore critico per rilasciare applicazioni che devono essere completamente testate e conformi ai requisiti a scadenze precise. L’intelligenza artificiale può svolgere un ruolo chiave nei test del software e può ottenere risultati più accurati e far risparmiare tempo. Esistono già studi accademici che analizzano quali tecniche dell’intelligenza artificiale possono essere utilizzate con vantaggio nel test del software.4 Ci si interroga su possibili scenari futuri in termini di intelligenza artificiale e test del software. I risultati sembrano dimostrare che l’utilizzo dell’intelligenza artificiale guiderà la nuova era del lavoro di assicurazione della qualità del software (ma non solo, il tema del controllo qualità assistito da IA sta riguardando e riguarderà sempre più tutti i processi produttivi manufatturieri) nel prossimo futuro. Si da per certo che l’AI Software Testing ridurrà il time to market e aumenterà l’efficienza dell’organizzazione per produrre software più sofisticato e creerà test automatizzati più intelligenti.

Sempre nell’ambito del software testing un altro fattore d’interesse, più prospettico che attuale, è quello dell’automazione del test delle GUI (Graphical User Interface),5 lo studio illustra come l’interfaccia utente grafica (GUI) e i test del software basati su eventi possono trarre vantaggi dall’uso delle tecniche di intelligenza artificiale. Il test della GUI può essere considerato l’area più impegnativa del test del software. Sebbene i risultati siano abbastanza preliminari, l’applicazione di diverse tecniche di intelligenza artificiale per i test della GUI ha dimostrato di produrre risultati molto promettenti. Tuttavia, l’applicazione delle tecniche di intelligenza artificiale nei test della GUI, rispetto ai test del software, richiede ancora moltissima assistenza da parte dei progettisti per produrre risultati accettabili.

Conclusioni

Secondo il già citato Stuart W. Elliott (ricercatore nella US National Academy of Sciences) nei prossimi anni, dovremo avere una comprensione molto migliore di come si confrontano le capacità dei computer e degli esseri umani. Nel fare questo confronto sarà fondamentale considerare la distribuzione delle competenze tra la forza lavoro sulle differenti abilità richieste dal mercato, nonché il potenziale realistico di poter agire all’incremento di quelle competenze in cui i computer hanno già compiuto progressi sostanziali. Sempre secondo Elliott non basta dire che alcune persone hanno competenze migliori di quelle fornite dai computer. Se la tenuta sociale passa nella continuazione di un’economia basata sul lavoro, è obbligatorio sapere che la maggior parte delle persone può sviluppare competenze migliori di quelle fornite dai computer. Sappiamo dalla letteratura sulla diffusione della tecnologia che spesso l’industria impiega molto tempo per adottare e applicare nuove tecnologie: tempo per conoscere le tecnologie, perfezionarle per applicazioni particolari per poi poter investire nelle tecnologie su larga scala. In molti casi, la diffusione capillare può richiedere diversi decenni, si veda la recente storia di Internet come fenomeno globale, che vede l’ecommerce ancora lontano da molte categorie del commercio. Ciò significa che l’umanità dispone di tempo per capire quali capacità informatiche esistono attualmente e anticipare come potrebbero cambiare le competenze necessarie alla forza lavoro nel prossimo o nei prossimi due decenni. Tuttavia, è altrettanto noto che i cambiamenti ed i miglioramenti nel settore dell’istruzione sono spesso lenti e difficili. Quindi anche un decennio o due di preavviso potrebbero non essere sufficienti per sviluppare le competenze necessarie. Oltre ai tecnologi ed agli economisti che occupano in maniera prevalente la scena mediatica sull’IA, risulta essere di fondamentale importanza ascoltare altri tre tipi di esperti per capire se l’IA e i robot causeranno un cambiamento fondamentale nella natura del lavoro e nel suo ruolo nell’economia. Innanzitutto, sarebbe molto utile ascoltare gli psicologi per capire le capacità che le persone hanno realmente sia di apprendere che di adeguarsi. In secondo luogo, andrebbero intervistati i responsabili delle risorse umane di grandi corporations per comprendere la distribuzione delle competenze tra la forza lavoro per i diversi tipi di sfide poste dall’IA. Infine, andrebbe aperto un tavolo di confronto continuo con gli educatori sia per capire cosa sappiamo realmente sul miglioramento delle competenze umane sia per censire lo stato dell’arte.

Come abbiamo cercato di evidenziare nella breve trattazione di questo articolo c’è stato un recente aumento di interesse per l’applicazione delle tecniche di Intelligenza Artificiale ai problemi di Ingegneria del Software. Questo fenomeno è sia dovuto ai recenti progressi nell’ingegneria del software guidata da processi di ricerca continua, ma anche da un continuo approfondimento e sviluppo del ragionamento probabilistico e delle tecniche di apprendimento automatico per l’ingegneria del software.

Abbiamo scelto di parlare di IA nell’ingegneria del software un po’ come sfida, si partiva infatti con l’indicazione di trovare una professione che potrebbe essere, se non sostituita, profondamente modificata dall’introduzione dell’IA. Lo sviluppo del software ci sembra, da un certo punto di vista, la pietra angolare per vedere l’influenza futura dell’IA, perché da un lato è il processo umano che porta alla realizzazione dell’IA, dall’altro esso stesso potrebbe beneficiare delle tecniche che sviluppa per migliorare alcuni aspetti poco efficenti o lacunosi dell’agire umano in ambito sviluppo software, sempre che si sia in presenza, in questo caso, di un circolo virtuoso e non del suo contrario, che auspichiamo sia solo una prospettiva eccessivamente distopica.

Luca Bonadimani

[1] ELLIOTT, S. (2018). Artificial Intelligence, Robots, and Work: Is This Time Different? Issues in Science and Technology, 35(1), 40-44.

[2] Federico Pedrocchi. Intelligenza Artificiale. Triwù, Audiobook Audible, Edizione integrale 2018, Episodio 5 – Perdita di posti di lavoro, un problema da considerare con attenzione.

[3] Treccani, Vocabolario online, voce robòt.

[4] H. Hourani, A. Hammad and M. Lafi, “The Impact of Artificial Intelligence on Software Testing,” 2019 IEEE Jordan International Joint Conference on Electrical Engineering and Information Technology (JEEIT), 2019, pp. 565-570, doi: 10.1109/JEEIT.2019.8717439.

[5] A. Rauf and M. N. Alanazi, “Using artificial intelligence to automatically test GUI,” 2014 9th International Conference on Computer Science Education, 2014, pp. 3-5, doi: 10.1109/ICCSE.2014.6926420.