Caso di test e scenario di test: Differenze chiave, esempi e quando utilizzarli
Uno scenario dice cosa testare. Un caso dice esattamente come. Segui una funzionalità di reimpostazione della password dai requisiti agli scenari fino ai casi di test completi e scopri di quanti dettagli ha realmente bisogno il tuo team.
- Uno scenario di test è un’istruzione di una riga di cosa da verificare.
- Un caso di test fornisce i passaggi, i dati e il risultato atteso che mostrano come verificarlo.
- Uno scenario solitamente produce diversi casi di test.
- Abbina il dettaglio al rischio: scenari leggeri per team veloci, casi completi per lavori critici o regolamentati.
I nuovi tester spesso sentono questi due termini usati come se significassero la stessa cosa. Non lo fanno. La differenza tra un caso di test e uno scenario di test riguarda principalmente il livello di dettaglio e comprenderlo ti aiuta a decidere quanto scrivere prima di iniziare il test.
Questa guida spiega ciascuno di essi, quindi funziona attraverso un’unica funzionalità di reimpostazione della password, dai requisiti agli scenari fino ai casi di test completi. La funzione e le sue regole sono un esempio inventato. Anche la terminologia varia leggermente tra team e strumenti, quindi concorda cosa significano queste parole nel tuo team.
La risposta breve
Uno scenario di test descrive una situazione da verificare, ad esempio “verificare che un utente possa reimpostare una password dimenticata”. Di solito è una riga e lascia i dettagli al tester.
Un caso di test spiega esattamente come verificare una condizione all’interno di quella situazione: precondizioni, passaggi, dati di test e risultato atteso. Due tester che lo seguono dovrebbero raggiungere lo stesso verdetto.
Pensa a pianificare un viaggio. Lo scenario è “viaggio da Pune a Delhi”. Il test case è l’itinerario completo, con il numero del volo, l’orario di partenza e cosa fare in ogni tappa.
Caso di test e scenario di test fianco a fianco
| Aspetto | Scenario di prova | Caso di prova |
|---|---|---|
| Risposta alla domanda | Cosa dovremmo testare? | Come lo testiamo esattamente? |
| Dettaglio | Alto livello | Basso livello e specifico |
| Lunghezza tipica | Una riga | Diversi campi e passaggi |
| Derivato da | Requisiti, storie degli utenti | Scenari di prova |
| Include dati di test? | Raramente | Sì |
| Include il risultato atteso? | Implicito | Sì, esplicitamente |
| È ora di scrivere | Minuti | Molto più a lungo |
| Manutenzione | Basso | Più in alto, perché cambiano i dettagli |
| La libertà del tester | Alto | Basso |
| Meglio per | Panoramica della copertura, team veloci | Flussi critici, audit, passaggi di consegne |
Cos’è uno scenario di prova?
Uno scenario di test è una breve descrizione di qualcosa che un utente potrebbe fare o di una situazione che il sistema deve gestire. Si concentra su ciò che conta dall’esterno e di solito deriva direttamente da un requisito o dalla storia dell’utente.
Gli scenari sono preziosi perché sono veloci. Puoi elencarne trenta nel tempo necessario per scrivere tre casi dettagliati, il che li rende un ottimo modo per rivedere la copertura con un product Owner: “abbiamo pensato a tutto?” Un lettore non tecnico può seguire un elenco di scenari senza problemi.
Cos’è un caso di prova?
Un caso di test è un insieme di condizioni e passaggi specifici, utilizzati per determinare se una cosa funziona. Un tipico caso di test contiene:
- Un ID univoco e un titolo chiaro
- Precondizioni, ovvero ciò che deve essere vero prima di iniziare
- passi numerati
- dati di test specifici
- Un risultato atteso
- Il risultato effettivo e lo stato, compilati durante l’esecuzione
I casi di test brillano quando la coerenza è importante. Un nuovo membro del team può eseguirli, i risultati possono essere confrontati tra le versioni e si ha una registrazione di ciò che è stato verificato. Approfondiremo la nostra guida su come scrivere casi di test.
Una caratteristica, dall’inizio alla fine
Passaggio 1: il requisito
Gli utenti che dimenticano la password possono richiedere un collegamento di reimpostazione tramite e-mail. Il collegamento funziona una volta e scade dopo 30 minuti. Una nuova password deve contenere almeno 8 caratteri.
Passaggio 2: gli scenari di test
| ID | Scenario di prova |
|---|---|
| TS-01 | Verificare che un utente registrato possa reimpostare una password utilizzando il collegamento inviato via email |
| TS-02 | Verificare il comportamento quando l’e-mail non è registrata |
| TS-03 | Verificare che non sia possibile utilizzare un collegamento scaduto |
| TS-04 | Verificare che un collegamento non possa essere utilizzato due volte |
| TS-05 | Verificare che le nuove regole della password siano applicate |
Guarda TS-02. Il requisito non dice mai cosa dovrebbe succedere con un’e-mail sconosciuta e la scrittura dello scenario ha messo in luce questa lacuna. La pagina dovrebbe rivelare che l’indirizzo non è registrato? Per motivi di sicurezza, di solito non dovrebbe, poiché ciò consente agli aggressori di scoprire account validi. Trovare queste domande in anticipo è uno dei maggiori vantaggi della scrittura di scenari.
Passaggio 3: i casi di test
Ora espandiamo solo TS-05 nei casi di test. Uno scenario diventa diversi:
| ID | Titolo | Dati di prova | Risultato atteso |
|---|---|---|---|
| TC-051 | Accetta una password di esattamente 8 caratteri | abcd1234 |
La password viene modificata e viene visualizzata una conferma |
| TC-052 | Rifiuta una password di 7 caratteri | abcd123 |
Errore: sono necessari almeno 8 caratteri |
| TC-053 | Rifiuta una password vuota | (blank) | Errore: password richiesta |
| TC-054 | Rifiuta la conferma non corrispondente | abcd1234, abcd9999 |
Errore: le password non corrispondono |
Questi valori non erano casuali. TC-051 e TC-052 si trovano su entrambi i lati del limite, utilizzando l’analisi dei valori limite, e gli altri provengono dal partizionamento di equivalenza.
Un modello di caso di prova
Ecco il TC-052 scritto per intero. Copia questo layout se il tuo team non ha ancora uno standard:
ID: TC-052
Title: Reset rejects a password of 7 characters
Scenario: TS-05 New password rules are enforced
Priority: High
Preconditions: Account asha@example.com exists
A valid, unused reset link has been requested
Test data: New password: abcd123
Steps:
1. Open the reset link from the email
2. Enter abcd123 in New password
3. Enter abcd123 in Confirm password
4. Click Reset password
Expected: Error "Password must be at least 8 characters"
Password is unchanged, and the link stays valid
Actual: (filled in during the run)
Status: (Pass / Fail / Blocked)
Si noti che il risultato previsto controlla più del messaggio di errore. Conferma inoltre che la vecchia password funziona ancora e che il collegamento rimane utilizzabile. I casi di test deboli spesso si fermano a ciò che è visibile sullo schermo.
Suggerimento: testare una condizione in ogni caso di test. Se un caso che copre cinque cose fallisce, non saprai quale si è rotto. Anche i casi brevi e mirati sono molto più facili da automatizzare in seguito.
Dove si inseriscono nel quadro più ampio
| Livello | Risposte | Esempio |
|---|---|---|
| Strategia di prova | Qual è il nostro approccio generale? | Automatizza la regressione, esplora nuove funzionalità |
| Piano di prova | Cosa faremo per questa release? | Funzionalità dell’account, testate dal 3 al 7 marzo |
| Scenario di prova | Cosa controlleremo? | Vengono applicate le regole relative alla password |
| Caso di prova | Come lo controlleremo? | TC-052 e i suoi passaggi |
| Test di sceneggiatura | Come lo controllerà una macchina? | Codice automatizzato per TC-052 |
Tradizionalmente, scenari e casi vengono scritti durante la fase di progettazione del test del ciclo di vita del test del software.
Quando utilizzarli ciascuno
Gli scenari sono spesso sufficienti quando:
- Il team è piccolo, esperto e conosce bene il prodotto.
- Il tempo è poco o i requisiti cambiano frequentemente.
- La funzionalità è a basso rischio.
- Desideri rivedere rapidamente la copertura con le parti interessate.
- Stai guidando test esplorativi.
Casi di test dettagliati valgono lo sforzo quando:
- Un fallimento sarebbe costoso, come nel caso dei pagamenti, della sicurezza o dei dati sanitari.
- Le autorità di regolamentazione o i revisori hanno bisogno di prove di ciò che è stato testato.
- I test devono essere eseguiti da tester nuovi o esternalizzati.
- I risultati devono essere ripetuti esattamente, come in una suite di regressione.
- I passaggi diventeranno test automatizzati.
Le squadre più mature li usano entrambi. Elencano scenari per tutto e scrivono casi completi solo per i rischi più elevati. Non è necessario documentare ogni passaggio di una pagina delle impostazioni a basso rischio allo stesso modo di un bonifico bancario.
Scenari, casi e automazione
Un caso di test ben scritto si associa quasi direttamente a un test automatizzato. Le precondizioni diventano impostazioni, i passaggi diventano azioni e il risultato atteso diventa un’asserzione. I framework di sviluppo basati sul comportamento usano persino la parola “Scenario” per le loro specifiche eseguibili:
Scenario: Reset rejects a short password
Given I have opened a valid reset link
When I submit the new password "abcd123"
Then I see "Password must be at least 8 characters"
And my password is unchanged
In modo confuso, quello che BDD chiama scenario è molto più vicino a un caso di test, perché contiene dati e risultati specifici. Questo è un buon promemoria per concordare i termini. Per automatizzare questi controlli, consulta il nostro tutorial sul drammaturgo o il tutorial su pytest.
Cosa li rende buoni
| Un buon scenario | Un buon banco di prova |
|---|---|
| Descrive un obiettivo o una situazione dell’utente | Verifica una condizione specifica |
| Riporta a un requisito | Ha un risultato atteso preciso |
| Copre i fallimenti così come il successo | Elenca le sue precondizioni e i suoi dati |
| Non ha dettagli inutili | Può essere gestito da qualcuno di nuovo |
| Si adatta a una riga | Non dipende da altri test |
Errori comuni
- Scrivere solo percorsi felici. La maggior parte dei bug si trova nelle condizioni di errore, quindi includi ciò che dovrebbe fallire.
- Utilizzo di risultati attesi vaghi. “Dovrebbe funzionare correttamente” consente a qualsiasi tester di decidere qualsiasi cosa.
- Documentare tutto per intero. Migliaia di casi che nessuno sostiene sono peggio di un piccolo insieme utile.
- Saltare gli scenari. Passare direttamente ai casi può lasciare intere aree dimenticate.
- Lasciare che le custodie diventino obsolete. Quando il prodotto cambia, le vecchie custodie ingannano le persone. Rivederli regolarmente.
- Legare i passaggi ai dettagli fragili. “Fai clic sul pulsante blu in alto” si interrompe con qualsiasi riprogettazione.
Considerazioni finali
Gli scenari ti danno ampiezza e i casi di test ti danno profondità. Inizia con gli scenari per la tua prossima funzionalità ed esaminali con uno sviluppatore e un proprietario del prodotto. Quindi espandi solo quelli rischiosi in casi completi. Troverai le lacune prima e trascorrerai il tuo tempo a scrivere dove conta.
Domande frequenti
Qual è la differenza principale tra un caso di test e uno scenario di test?
Uno scenario di test è una dichiarazione di alto livello di cosa testare. Un caso di test fornisce i passaggi specifici, i dati e il risultato atteso su come testarlo.
Cosa viene prima, scenario di test o caso di test?
Di solito lo scenario. Gli scenari provengono dai requisiti, quindi i casi di test vengono scritti dagli scenari che necessitano di maggiori dettagli.
Quanti casi di test ha uno scenario?
Non esiste un numero fisso. Dipende dalle regole e dai rischi coinvolti e uno scenario tipico può averne diversi, coprendo successo, fallimento e limiti.
I team Agile necessitano di casi di test dettagliati?
Non sempre. Molti si affidano a scenari, criteri di accettazione e automazione e conservano casi dettagliati solo per flussi critici o esigenze di conformità.
Uno script di test è uguale a un caso di test?
Non proprio. Un test case descrive cosa controllare, mentre uno script di test è solitamente un codice che esegue tali controlli automaticamente, sebbene alcuni team utilizzino i termini in modo approssimativo.
Continua a imparare
Hai bisogno di aiuto con test, WordPress o SEO?
Aiutiamo i team a fornire software migliore e a far crescere i loro siti. Raccontaci a cosa stai lavorando e ti suggeriremo chiaramente il prossimo passo.
Altre guide su test, intelligenza artificiale e sviluppo moderno
Ti è piaciuto questo articolo? Scegli un argomento e passa direttamente ai nostri tutorial più recenti.
Spiegazione delle allucinazioni dell'intelligenza artificiale: perché i modelli linguistici inventano le cose e come ridurle
Spiegazione delle allucinazioni dell'intelligenza artificiale: cosa sono, perché i modelli linguistici le producono, tipi comuni, come ridurle con b…
Leggi l'articolo →DevOpsSpiegazione delle variabili d'ambiente: file .env, segreti e configurazione eseguiti correttamente
Variabili d'ambiente spiegate con esempi Python che abbiamo eseguito: lettura e impostazione, perché ogni valore è una stringa, file .env, ereditari…
Leggi l'articolo →Sviluppo softwareSpiegazione della limitazione della velocità API: algoritmi, intestazioni e gestione degli errori 429
La limitazione della velocità dell'API spiegata con una simulazione che abbiamo eseguito: bucket di token, finestra fissa, finestra scorrevole, risp…
Leggi l'articolo →Automazione dei testDerisione in Python: unittest.mock, patch e gli errori che fanno mentire i test
Mocking in Python con unittest.mock, testato: Mock e return_value, side_effect, patch dove viene utilizzato un nome, specifiche e autospec, date moc…
Leggi l'articolo →Test del softwareSpiegazione della copertura del codice: copertura di linea o di filiale e cosa significa realmente il 100%.
Copertura del codice spiegata con una vera esecuzione di cover.py: copertura di linea, ramo e condizione, lettura di un rapporto, perché la copertur…
Leggi l'articolo →Database e SQLDELETE vs TRUNCATE vs DROP in SQL: differenze, rollback e quando utilizzarli
DELETE vs TRUNCATE vs DROP spiegato con SQL testato: cosa rimuove, rollback, trigger, reimpostazione dell'identità, velocità e come differiscono Pos…
Leggi l'articolo →Database e SQLSpiegazione delle visualizzazioni SQL: crea, utilizza ed evita le insidie, con esempi
Viste SQL spiegate con le query che abbiamo eseguito: creazione di una vista, risultati in tempo reale, nascondere colonne, prestazioni, viste aggio…
Leggi l'articolo →Sviluppo softwareInterfaccia TypeScript e tipo: differenze reali, testate con il compilatore
Interfaccia TypeScript vs tipo, verificata con il vero compilatore: cosa possono fare entrambi, cosa può fare solo uno, fusione delle dichiarazioni,…
Leggi l'articolo →Sviluppo softwareSpiegazione di Python *args e **kwargs: funzioni flessibili con esempi chiari
Python *args e **kwargs spiegati con il codice che abbiamo eseguito: compressione e decompressione, ordine dei parametri, argomenti solo per parole …
Leggi l'articolo →Sviluppo softwareFunzioni Lambda Python: sintassi, usi reali e quando non usarli
Funzioni lambda Python spiegate con il codice che abbiamo eseguito: sintassi, ordinamento con chiave, mappa e filtro, chiusure, trap dell'associazio…
Leggi l'articolo →Intelligenza artificialeCosa sono gli agenti AI? Come funzionano, con un semplice ciclo di agenti che puoi eseguire
Cosa sono gli agenti IA? Una semplice guida al ciclo dell'agente, agli strumenti, alla memoria e ai guardrail, con un piccolo ciclo Python che abbia…
Leggi l'articolo →DevOpsMonitoraggio vs osservabilità: la vera differenza, con log, metriche e tracce
Spiegazione del monitoraggio e dell'osservabilità: errori noti e sconosciuti, log, metriche e tracce, una procedura dettagliata sugli incidenti di p…
Leggi l'articolo →DevOpsVolumi Docker e montaggi di associazione: mantenere i dati del contenitore nel modo giusto
Volumi Docker e montaggi di collegamento spiegati: perché i dati del contenitore scompaiono, volumi denominati, montaggi di collegamento, tmpfs, ese…
Leggi l'articolo →Automazione dei testTDD vs BDD: differenze chiave, una caratteristica costruita in entrambi i modi e quando utilizzarli ciascuno
TDD vs BDD spiegato con una funzione di sconto costruita in entrambi i modi: refactoring rosso-verde con il codice che abbiamo eseguito, scenari "Da…
Leggi l'articolo →Test del softwareTest di accettazione da parte dell'utente (UAT): processo, lista di controllo ed esempi reali
Spiegazione del test di accettazione dell'utente: chi lo esegue, in cosa differisce dal QA, un processo in sette fasi, un modello di test case UAT, …
Leggi l'articolo →Database e SQLSpiegazione dei valori SQL NULL: IS NULL, COALESCE, NULLIF e le trappole da evitare
Valori SQL NULL spiegati con le query che abbiamo eseguito: logica a tre valori, IS NULL, COALESCE, NULLIF, come aggregazioni, join e ordinamento tr…
Leggi l'articolo →Database e SQLIstruzione SQL CASE WHEN: sintassi, esempi reali ed errori comuni
SQL CASE WHEN spiegato con le query che abbiamo eseguito: moduli semplici e cercati, ordine delle condizioni, pivot con SUM, trucchi COUNT, ordiname…
Leggi l'articolo →Sviluppo softwareCos'è il JWT? Token Web JSON spiegati con un esempio funzionante
Cos'è il JWT? Spiegazione dei token Web JSON: le tre parti, un token creato e manomesso nel codice che abbiamo eseguito, JWT e sessioni, archiviazio…
Leggi l'articolo →Sviluppo softwareSpiegazione del loop di eventi JavaScript: stack di chiamate, microtask e timer con esempi
Il ciclo di eventi JavaScript spiegato con il codice che abbiamo eseguito: stack di chiamate, code di attività e microtask, perché setTimeout 0 non …
Leggi l'articolo →Sviluppo softwareSpiegazione dei generatori Python e del rendimento: risparmia memoria con esempi reali
Generatori Python e rendimento spiegati con il codice che abbiamo eseguito: come vengono messi in pausa e ripresi, misurato il risparmio di memoria,…
Leggi l'articolo →Intelligenza artificialeCosa sono gli incorporamenti? I vettori e la somiglianza del coseno spiegati semplicemente
Cosa sono gli incorporamenti? Una guida in linguaggio semplice ai vettori, alla similarità del coseno e alla ricerca semantica, con un piccolo esemp…
Leggi l'articolo →DevOpsDistribuzione blu-verde rispetto a quella canaria: differenze, compromessi e come scegliere
Spiegazione della distribuzione blu-verde e canary: come funziona ciascuna, costi, rischi e rollback, bucket utente stabile che abbiamo testato, mig…
Leggi l'articolo →Automazione dei testTest instabili: quali sono le cause e come risolverli definitivamente
Test instabili spiegati con demo che abbiamo eseguito: le cause principali, come confermarne e diagnosticarne uno, soluzioni adeguate per tempistich…
Leggi l'articolo →Test del softwareTest di carico e test di stress: differenze, metriche ed esempi k6
Spiegazione del test di carico e dello stress test: cosa dimostra ciascuno, test di picco e di assorbimento, le metriche che contano, perché le medi…
Leggi l'articolo →Test del softwareCaso di test e scenario di test: differenze chiave, esempi e quando utilizzarli
Spiegazione del caso di test e dello scenario di test: definizioni chiare, una tabella affiancata, una funzione di reimpostazione della password pre…
Leggi l'articolo →Database e SQLOttimizzazione delle query SQL: leggi i piani di esecuzione e correggi query lente, con tempistiche
Ottimizzazione delle query SQL testata su un milione di righe: leggi i piani di esecuzione, aggiungi gli indici corretti, correggi filtri non aggior…
Leggi l'articolo →Database e SQLSQL UNION vs UNION ALL: differenze, esempi e prestazioni testate
SQL UNION vs UNION ALL spiegati con le query che abbiamo eseguito: duplicati, regole seguite da entrambi, un vero bug di dati, prestazioni misurate,…
Leggi l'articolo →Sviluppo softwareTutorial sull'API di recupero JavaScript: GET, POST, gestione degli errori e timeout
Un tutorial sull'API JavaScript Fetch testato su un server locale: GET e POST, perché 404 non genera eccezioni, un helper riutilizzabile, stringhe d…
Leggi l'articolo →Sviluppo softwareGestione dei file Python: lettura, scrittura, CSV, JSON e pathlib con esempi
Gestione dei file Python spiegata con il codice che abbiamo eseguito: modalità aperte, con, lettura di file di grandi dimensioni, CSV, JSON, pathlib…
Leggi l'articolo →Sviluppo softwareClassi e oggetti Python: tutorial OOP con esempi reali
Classi e oggetti Python spiegati con il codice che abbiamo eseguito: __init__, metodi, attributi di classe e istanza, ereditarietà, proprietà, metod…
Leggi l'articolo →Intelligenza artificialeChe cos'è un modello linguistico di grandi dimensioni? Come funzionano i LLM, spiegato senza esagerazioni
Cos’è un modello linguistico ampio? LLM spiegati in un linguaggio semplice: token, incorporamenti, attenzione, formazione, finestre di temperatura e…
Leggi l'articolo →DevOpsComandi Linux per principianti: la guida essenziale del terminale con esempi
Comandi Linux per principianti, raggruppati per attività: navigazione, file, visualizzazione log, grep, pipe, permessi, processi e archivi, con un e…
Leggi l'articolo →Automazione dei testSelenio vs drammaturgo: differenze chiave, codice a confronto e quale scegliere
Selenium vs Playwright a confronto: architettura, attesa, supporto per browser e linguaggio, debug, lo stesso test in entrambi gli strumenti, consig…
Leggi l'articolo →Test del softwarePartizionamento di equivalenza: tecnica di progettazione dei test spiegata con esempi pratici
Spiegazione del partizionamento di equivalenza: come trovare partizioni valide e non valide, esempi funzionanti per età, password e coupon, test che…
Leggi l'articolo →Test del softwareGravità vs priorità nel test del software: differenze, matrice ed esempi reali
Spiegazione della gravità e della priorità nei test del software: definizioni chiare, una matrice a quattro vie con esempi, scale di livello, chi im…
Leggi l'articolo →Database e SQLEsercitazione sulle sottoquery SQL: tipi, sottoquery correlate ed EXISTS con esempi
Un tutorial sulle sottoquery SQL con le query che abbiamo eseguito: sottoquery scalari, IN, FROM e SELECT, sottoquery correlate, EXISTS, trap NOT IN…
Leggi l'articolo →Database e SQLSpiegazione di transazioni SQL e ACID: COMMIT, ROLLBACK e livelli di isolamento
Transazioni SQL e ACID spiegate con un bonifico bancario eseguito: COMMIT, ROLLBACK, punti di salvataggio, blocchi, livelli di isolamento, letture s…
Leggi l'articolo →Sviluppo softwareGit merge vs rebase: differenze, esempi e quando usare ciascuno
Git merge vs rebase spiegato con output reale del log, una tabella di confronto, la regola d'oro del rebase e un flusso di lavoro sicuro per i team.
Leggi l'articolo →Sviluppo softwareList comprehension in Python: sintassi, esempi e quando evitarla
List comprehension in Python spiegata: sintassi, filtri, if-else, cicli annidati, tempi misurati e i casi in cui un normale ciclo for è meglio.
Leggi l'articolo →Database e SQLSQL JOIN spiegati con esempi (Inner, Left, Right, Full)
Capisci i JOIN SQL passo dopo passo con tabelle e query di esempio: INNER, LEFT, RIGHT, FULL, CROSS e SELF, con errori comuni e consigli sulle prest…
Leggi l'articolo →