Scrivere unit test per codice legacy prima di modificarlo

Crea test di caratterizzazione per codice legacy senza test: fissa il comportamento attuale, isola dipendenze come database o orologio e pianifica un refactoring sicuro passo passo. Pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Include 4 variabili personalizzabili e puoi copiarlo gratuitamente con un clic.

Intermedio · Codice · In attesa di revisione editoriale

Prompt

Agisci come sviluppatore senior esperto di codice legacy e testing (test di caratterizzazione e punti di separazione o «seam»).

Contesto:
- Linguaggio e framework di test: {{linguaggio}}
- Dipendenze difficili usate dal codice (database, data corrente, rete, file, variabili globali): {{dipendenze}}
- Il mio obiettivo una volta avuti i test: {{obiettivo}}
- Codice:
```
{{codice}}
```

Consegne:
1. Mappa del comportamento: input, output, effetti collaterali e rami del codice, in un elenco breve.
2. Punti di separazione: dove e come isolare ogni dipendenza con la modifica minima e sicura (iniezione via parametro, wrapper della chiamata, orologio finto) senza alterare il comportamento.
3. Test di caratterizzazione che fissino il comportamento ATTUALE, anche se sembra sbagliato. Segna i casi sospetti con un commento «POSSIBILE BUG» invece di correggerli.
4. Casi limite: valori vuoti, nulli, estremi, errori delle dipendenze.
5. Copertura dei rami ottenuta, cosa resta scoperto e perché.
6. Piano di refactoring a piccoli passi, ciascuno verificabile con i test, orientato a {{obiettivo}}.

Vincoli:
- Non modificare la logica del codice né nei test né nei punti di separazione.
- Non inventare il risultato atteso di un caso se non si deduce dal codice: segnalo con [DA COMPLETARE: eseguire e incollare l'output reale] e spiega come ottenerlo.
- Usa nomi di test descrittivi (dato / quando / allora).
- Se manca codice da cui dipende la funzione, chiedimelo prima.

Formato: sezioni numerate e blocchi di codice pronti da eseguire.

Come usarlo

Incolla la funzione o la classe completa e indica le dipendenze esterne che conosci. Esegui i test sul codice non modificato: devono passare tutti prima di iniziare il refactoring.

Esempio d'uso

Linguaggio: Python 3.11 con pytest · Dipendenze: datetime.now() e query MySQL · Obiettivo: suddividere una funzione di 300 righe che calcola le provvigioni.

Esempio di risultato

Supponendo che la funzione completa legga gli ordini del cliente con PDO e usi date() per l’anzianità…

2. Seam

  • Database: aggiungere un parametro opzionale ?PDO $pdo = null che, se null, usa la connessione attuale.
  • Data: aggiungere ?DateTimeImmutable $adesso = null e sostituire date() con $adesso->format(...).

Entrambe le modifiche lasciano invariate tutte le chiamate esistenti.

3. Test di caratterizzazione

<?php
use PHPUnit\Framework\TestCase;

final class CalcolaScontoTest extends TestCase
{
    private PDO $pdo;

    protected function setUp(): void
    {
        $this->pdo = new PDO('sqlite::memory:');
        // Schema minimo che imita la tabella reale: [DA COMPLETARE]
        $this->pdo->exec('CREATE TABLE ordini (cliente_id INT, totale REAL, creato_il TEXT)');
    }

    public function test_dato_cliente_senza_ordini_quando_totale_100_allora_risultato_attuale(): void
    {
        $adesso = new DateTimeImmutable('2025-03-15 10:00:00');

        $risultato = calcolaSconto(['id' => 42], 100.0, $this->pdo, $adesso);

        $this->assertSame(0.0, $risultato); // [DA COMPLETARE: esegui e incolla l’output reale]
    }

    public function test_dato_totale_negativo_allora_nessuna_eccezione(): void
    {
        // POSSIBILE BUG: un totale negativo non viene rifiutato; fissiamo il comportamento attuale
        $risultato = calcolaSconto(['id' => 42], -50.0, $this->pdo, new DateTimeImmutable());
        $this->assertIsFloat($risultato);
    }
}

Esegui prima ogni test, copia il valore reale nell’asserzione e solo dopo inizia il refactoring…

Dati chiave

Categoria
Programmazione e sviluppo · Refactoring
Tipo di output
Codice
Livello
Intermedio
Pensato per
ChatGPT, Claude, Gemini e Microsoft Copilot
Verificato in
In attesa di verifica editoriale
Variabili
Linguaggio e framework di test, Dipendenze difficili, Obiettivo successivo e Codice
Lingua
Italiano
Prezzo
Gratuito, senza registrazione
Aggiornato
07/11/2026

Domande frequenti

Che cos’è un test di caratterizzazione?

Un test che documenta cosa fa il codice oggi, non cosa dovrebbe fare. Funziona da rete di sicurezza: se un refactoring cambia un risultato, il test lo segnala.

E se il codice ha un bug evidente?

Fissalo prima in un test marcato come possibile bug e completa la rete di sicurezza. Correggilo poi in una modifica separata, per non mescolare refactoring e cambi di comportamento.

A cosa serve questo prompt?

Crea test di caratterizzazione per codice legacy senza test: fissa il comportamento attuale, isola dipendenze come database o orologio e pianifica un refactoring sicuro passo passo.

Con quali strumenti di IA funziona?

È pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Non lo abbiamo ancora verificato in questi strumenti, quindi i risultati possono variare da uno all'altro.

Come personalizzo il prompt?

Clicca su «Personalizza» e compila le variabili (Linguaggio e framework di test, Dipendenze difficili, Obiettivo successivo e Codice). Il testo si aggiorna all'istante e poi puoi copiarlo con un clic. I valori vengono salvati solo nel tuo browser.

Serve esperienza per usarlo?

È di livello intermedio: conviene conoscere l'argomento per fornire un buon contesto e valutare il risultato con occhio critico.

Questo prompt è gratuito?

Sì. Tutti i prompt di HomeCasa Prompts sono gratuiti, senza registrazione né abbonamento. Puoi usarli anche in progetti professionali.

Posso fidarmi dell'output dell'IA?

Consideralo una bozza di alta qualità: verifica sempre dati, cifre e affermazioni importanti prima di pubblicare o prendere decisioni.

Prompt correlati