L'IA per la generazione di test: dove aiuta e dove inganna
L'IA scrive test velocemente. Scrive anche test che sembrano reali ma verificano le cose sbagliate. Potresti vedere la copertura aumentare, ma il tuo codice rimane rotto.
L'IA è ottima per certi compiti. Usala per:
- Derivare nuovi test da un buon esempio. Se scrivi un test perfetto, l'IA può scriverne altri dieci esattamente con il tuo stile.
- Gestire la digitazione ripetitiva. Usala per i blocchi di setup, teardown e gli helper delle factory.
- Creare lo scaffolding iniziale. Ti permette di arrivare all'editor più velocemente rispetto a un file vuoto.
Il pericolo inizia quando lasci che l'IA decida il "contratto".
Se dai all'IA una funzione e chiedi dei test, essa legge il codice e testa ciò che il codice fa attualmente. Non testa ciò che il codice dovrebbe fare. Questo crea un loop chiuso. L'IA fa un'ipotesi, scrive il codice e poi scrive test che concordano con la stessa ipotesi.
Quando i bug arrivano in produzione, lo fanno perché la suite di test era dalla parte del bug.
Attenzione a queste tre trappole:
Test basati sull'implementazione L'IA spesso testa i percorsi logici invece delle regole di business. Se cambi un piccolo dettaglio interno, i test si rompono anche se il risultato è ancora corretto. Questo rende il refactoring un incubo.
Casi limite superficiali L'IA è brava a testare null, stringhe vuote e zeri. Questi sono ovvi. Non riesce a trovare i "limiti di dominio". Non conosce i tuoi bug specifici relativi al fuso orario, le stranezze del tuo database o le tue regole di business uniche.
Mock fragili L'IA ama fare il mock di tutto. Questo porta a due problemi:
- Il mock è errato. Mimica una versione finta di un'API che non corrisponde alla realtà.
- Il mock blocca l'implementazione. Testa come il tuo codice chiama altre funzioni invece di testare il risultato finale.
Come usare l'IA correttamente:
Mantieni l' "intento" fuori dalla portata dell'IA.
- Scrivi prima il contratto. Scrivi una frase in linguaggio naturale per ogni test. Esempio: "I codici scaduti devono restituire l'importo originale."
- Consegna quelle frasi all'IA. Lascia che scriva le asserzioni, ma fornisci tu il significato.
- Fai il mock solo ai confini. Mocka solo le API esterne o i database. Usa versioni reali dei tuoi moduli interni.
- Scrivi un caso limite di dominio a mano. Ogni volta che finisci una funzione, scrivi la cosa che ti spaventa di più. Usala come prompt per l'IA.
L'IA è uno strumento di produttività, non un sostituto del pensiero. Usala per scrivere il corpo del test, ma non lasciarle mai decidere lo scopo del test.
Source: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm
Optional learning community: https://t.me/GyaanSetuAi
