Implementare l’IA nell’ingegneria del software? Ecco tutto ciò che devi sapere

Integrare l'Intelligenza Artificiale nell'Ingegneria del Software? Ecco una guida completa

occhiali-codicegettyimages-1442975239

I programmatori di software hanno bisogno di certezze. Se fornisci a un programma un insieme di input, otterrai sempre gli stessi output. Per la maggior parte della storia del software, questo veniva costruito interamente su logica deterministica. Quello che si inserisce determina quello che viene generato come output.

Abbiamo persino un termine per questo: programmazione top-down. Tutti gli algoritmi seguono un percorso, con ramificazioni basate sulla logica prevista. Quando debugghiamo il codice, seguiamo lo stesso percorso più e più volte, cercando dove il comportamento devia dalle aspettative e cercando di riallinearlo.

Feature Speciale

zd-del2

La Convergenza di IA Generativa ed Ingegneria

L’ascesa dell’IA generativa ha un enorme potenziale per il campo dell’ingegneria. Ma può anche presentare delle sfide, poiché le aziende e gli ingegneri devono capire l’impatto dell’IA sui loro ruoli, le strategie aziendali, i dati, le soluzioni e lo sviluppo dei prodotti. Qual è il futuro della convergenza dell’IA generativa nel campo del software? ENBLE lo spiega da tutte le angolazioni.

Leggi ora

La certezza e la logica deterministica funzionano per gran parte del software. Ma il mondo reale non funziona così. Al contrario, l’IA è probabilistica. Le risposte non sono mai esatte. L’IA utilizza modelli per prevedere il comportamento e poi genera questo comportamento.

La migliore forma di descrivere questo è forse come il software tradizionale viene aggiornato rispetto all’IA. Il software tradizionale viene aggiornato e corretto. L’IA impara, evolve da sola, comprendendo e assimilando il feedback degli utenti senza intervento manuale. Ciò rende il software tradizionale più preciso, ma l’IA più flessibile.

Implementando l’IA nell’ingegneria del software, otteniamo il meglio di entrambi i mondi: un software preciso e flessibile. Questo articolo esplorerà questa convergenza e cosa significa per sviluppatori e ingegneri, così come per gli utenti delle loro creazioni.

La convergenza tra IA e ingegneria del software

Gli sviluppatori di oggi hanno l’opportunità di utilizzare l’IA come parte del processo di codifica. Nuovi strumenti basati su intelligenza artificiale aiutano nella creazione del codice, nella ricerca di bug, nella configurazione di suite di test e nella generazione di dati di test e campioni. In certi casi, l’IA può aiutare a migliorare la produttività di uno sviluppatore, riducendo il tempo trascorso su attività ripetitive, individuando difetti e aiutando sviluppatori meno esperti a produrre codice come se avessero più esperienza.

Ma c’è un aspetto negativo: l’IA è notoriamente poco affidabile. È necessario essere in grado di controllare il suo lavoro. L’IA presenta il suo lavoro con un livello di sicurezza apparente che fa sembrare corretti anche i risultati sbagliati. Quindi, se non hai le competenze, la conoscenza e l’esperienza sull’argomento su cui chiedi alla IA di lavorare, non sarai in grado di capire quando c’è un errore.

Detto questo, l’IA può aiutare enormemente nel processo di sviluppo, manutenzione e test del codice. Anche se non tutto trarrà vantaggio, ci sono punti nel processo in cui l’IA può entrare in gioco e ridurre ore o addirittura giorni di lavoro richiesti.

Ma non si tratta solo di produrre codice. Si tratta anche del codice prodotto. La convergenza tra IA e ingegneria del software consentirà agli sviluppatori di creare applicazioni più intelligenti e orientate all’utente, garantendo un’esperienza software più flessibile e dinamica rispetto alle tradizionali applicazioni codificate manualmente.

