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.