modulo 21 di 24 / Ore 41-60

Moduli 17-24 / Checkpoint 60 ore

Prompt per proporre test mancanti

Come formulare prompt per chiedere a un AI di identificare test mancanti nel Registro, con esempi di prompt e criteri per valutare i test proposti prima di aggiungerli.

25 minArchitettura del software

Prompt per proporre test mancanti

Questa lezione appartiene al Modulo 21 — Usare l’AI come revisore.

Obiettivo della lezione

Formulare prompt che producono suggerimenti di test mancanti utili e verificabili per il Registro — non test di stile o coverage artificiale, ma test che proteggono comportamenti reali non ancora coperti.

Perché serve nel percorso

È difficile vedere cosa manca dalla propria suite di test. L’AI può suggerire scenari che non hai considerato — casi limite, combinazioni di stati, errori non gestiti. Il prompt giusto fa emergere i buchi reali, non i test di coverage.

Nel Registro del laboratorio

Prompt per trovare test mancanti in un caso d’uso:

Questo è il codice di src/application/registraPrestito.js e il suo file di test
test/application/registraPrestito.test.js del mio progetto
"Registro del laboratorio scolastico".

Il progetto gestisce strumenti (con stati: disponibile, in_prestito, guasto, in_manutenzione),
prestiti (con apertura e chiusura) e segnalazioni di guasto.

Analizza il codice e i test esistenti, poi elenca i comportamenti che non sono ancora testati.
Per ogni test mancante indica:
- comportamento: cosa dovrebbe verificare
- scenario: quale stato iniziale, quale input
- perché è importante: quale bug troverebbe se il codice fosse sbagliato

Non proporre test che:
- testano solo lo stile del codice
- duplicano test già presenti
- richiedono TypeScript o librerie non già usate

[incolla il codice e i test esistenti]

Esempio di risposta utile:

Test mancanti per registraPrestito:

1. Strumento in manutenzione non prestabile
   Comportamento: registraPrestito deve rifiutare strumenti con stato "in_manutenzione"
   Scenario: strumento con stato "in_manutenzione", chiamata a registraPrestito
   Perché: il codice controlla "guasto" e "in_prestito" ma non "in_manutenzione"

2. Prestito con studenteId vuoto
   Comportamento: registraPrestito deve rifiutare studenteId vuoto o solo spazi
   Scenario: strumento disponibile, studenteId: "   " (spazi)
   Perché: senza questo test, un prestito potrebbe essere registrato senza studente

3. Doppio prestito contemporaneo dello stesso strumento
   Comportamento: il secondo prestito deve fallire
   Scenario: chiama registraPrestito due volte con lo stesso strumentoId senza chiudere il primo
   Perché: dopo il primo prestito lo stato diventa "in_prestito" — il secondo deve fallire

Procedura guidata

  1. Incolla il codice del caso d’uso e i test esistenti nel prompt.
  2. Descrivi il dominio del progetto (stati degli strumenti, ciclo del prestito).
  3. Chiedi i test mancanti con formato: comportamento, scenario, perché è importante.
  4. Per ogni suggerimento ricevuto: verifica che il comportamento non sia già testato.
  5. Scrivi i test suggeriti uno alla volta, verificando che falliscano prima di scrivere il codice.
  6. Se un test suggerito fallisce subito: hai trovato un bug reale nel codice.

Attività in classe

Valuta questi test proposti dall’AI — quali sono utili e quali no?

Suggerimento A: test che verifica che la funzione usa crypto.randomUUID
Utile? sì/no — Motivo:

Suggerimento B: test che verifica che uno strumento in manutenzione non può essere prestato
Utile? sì/no — Motivo:

Suggerimento C: test che verifica che il file ha meno di 50 righe
Utile? sì/no — Motivo:

Suggerimento D: test che verifica che studenteId vuoto lancia errore
Utile? sì/no — Motivo:

Suggerimento E: test che verifica il comportamento con 1000 prestiti simultanei
Utile? sì/no — Motivo:

Spiegazione guidata per studiare

I test proposti dall’AI si dividono in tre categorie:

Categoria 1 — Test utili (aggiungili): testano comportamenti reali non ancora coperti, come casi limite di stati o combinazioni non testate. Esempio: “strumento in manutenzione non prestabile” se nel codice esiste lo stato in_manutenzione ma non c’è un test per quel caso.

Categoria 2 — Test duplicati (ignora): testano comportamenti già coperti da un test con nome diverso. L’AI non sempre capisce il codice abbastanza bene da riconoscere i duplicati.

Categoria 3 — Test inutili (rifiuta): testano dettagli implementativi (usa crypto.randomUUID), metriche di style (meno di 50 righe) o scenari impossibili nel contesto del progetto.

Come scrivere un test proposto dall’AI:

Prima scrivi il test, poi verifica che fallisca (se il comportamento manca nel codice), poi aggiungi il comportamento:

// Test proposto dall'AI per "strumento in manutenzione non prestabile"
test("registraPrestito — lancia errore per strumento in manutenzione", () => {
  const strumenti = creaArchivioStrumentiFake([
    { id: "str-001", nome: "Trapano", categoria: "Utensile", stato: "in_manutenzione" }
  ]);
  const prestiti = creaArchivioPrestitiFake();

  expect(() =>
    registraPrestito({ strumentoId: "str-001", studenteId: "stu-01" }, strumenti, prestiti)
  ).toThrow(); // il test fallisce se registraPrestito non gestisce "in_manutenzione"
});

Se il test fallisce, hai trovato un caso non gestito. Aggiungilo alla funzione:

if (strumento.stato === "in_manutenzione") {
  throw new Error("STRUMENTO_IN_MANUTENZIONE_NON_PRESTABILE");
}

Passo per passo nel progetto

  1. Scegli il caso d’uso con meno test (usa l’output del runner per contarli).
  2. Scrivi il prompt con il codice e i test esistenti.
  3. Ricevi la lista di test mancanti.
  4. Per ogni suggerimento: classifica in utile/duplicato/inutile.
  5. Scrivi i test utili e verificali — se falliscono, aggiungi il comportamento mancante.
  6. Documenta quali test hai aggiunto e perché.

Prova di comprensione

  • Come si distingue un test utile da uno inutile nel contesto del Registro?
  • Cosa significa che un test “proposto dall’AI fallisce subito”?
  • Perché è importante scrivere il test prima di aggiungere il comportamento?
  • Qual è il rischio di aggiungere tutti i test suggeriti senza valutarli?

Errori da evitare

  • aggiungere test che testano dettagli implementativi (quale funzione viene chiamata internamente);
  • aggiungere test per aumentare il numero senza verificare che proteggano qualcosa di reale;
  • non verificare che i test proposti siano effettivamente mancanti (potrebbero essere duplicati);
  • aggiungere il comportamento prima di scrivere il test — perdi la verifica che il test sia significativo.

Prodotto da consegnare

Il prompt usato, la lista di test mancanti proposta dall’AI, la classificazione (utile/duplicato/inutile) di ogni suggerimento, e almeno due test utili aggiunti con il comportamento corrispondente.

Checklist di chiusura

  • il prompt specifica il dominio del progetto (stati degli strumenti, ciclo prestito)
  • ogni test suggerito è stato classificato
  • i test utili sono stati scritti prima di aggiungere il comportamento
  • almeno un test ha rivelato un comportamento mancante nel codice
  • i test aggiunti hanno nomi descrittivi secondo la naming convention

Risultato atteso

Ho inviato il prompt con registraPrestito.js e i test esistenti.
L'AI ha suggerito 5 test mancanti: ne ho classificati 3 utili, 1 duplicato, 1 inutile.
Ho scritto i 3 test utili — uno ha fallito perché lo stato "in_manutenzione" non era gestito.
Ho aggiunto la gestione di "in_manutenzione" in registraPrestito.
Ora tutti i test passano incluso quello nuovo.