Nel tempo, vedremo alcune applicazioni evolversi in tempo reale basandosi sul feedback degli utenti, e del software che affronta preventivamente bug e incompatibilità prima ancora che l’utente li incontri. Non sarà mai perfetto, ma sicuramente aiuterà a migliorare il software.

L’IA nelle attività quotidiane del software: Qual è il vero vantaggio?

Tutto suona bene, vero? Ma concentriamoci sul risultato finale: in cosa l’IA nell’ingegneria del software può dare agli sviluppatori qualche ora in più per guardare Doctor Who, giocare con il cane, o — so che sembra irragionevole — dormire? Esaminiamo cinque ambiti che ci vengono in mente.

Automazione dei compiti ripetitivi

Ci sono moltissimi compiti noiosi e banali che richiedono le competenze di uno sviluppatore, ma che non sono affatto divertenti. Un esempio è aiutare a scrivere blocchi di codice ripetitivi.

I programmatori da tempo sono in grado di configurare i propri IDE per riempire i blocchi di codice come se fossero macro, ma l’IA può imparare il modello e l’intento dei blocchi di codice e aiutare a generarli utilizzando lo stile del programmatore o dell’organizzazione, senza necessariamente pre-programmarli. Potrebbe suggerire: “Ti ho visto scrivere codice del genere in passato. Vuoi che lo costruisca per te?”

Ciò può aiutare gli sviluppatori a concentrarsi sul lavoro più creativo, ma può anche introdurre coerenza nel codice senza richiedere allo sviluppatore di adattare il codice a uno schema restrittivo.

Analisi predittiva e migliore affidabilità del software

È qui che l’IA può anticipare il comportamento del codice basandosi sui modelli e le tendenze. Gli strumenti di intelligenza artificiale possono essere utilizzati per prevedere sovraccarichi di sistema, anticipare il comportamento degli utenti, ottimizzare eventualmente l’esperienza dell’utente e fare manutenzione preventiva nelle aree che necessitano di miglioramento. Un altro grande beneficio sarebbe l’aggiornamento del codice per soddisfare i requisiti minimi man mano che le piattaforme su cui viene eseguito cambiano e si aggiornano.

Oltre a risparmiare tempo di programmazione, il software può diventare più affidabile e resiliente quasi completamente da solo.

Accelerare il ciclo di sviluppo/test

Il codice deve sempre essere testato. Il ciclo tipico prevede un po’ di programmazione, un po’ di test, un po’ di correzione… ripeti, lava, risciacqua. Tuttavia, poiché le IA potrebbero essere in grado di prevedere il comportamento del software, potrebbero segnalare errori prima che sia necessario iniziare il test.

Gli ambienti di sviluppo sono da tempo in grado di segnalare errori di sintassi e di conversione dei tipi, che richiedono una conoscenza della struttura del linguaggio. Ma se gli ambienti di sviluppo iniziano a segnalare errori logici, questo potrebbe fare molto per velocizzare la consegna del codice e ridurre il numero di fasi di correzione necessarie per un determinato progetto.

Riduzione dei costi di manutenzione software

La maggior parte dei progetti software, una volta completati, richiede un livello di manutenzione quasi costante per far fronte a bug scoperti, ai cambiamenti nella piattaforma e ai problemi di prestazioni. Ho sviluppato un software che facilita le donazioni per organizzazioni non profit e trascorro almeno l’80% del mio tempo non rispondendo alle richieste degli utenti o aggiungendo nuove funzionalità, ma semplicemente riscrivendo il codice per adattarlo ai requisiti in continua evoluzione dei gateway di pagamento. Se riuscissi a ridurre parte di quella manutenzione ingrata e noiosa, potrei offrire un valore maggiore agli utenti.

Mantenere l’elemento umano

Nonostante l’aggiunta di IA nell’ambiente di sviluppo, tutto indica che i programmatori reali, umani, continueranno a creare la maggior parte del software nel futuro prevedibile.

