Quali bug stiamo seppellendo adesso
Il codice generato dall'AI supera i test e non supera il tempo. I numeri pubblici, e la domanda che nessuno sta tracciando.
"Lo fai in cinque minuti con l'intelligenza artificiale." La frase gira nelle riunioni da un paio d'anni, di solito detta da chi quel codice non dovrà mantenerlo fra diciotto mesi. Faccio scrivere codice ai modelli di punta dentro repository reali, non in demo, e il quadro che vedo ogni giorno non somiglia a quella frase.
Il comportamento si ripete e cambia poco da un modello all'altro. Dai un ordine preciso, con vincoli scritti nero su bianco. Torna qualcosa che assomiglia alla richiesta, più deviazioni che non hai autorizzato: un file toccato fuori perimetro, una dipendenza aggiunta di sua iniziativa, un passaggio dichiarato completato senza essere verificato. Quest'ultima ha perfino un nome nella letteratura sulle failure operative degli agenti: misleading completion claims.
I numeri, non le impressioni
Non è materia da aneddoto, ed è misurata da altri.
- Veracode ha testato oltre cento modelli su compiti sensibili alla sicurezza: il 45% del codice generato introduce una vulnerabilità della OWASP Top 10
- GitClear, su 211 milioni di righe modificate, misura la duplicazione dei blocchi in crescita dell'81% rispetto al 2023, il copia-incolla dal 9,4% al 15,7%, e il codice rifattorizzato invece che riscritto crollato dal 13% al 3,8%
- Un'analisi di 20.574 sessioni reali di agenti in IDE e CLI trova che lo sviluppatore corregge o contesta l'output nel 41% dei turni
- Su 6.000 sessioni e 355.000 chiamate a strumenti, solo il 44% del codice scritto dall'agente arriva al commit finale
Intanto in classifica gli stessi modelli stanno fra l'80% e il 97% su SWE-bench. Vale la pena ricordare che, su cento modelli elencati, uno solo porta una verifica indipendente: gli altri novantanove hanno mandato un punteggio misurato in casa, con il proprio harness.
Sul codice in sé il difetto è meno vistoso e più duraturo. Early exit praticamente inesistente, annidamenti a cinque livelli, nomi che descrivono l'implementazione invece dell'intenzione. Niente che non compili. Tutto ciò che rende un sistema immodificabile fra due anni.
Il sospetto, e la versione noiosa
Da qui è nato un sospetto che dichiaro per quello che è, un sospetto e non un'accusa: che il lavoro lasciato a metà non sia sempre un incidente, e che a qualcuno convenga il giro successivo.
Non ci credo fino in fondo, e la versione noiosa mi spaventa di più: non serve malafede per ottenere lo stesso risultato. Un sistema addestrato a produrre risposte che sembrano complete impara a farle sembrare complete. Nessuno ha ordinato niente. Un'intenzione la correggi, un incentivo no.
Il debito che non ha una scadenza
Ma il punto vero viene dopo. Quel codice sta entrando in produzione adesso: gestionali, banche, logistica, sanità. Scritto in fretta, letto di sfuggita, approvato da chi pensa che se compila e i test passano allora è finita, e spesso revisionato dallo stesso tipo di modello che l'ha scritto.
La domanda quindi non è se l'AI scriva buon codice oggi. È quali bug stiamo seppellendo adesso, in sistemi che qualcuno riaprirà fra cinque anni senza nessuno che sappia cosa c'è dentro. Non il crash che vedi subito: quello è il caso fortunato. L'off-by-one su un rateo. Il branch mai coperto. Il catch silenzioso che ingoia l'eccezione.
Il problema dell'anno 2038 lo conosciamo con vent'anni di anticipo. Questo debito non ha una data, non ha un elenco e nessuno lo traccia.
Non è una posizione contro l'AI: la uso ogni giorno e mi rende più veloce. È una posizione contro "cinque minuti". Il codice generato lo state rivedendo con lo stesso rigore di quello scritto a mano, o più in fretta perché sembra già finito?