AIDD: come cambia il modo in cui sviluppiamo il mondo
Cos’è cambiato, e cosa cambierà nello sviluppo software grazie all’avvento di sistemi intelligenti come ChatGPT e simili? Esploriamo come cambia il ciclo di vita e di rilascio del software dando qualche previsione sul futuro dello sviluppo.
Cosa vedrai
- AIDD: AI-Driven Development
- AIDD: come funziona
- Il valore delle competenze umane
- Gli 8 step
- Cosa cambia rispetto a TDD
AIDD: AI-Driven Development
Si può tradurre letteralmente come “sviluppo guidato dall’IA” ed è un nuovo paradigma che ultimamente sta prendendo piede con cui le competenze dei vari sistemi di intelligenza artificiali, in particolare gli LLM, si uniscono allo sviluppo software e alle competenze di chi ci lavora porta benefici nell’ecosistema del software.
So cosa stai pensando… L’IA non ci ruberà il lavoro, né tanto meno andrà a sostituire (non del tutto) lo sviluppo e chi programma.
Piuttosto, questo approccio è un’estensione naturale risultato di anni di metodologie già consolidate e ampiamente diffuse nel mercato da cui si sono estratti alcuni principi fondamentali da sfruttare nell’ambito di questi nuovi agenti “intelligenti”.
Per dirne una, AIDD segue il famoso ciclo “red, green, refactor”, raccontato e definito nel Test-Driven Design (abbreviato in TDD), ma con un focus sulla profonda collaborazione tra chi sviluppa e l’assistente IA.
AIDD: come funziona
Chi segue l’AIDD, chi sviluppa definisce l’obiettivo di alto livello, descrive magari un’API o un metodo da realizzare e riporta il tipo di dato che vuole rappresentare. L’IA genera quindi delle funzioni fittizie, scrive i test e crea l’implementazione concreta.
A questo punto, il demiurgo (o chi sviluppa) esamina i test, li esegue e collabora con l’IA per perfezionare l’implementazione finché i test non vengono superati e rispettano nel concreto tutti i requisiti descritti.
Potrà sembrare un approccio banale, ma il testing, così come l’iterazione, il feedback continuo e la verifica di un occhio esterno fa sì che questo approccio consenta a chi sviluppa di sfruttare l’intelligenza dell’IA pur garantendo che il codice risultante sia manutenibile, scalabile e conforme ai principi dell’ingegneria del software.
Il valore delle competenze umane
Detto ciò, mentre l’IA può generare codice, chi sviluppa svolge ancora un ruolo cruciale per attività come:
- Comprendere i requisiti (a volte “vaghi)” dei clienti
- Guidare l’IA attraverso il processo descritto in precedenza
- Creare e mantenere una suite di test completa
- Manutenere e modificare quanto costruito utilizzando l’AIDD
- Garantire che il codice sia allineato alle best practice dell’ingegneria del software
Non c’è da stupirsi quindi che affermazioni che riportano alla scomparsa di chi sviluppa sono da prendere e cestinare… Ci saranno dei cambiamenti, come è nella naturale evoluzione delle cose, e dovremo imparare ad adattarci al cambiamento, e crescere con gli strumenti a disposizione.
Gli 8 step
Se volessimo suddividere in passaggi l’adozione di questo approccio, si potrebbe riassumere in questo modo:
- Impostare l’obiettivo: definire l’input e l’output della funzione (ragioniamo a micro-attività) a un livello elevato.
- Formulare il tipo “astratto”, o il modello dei dati: scrivere manualmente il tipo o l’interfaccia per la funzione.
- Costruire una funzionalità fittizia: chiedere all’IA di creare una funzione fittizia in base al tipo.
- Scrivere i test: chiedere all’IA di generare test unitari per la funzione.
- Eseguire i test e aspettarsi un fallimento: non tutto andrà liscio e ci sarà del lavoro da raffinare la funzione fittizia.
- Creare un’implementazione concreta: istruire l’IA a implementare la funzione.
- Eseguire i test e aspettarsi il successo: verificare che i test vengano superati con l’implementazione generata dall’IA.
- Refactoring: rivedere la funzione e ristrutturarla se necessario per allinearla ai principi dell’ingegneria del software.
Non dimentichiamoci anche di un altro aspetto molto interessante: la possibilità di generare della documentazione a partire da quanto prodotto, seguendo l’approccio D(oc)DD.
Cosa cambia rispetto a TDD
Sembrano due modi di lavorare molto simili: tuttavia, ci sono delle differenze sostanziali.
Per cominciare, usando l’approccio AIDD, chi sviluppa lavora a stretto contatto con un assistente “intelligente” per generare codice, scrivere test e perfezionare l’implementazione.
Nel TDD tradizionale, il team di sviluppo (se non la persona che sviluppa) è l’unico responsabile della scrittura sia dei test che del codice di implementazione.
Oltre a questo, in AIDD l’IA genera dei test iniziali in base ai requisiti di alto livello forniti in input e alla definizione di tipo astratto.
In TDD, lo sviluppo avviene manualmente per tutti i test unitari prima di implementare il codice.
L’altro aspetto da evidenziare è dato dalla collaborazione: in AIDD, chi sviluppa e l’IA collaborano per perfezionare l’implementazione, eseguendo test e apportando modifiche fino a quando il codice non è soddisfacente, anche sotto il punto di vista della qualità del codice.
In altri contesti, non sempre è facile stare dietro a tutte le best practices necessarie, oltre al fatto che è possibile (e importante) sfruttare questi strumenti per approfondire aspetti dello sviluppo che non conosciamo e quindi approfondire anche pattern che altrimenti non avremmo mai utilizzato.
Se ti interessa l’argomento, dovresti leggere anche questo episodio della newsletter di Raffaele Colace dal titolo “Guidare o essere guidati dall’AI?”.