Ridurre il tempo e la noia può sicuramente aiutare gli sviluppatori a rimanere al massimo delle loro capacità, ma le IA possono anche monitorare le prestazioni complessive del team, fornendo ai responsabili notifiche se un membro del team viene sovrasfruttato, sovraccaricato o sta per bruciarsi. Inoltre, possono aiutare a ridistribuire gli incarichi del team in modo che ciascun membro lavori sulle proprie competenze e aiutare nella pianificazione e nell’allocazione delle risorse.

Sfide e limitazioni dell’IA nell’ingegneria del software

Come con qualsiasi aumento della complessità tecnologica, ci sono delle problematiche. In questa sezione, parlerò di tre aree di preoccupazione.

Aumento della complessità e sfida della manutenzione

Ecco la mia preoccupazione principale sull’IA nell’ingegneria del software: Man mano che utilizziamo l’IA per sempre più codice, avremo sempre meno comprensione di come funziona tutto. Se hai mai ereditato un progetto da qualcun altro, soprattutto se quell’organizzazione o sviluppatore non è disponibile per una consulenza, sai cosa intendo.

Ciò che viene generato dall’IA sarà molto più una scatola nera rispetto a ciò che tu e il tuo team di sviluppo codificate e il rischio è che, una volta generato, sarà molto più difficile da mantenere per gli esseri umani. Non cadere nella trappola di aspettarti che l’IA mantenga autonomamente il proprio software. Quando il codice dell’IA si rompe, spetterà tutto a te e al tuo team capire cosa è andato storto e correggerlo.

Dipendenza dai dati

L’IA si basa su immense quantità di dati per creare i suoi modelli. Se non stai utilizzando un modello pubblico – ad esempio, se stai lavorando su qualcosa che richiede competenze di dominio uniche della tua azienda – l’insieme totale di dati disponibili per addestrare un’IA potrebbe non essere sufficiente.

Inoltre, i sistemi di intelligenza artificiale si addestrano su vasti insiemi di dati, non tutti di qualità sufficiente per il lavoro che stai cercando di svolgere.

Continuo a ricordare alle persone che introdurre un’IA in un progetto di ingegneria del software è come assumere un gruppo di talentuosi studenti estivi. Possono essere brillanti e rapidi, ma ogni tanto perderanno la palla e avrai dei pasticci da risolvere dopo che se ne saranno andati. Mentre la tua IA non se ne andrà, ti lascerà con problemi che non è in grado di risolvere.

Preoccupazioni etiche

In L’IA nell’ingegneria del software sta raggiungendo un momento ‘Oppenheimer’?, ho discusso delle questioni etiche che l’IA porta agli sviluppatori di software. Tenete presente che i coder non sono formati per affrontare le preoccupazioni etiche. In effetti, ho fatto una specializzazione in etica e filosofia politica accanto alla mia laurea in informatica, ma all’epoca ero l’unico studente di informatica a fare quella specializzazione. (Divulgazione completa: ho scelto quella specializzazione perché una ragazza che mi piaceva stava frequentando corsi di filosofia. Quindi anche la mia specializzazione in etica non era del tutto etica.)

I coder sono formati per essere solidi tecnologi, ma l’impatto sulla società non fa parte della maggior parte dei curricula di informatica. I programmatori e gli sviluppatori autodidatti potrebbero essere ancor più distanti dalla formazione in etica. Quindi, è irrealistico aspettarsi che un esercito di tecnici talentuosi riesca a vedere – e a stare in prima linea – considerazioni etiche storiche.

Le aziende che utilizzano l’IA dovrebbero aspettarsi o di ampliare la formazione dei loro team tecnici sugli impatti sulla società o di coinvolgere consulenti esperti per aiutare a consigliare e guidare gli sviluppatori mentre si affacciano su questo territorio molto inesplorato dei fattori umani.

Strumenti e piattaforme per l’ingegneria del software basata sull’IA

Fortunatamente, gli sviluppatori e le organizzazioni non devono intraprendere il loro viaggio nell’IA costruendo tutti i propri strumenti. Sono stati fatti molti investimenti nella ricerca fondamentale e nella produzione di strumenti pratici e librerie che possono essere concesse in licenza e incluse nei progetti.

In questa sezione della guida alle risorse, presento una panoramica rapida di cinque categorie di strumenti che probabilmente vorrai utilizzare e indico alcuni dei principali leader in ciascun settore. Questo ti darà un punto di partenza tangibile e pratico per il tuo prossimo progetto.

Framework di machine learning generici

Gli strumenti in questa categoria forniscono strutture e funzionalità di base per progettare, addestrare e distribuire modelli di machine learning.

  • Google TensorFlow: Una piattaforma open-source end-to-end progettata per il machine learning che facilita la costruzione e la distribuzione di modelli di ML.
  • Facebook PyTorch: Una piattaforma dinamica basata su un grafo computazionale che offre flessibilità nella costruzione di modelli di deep learning.
  • Keras: Un’API di reti neurali ad alto livello, scritta in Python e in grado di essere eseguita su TensorFlow, PyTorch e altri.

Piattaforme di sviluppo AI basate su cloud

Queste piattaforme offrono infrastrutture cloud per sviluppare, addestrare e distribuire modelli di machine learning su larga scala, spesso integrate con altri servizi cloud.

  • Google Vertex AI: Una piattaforma unificata su Google Cloud che offre strumenti e servizi completi per la costruzione, la distribuzione e l’escalation di modelli di IA e machine learning su diversi dataset.
  • Amazon AWS SageMaker: Un servizio completamente gestito che aiuta gli sviluppatori a costruire, addestrare e distribuire modelli di machine learning.
  • Microsoft Azure Machine Learning: Un insieme di servizi cloud che utilizzano strumenti di machine learning per addestrare e distribuire modelli in modo più rapido. Pensaci come a Machine Learning come servizio.

IA per il codice e lo sviluppo del software

Gli strumenti in questa sezione aiutano gli sviluppatori nel processo di codifica, offrendo suggerimenti, autocompletamento e analisi automatiche del codice basate sull’IA.

  • OpenAI Codex: Questo strumento alimenta applicazioni come GitHub Copilot, aiutando gli sviluppatori a scrivere codice più velocemente con suggerimenti basati sull’IA.
  • GitHub Copilot: Un assistente di codice basato sull’IA che suggerisce intere righe o blocchi di codice mentre gli sviluppatori digitano, aiutando a velocizzare il processo di codifica e ad assicurare le migliori pratiche.
  • Snyk Code: Offre agli sviluppatori l’analisi automatica del codice, la rilevazione delle vulnerabilità di sicurezza e raccomandazioni per le correzioni attraverso l’analisi di vasti progetti open-source.

Non lasciarti confondere da queste offerte. GitHub Copilot è alimentato da OpenAI Codex. Mentre OpenAI Codex funge da strumento di intelligenza artificiale generale per molte diverse attività di programmazione e può essere integrato in diverse piattaforme, GitHub Copilot è uno strumento specializzato per il completamento e l’assistenza del codice in tempo reale all’interno dell’ambiente di Visual Studio Code.

Snyk Code si concentra sull’analisi automatica del codice e sulla rilevazione delle vulnerabilità di sicurezza attraverso l’analisi di vasti progetti open-source.

Modelli pre-allenati e piattaforme

Questi strumenti offrono modelli pre-allenati su enormi quantità di dati, permettendo agli sviluppatori di ottimizzarli per compiti specifici senza partire da zero.

  • Hugging Face’s Transformers: Una libreria che offre modelli pre-allenati principalmente per compiti di elaborazione del linguaggio naturale, con un focus sulle architetture di trasformazione.
  • spaCy: Una libreria di software open-source per l’elaborazione avanzata del linguaggio naturale in Python, nota per la sua velocità ed efficienza.

Inoltre: Vuoi creare il tuo chatbot AI? Saluta HuggingChat open-source

Strumenti di ricerca dell’architettura neurale

Infine, gli strumenti in questa categoria automatizzano il processo di ricerca dell’architettura di rete neurale più ottimale per un determinato dataset o compito. (Nota: questa categoria di strumenti è spesso abbreviata come NAS. Questo NAS è molto diverso dal NAS che si riferisce alla memorizzazione a doppio scopo.)

  • AutoKeras: Una libreria di software open-source per l’automazione del machine learning e per aiutarti a trovare il modello giusto per il tuo dataset.
  • Google’s AutoML: Fornisce soluzioni cloud che automatizzano la progettazione e l’ottimizzazione di modelli di machine learning basati su dati forniti.

Definire “vasto” il panorama degli strumenti e delle piattaforme basate sull’intelligenza artificiale nell’ingegneria del software sarebbe un grave sottovalutazione. L’intelligenza artificiale generativa, e l’IA in generale, è diventata la tendenza più calda nel campo delle tecnologie e non mostra segni di rallentamento. Con l’aumento delle esigenze di sviluppo, gli sviluppatori cercano gli strumenti più adeguati per completare i loro progetti. Ti abbiamo mostrato solo una piccola parte delle risorse disponibili.

Tieni presente che si tratta di un ambiente molto fluido. Nel compilare questa lista, abbiamo trovato diversi strumenti che erano una volta (lo scorso anno) risorse abbastanza popolari ma che sono state acquistate, fuse in altri progetti o semplicemente chiuse poiché i loro sviluppatori open-source hanno trovato nuove opportunità con incarichi retribuiti che offrivano maggiori prospettive a lungo termine.

Non è importante solo sviluppare competenze con gli strumenti che si utilizzano: le aziende e i programmatori devono anche integrare la comprensione del cambiamento costante nelle loro competenze, per potersi adattare a un mercato e a un insieme di tecnologie che si innovano ad una velocità vertiginosa.

Guardando avanti: Il futuro dell’IA nell’ingegneria del software

La conENBLEnza dell’intelligenza artificiale con l’ingegneria del software tradizionale non è una tendenza passeggera. Fornisce troppo “valore facile” per essere ignorata, ma proprio perché offre nuove efficienze, apre anche alle molte sfide di cui abbiamo parlato in questo articolo e nella Caratteristica speciale.

Mentre guardiamo al futuro, emergono diversi trend e previsioni chiave:

  • Sviluppo incentrato sull’IA, con l’apprendimento automatico al centro dei progetti
  • Software auto-adattativo che si evolve in tempo reale in base alle esigenze degli utenti
  • IA collaborativa che si allea con gli sviluppatori, comprendendo il contesto e le dinamiche di squadra
  • Un’attenzione all’IA etica e responsabile che enfatizza trasparenza e equità
  • Cybersecurity basata sull’IA che rileva e affronta proattivamente le minacce
  • Modelli di IA personalizzati che si adattano alle esigenze specifiche, democratizzando i benefici dell’IA
  • Un’enfasi sull’apprendimento continuo per gli sviluppatori, data la natura in evoluzione dell’IA
  • Il codice e le soluzioni scritte principalmente da IA che sono opache per gli sviluppatori umani

È sia eccitante che un po’ preoccupante pensare all’impatto che l’IA promette per l’ingegneria del software. Come con ogni avanzamento tecnologico, si presenteranno sfide. Tuttavia, se l’ultimo anno è stato un indicatore, l’integrazione dell’IA nell’ingegneria del software è un percorso ricco di opportunità, destinato a ridefinire i confini di ciò che il software può raggiungere.


Puoi seguire gli aggiornamenti quotidiani sul mio progetto sui social media. Assicurati di iscriverti alla mia newsletter settimanale di aggiornamento su Substack e seguimi su Twitter a @DavidGewirtz, su Facebook a Facebook.com/DavidGewirtz, su Instagram a Instagram.com/DavidGewirtz e su YouTube a YouTube.com/DavidGewirtzTV.