Il test negativo nel test del software è una tecnica che verifica come l’applicazione reagisce a comportamenti inattesi o a dati non validi. Questo tipo di test può aiutare i team di Quality Assurance a migliorare la robustezza e la stabilità del software, individuando le eccezioni che causano blocchi, crash o altri risultati indesiderati.
In questo articolo esploreremo che cos’è il test negativo del software, perché è importante e alcuni dei diversi approcci, tecniche e strumenti che si possono utilizzare per questa tecnica.
Che cos’è il test negativo del software?
Il test negativo è una tecnica di test del software che alimenta intenzionalmente un sistema con input non validi o dati inaspettati per vedere come gestisce questi scenari. Conosciuto anche come test dei guasti o test dei percorsi di errore, questo approccio simula la vasta gamma di scenari reali in cui si imbatte l’applicazione, come l’inserimento da parte degli utenti di date o caratteri non validi o l’utilizzo di alcune funzionalità in modi mai previsti.
La maggior parte dei tipi di test utilizza dati validi per verificare un’applicazione. Tuttavia, i test negativi adottano un approccio diverso, testando i bordi e gli input tipici e verificando come l’applicazione gestisce le eccezioni.
È importante verificare che l’applicazione funzioni come previsto. Ma anche capire cosa succede quando gli utenti escono dal seminato è fondamentale, soprattutto se questi usi non voluti causano crash, blocchi o altri difetti.
Differenza tra test positivo e negativo
test nel collaudo del software
Come abbiamo detto sopra, i test negativi utilizzano dati inattesi o non validi per verificare il comportamento di un sistema. Al contrario, il test positivo spinge i dati attesi o validi per verificare che il sistema funzioni come previsto.
In altre parole:
- I test positivi aiutano a capire se la vostra applicazione funziona come previsto
- Il test negativo determina se l’applicazione è in grado di gestire eventi imprevisti.
Per testare la vostra applicazione in modo rigoroso sono necessari sia i test positivi che i test negativi.
Perché il test negativo del software è fondamentale?
Quando gli sviluppatori realizzano un software, hanno un’idea chiara di come si aspettano che l’utente lo utilizzi. Tuttavia, gli utenti non sempre seguono le regole. Spesso cercano di fare clic su pulsanti che non esistono, inseriscono lettere in campi numerici o tentano input che non ci si aspetta.
I test negativi hanno lo scopo di tenere conto di questi casi limite che non possono essere scoperti da tecniche di test positive come
unità
,
sistema
o
test di integrazione
. È necessario un pensiero non convenzionale per trovare “palle curve” da lanciare al sistema. Tuttavia, il risultato netto è un’applicazione più stabile e robusta.
Qual è lo scopo dei test negativi
nel testing del software?
I test negativi hanno obiettivi simili a quelli di altri tipi di test del software. Vale a dire, per scoprire bug, difetti e vulnerabilità di un’applicazione. Tuttavia, svolge un ruolo speciale nell’individuare i difetti che non possono essere scoperti attraverso l’uso di dati validi. Ecco alcuni dei motivi per adottare un approccio di test negativo.
1. Esporre i difetti
Lo scopo centrale dei test negativi nel test del software è quello di scoprire i difetti che derivano da dati non validi o da input inaspettati. Consente ai tester di adottare un approccio più proattivo al rilevamento dei bug e di garantire che il software sia all’altezza delle aspettative.
2. La sicurezza
Gli input inattesi o i dati non validi possono rivelare vulnerabilità di sicurezza. La verifica e la risoluzione di questi casi limite porta a un’applicazione più sicura e robusta, riducendo la possibilità di attacchi dannosi, falle di iniezione o tentativi di accesso non autorizzati.
3. Gestione degli errori
I test negativi sono utili per convalidare la gestione degli errori. Non si tratta solo di garantire che il sistema rimanga stabile dopo aver incontrato input o dati inaspettati, ma anche di come risponde a questi eventi, ad esempio producendo messaggi di errore per garantire che l’utente finale sappia che i dati non sono validi.
4. Migliorare la copertura dei test
I test positivi e negativi nella verifica del software sono estremamente complementari. Entrambi coprono diversi elementi dell’inserimento dei dati, il che significa che il test è più completo.
5. Migliore esperienza dell’utente
I test negativi aiutano a scoprire l’origine di messaggi di errore, crash e altri comportamenti inattesi che possono avere un impatto negativo sull’esperienza dell’utente.
Differenza tra positivo e negativo
test nell’ingegneria del software
Come abbiamo detto sopra, i test negativi inviano dati inattesi o non validi per verificare il comportamento di un sistema. I test positivi, invece, inviano dati attesi o validi per verificare che il sistema funzioni come previsto.
Le differenze tra test positivi e negativi comprendono:
1. Obiettivi:
I test positivi verificano se il software funziona come previsto; i test negativi cercano di capire cosa succede in scenari non previsti.
2. Dati:
I test positivi utilizzano dati validi, mentre i test negativi utilizzano input non validi, valori estremi e formati inaspettati.
3. Focus:
I test positivi si concentrano sugli scenari di successo, mentre i test negativi si concentrano maggiormente sugli scenari di insuccesso.
Diversi tipi di test negativi
Il test negativo è un concetto che comprende diversi approcci per convalidare la qualità e l’integrità di un’applicazione. Ecco sette tipi di test negativi da conoscere.
#1. Test del valore limite
Il test dei valori limite cerca di testare il software con ingressi che si trovano ai confini o ai margini dell’intervallo di ingresso. Verifica sia i valori massimi che quelli minimi previsti, ma anche quelli che vanno appena oltre questi input.
Esempio: Un campo di immissione accetta numeri compresi tra 1 e 9. Un test dei valori limite immette sia 1 che 9, ma testa anche 0 e 10.
#2. Test del valore di ingresso
Il test del valore di ingresso determina come il sistema risponderà a input inattesi o non validi. Alcuni degli input che verranno testati includono:
- Tipi di dati non corretti
- Valori fuori range
- Caratteri speciali
- Campi vuoti.
Esempio: Una casella di immissione richiede solo un numero, quindi il test prevede l’immissione di una lettera per vedere come risponde il sistema.
#3. Test di carico
Test di carico
aiuta i tester a valutare la risposta del sistema in caso di forti sollecitazioni o carichi, come grandi serie di dati o elevati volumi di traffico.
Gli strumenti di automazione dei test
possono simulare queste condizioni estreme per capire come reagisce il sistema sotto sforzo.
Esempio: Il tester simulerà migliaia di utenti simultanei che accedono a un sito web.
#4. Test di eccezione
Questo tipo di test analizza il modo in cui il sistema risponderà a eventi o errori eccezionali. Alcuni dei test includono
- Simulazione di crash di sistema
- Guasti di rete
- Errori del database
- Problemi di spazio su disco
- File mancanti.
Esempio: Il test potrebbe analizzare cosa succede quando un utente sta scaricando un file dall’applicazione e Internet viene interrotto.
#5. Test di sicurezza
I test di sicurezza utilizzano un approccio negativo per evidenziare e comprendere le vulnerabilità del software che possono essere esposte da input non validi o inaspettati. Questo approccio verifica la presenza di attacchi comuni, quali:
- Iniezione SQL
- Cross-site scripting (XSS)
- Buffer overflow.
Esempio: Un test di sicurezza potrebbe tentare di iniettare codice dannoso in un campo di input dell’utente.
#6. Test dell’interfaccia utente
Questo tipo di test si concentra sugli errori che si verificano quando l’utente interagisce con il software. Tra le cose che cercherà di determinare ci sono:
- Risposte inaspettate alle interazioni dell’utente
- Messaggi di errore non corretti
- Problemi di navigazione
Esempio: Il test analizza cosa succede quando determinate azioni vengono eseguite fuori sequenza.
#7. Test di integrità dei dati
I test di integrità dei dati assicurano che i dati rimangano accurati e coerenti in una serie di operazioni all’interno dell’applicazione. Tra le cose da testare ci sono:
- Potenziali corruzioni di dati
- Scenari di perdita dei dati
- Modifiche involontarie dei dati
Esempio: Il test verifica che i dati rimangano invariati dopo una trasmissione.
Come si può vedere, esistono molti approcci diversi ai test negativi. Tutti hanno in comune l’uso di input inattesi o di dati non validi per verificare il funzionamento dell’applicazione in condizioni atipiche.
Vantaggi del test negativo
I test negativi servono a capire come funziona l’applicazione quando si verificano situazioni inaspettate. Ecco alcuni dei principali vantaggi di questo approccio.
- Aiuta a capire l’impatto che input inattesi o dati non validi avranno sulla vostra applicazione. Si schianterà? Sputare un messaggio di errore impreciso?
- I test negativi fanno parte di un approccio responsabile all’assicurazione della qualità, perché cercano di identificare i punti deboli del sistema.
- Il test negativo mette alla prova il software testando la sua risposta a scenari imprevisti o non previsti che incontrerà in natura.
- Anche in questo caso, i test negativi sono una componente essenziale di un approccio completo alla sicurezza, perché evidenziano potenziali vettori di attacco che i cyber-attaccanti potrebbero sfruttare.
Svantaggi del test negativo
I test negativi offrono numerosi vantaggi, ma presentano anche alcuni aspetti negativi che devono essere superati.
- Un test negativo approfondito può richiedere hardware e software aggiuntivi, con conseguente aumento dei costi di verifica. Per le squadre che operano con un budget limitato, questo può essere svantaggioso.
- I test negativi possono richiedere molto tempo perché richiedono la creazione di molti casi di test per coprire le varie permutazioni di input che il software dovrà affrontare in produzione.
- Ci sono limiti alla quantità di situazioni imprevedibili che si possono coprire con i test negativi. In effetti, alcune situazioni potrebbero essere così inaspettate che i tester non possono prenderle in considerazione.
- L’automazione dei casi di test negativi è impegnativa. Tuttavia, con il software giusto, come ZAPTEST, il processo è molto più gestibile.
Sfide del test negativo
I test negativi sono fondamentali se si vuole costruire un software robusto e affidabile, in grado di resistere alle sollecitazioni dell’interazione con gli utenti. Tuttavia, l’implementazione di questo approccio presenta alcune sfide di cui è necessario essere consapevoli.
Analizziamo alcune delle sfide più persistenti.
1. Identificare gli scenari negativi nel test del software
Copertura sufficiente:
Una delle sfide più grandi dei test negativi è garantire la copertura di un numero sufficiente di scenari imprevisti. Esistono molti scenari e permutazioni negative, per cui considerarli tutti richiede un approccio creativo per immaginare come gli utenti interagiranno con il software.
Priorità:
Con così tanti potenziali scenari negativi da mettere al microscopio, i tester non sanno sempre da dove iniziare. Alcuni criteri solidi per valutare le priorità sono le previsioni:
- Situazioni con un’alta probabilità di difetti
- La gravità dell’esito dei difetti.
2. Progettazione di adeguati casi di test negativi
Convalida dell’ingresso:
La progettazione di solidi casi di test negativi richiede una comprensione abbastanza completa del comportamento, dell’architettura e dei limiti del sistema. Per testare il software è necessario utilizzare input e dati attentamente considerati. Sebbene l’approccio casuale possa aiutare a rivelare alcuni difetti, esso impallidisce rispetto a un approccio più preciso e sistematico ai test negativi.
Diversità dei dati:
A seconda delle particolarità del sistema, potrebbe essere necessario eseguire i test su un insieme di dati piuttosto eterogeneo. Esistono infatti molti formati di dati diversi, come numeri, testo, date e così via, ognuno dei quali può essere accettato dall’applicazione. La sfida consiste nel progettare casi di test che tengano conto di ogni formato e, in particolare, di ogni variazione di dati non validi. Questa situazione può richiedere molto tempo ai team di test.
3. Efficienza e automazione dei test
Richiede tempo:
I test positivi mirano a convalidare il software rispetto ai risultati attesi. I test negativi, invece, devono esplorare gli imprevisti e i potenziali scenari. Per percorrere un territorio inesplorato occorre più tempo. Di conseguenza, se volete ottenere i risultati completi che si ottengono con i test negativi, dovete essere pronti a investire qualche ora in più.
Complessità dell’automazione:
I test negativi possono richiedere molto tempo e risorse. Per questo motivo, è un lavoro perfetto per l’automazione dei test del software. Tuttavia, ci sono alcune complessità che devono essere superate. Ad esempio, progettare casi di test che definiscano i risultati attesi per input inattesi richiede una certa esperienza e know-how. Inoltre, il framework esistente per i test di automazione potrebbe non supportare i dati non validi che si desidera inviare all’applicazione, aggiungendo un ulteriore livello di complessità.
4. Valutazione dei risultati
Falsi positivi:
La calibrazione dei test per garantire un equilibrio soddisfacente tra accuratezza e completezza è un problema familiare per i tester negativi. In alcune situazioni, una gestione degli errori troppo sensibile confonde erroneamente gli input validi con quelli negativi, facendo perdere tempo a problemi non rilevanti.
Risultati ambigui:
Quando un sistema riceve un input non valido, può provocare crash, errori o blocchi. In molti casi, questo è un segno sicuro di un bug. In altri casi, invece, è la prova di un caso limite non gestito che gli sviluppatori non hanno considerato. Distinguere tra queste situazioni discrete è importante, ma indagare sulla vera causa richiede molto tempo.
Gestione dei dati:
I test negativi richiedono una notevole quantità di dati. Queste informazioni sui test devono essere generate e mantenute. In scenari di sviluppo con tempi stretti, questo è un lavoro extra che deve essere considerato.
5. Problemi organizzativi
Mancanza di competenze in materia di test negativi:
Sebbene i test negativi siano molto diffusi, molti tester non hanno le capacità e le competenze necessarie per implementare questo tipo di test in modo completo. La progettazione di alcuni casi di test negativi è meno intuitiva dell’equivalente dei casi di test positivi. Inoltre, l’implementazione dell’automazione dei test può essere impegnativa senza le giuste competenze.
Pressione commerciale:
Gli stakeholder, i collaudatori e la direzione devono comprendere il ruolo critico che i test negativi svolgono nello sviluppo di applicazioni robuste. Il mancato riconoscimento della sua importanza può indurre a concentrarsi sui test positivi a scapito di quelli negativi.
È chiaro che i team che vogliono sfruttare i vantaggi dei test negativi devono affrontare diverse sfide. Tuttavia, con il giusto approccio e i giusti strumenti di test del software, è possibile superare questi problemi e costruire un software che vada oltre le aspettative degli utenti.
Come scrivere casi di test negativi per il software
La scrittura di casi di test negativi per il software richiede una certa esperienza e un pensiero creativo. Ecco una guida passo passo per aiutarvi a creare questi casi di test critici.
#1. Stabilire gli obiettivi
Prima di scrivere i casi di test negativi per il software, è necessario capire perché si vuole eseguire il test negativo. Non tutte le applicazioni traggono vantaggio dai test negativi.
Quindi, capire cosa si vuole ottenere. I test negativi sono progettati per individuare gli errori e i crash che derivano da scenari o condizioni di interazione con l’utente inaspettati.
#2. Delineare i potenziali scenari negativi
Successivamente, è necessario tenere conto del tipo di scenari negativi che possono verificarsi quando gli utenti interagiscono con il vostro software. La ricerca in questa fase è fondamentale. Alcune aree da esplorare sono:
- Requisiti di sistema
- Casi d’uso tipici
- Caratteristiche e funzioni dell’applicazione
Esaminate queste situazioni e fate un elenco di scenari in cui l’applicazione potrebbe non funzionare come previsto.
Quindi, considerare gli scenari di convalida degli input critici. In genere, si tratta di moduli di inserimento dati, campi di login e così via.
Infine, considerate la miriade di modi non convenzionali in cui gli utenti possono interagire con il vostro software e gli eventi imprevisti che possono produrre esiti negativi, come disconnessioni di rete, arresti improvvisi del sistema, trasferimenti massicci di dati, ecc.
Dopo aver documentato il maggior numero possibile di scenari, è il momento di determinare i risultati attesi di questi scenari inattesi.
#3. Delineare i risultati attesi
Ogni caso di test deve avere un risultato atteso e un caso di test negativo non è diverso. La pratica migliore è quella di scrivere ogni scenario negativo e stabilire quale dovrebbe essere il risultato.
Alcuni dei potenziali risultati possono includere:
- Messaggi di errore accurati e informativi
- Reindirizzamenti appropriati
- Gestione del sistema in modo intelligente, ad esempio evitando blocchi o arresti anomali del sistema.
#4. Selezionare gli ingressi da testare
Ora è il momento di vedere quali sono gli ingressi da testare. Questi input dovrebbero essere quelli che hanno maggiori probabilità di causare un errore o altri comportamenti negativi.
Alcuni input da includere sono:
- Valori fuori range (valori negativi in un campo di età, ecc.)
- Dati non validi (lettere in un campo numerico, ecc.)
- Caratteri o simboli inaspettati
- Caratteri speciali
- Dati mancanti
#5. Scrivere i casi di test
Una volta raccolti tutti gli scenari, è il momento di scrivere i casi di test. Ora, con i test negativi, è possibile scrivere un numero quasi illimitato di casi di test. Dopo tutto, questo tipo di test serve a scoprire cosa succede quando le persone utilizzano il software in modi che non erano previsti. Tuttavia, le scadenze impongono di ridurre l’elenco dei casi potenziali alle situazioni che hanno maggiori probabilità di causare problemi.
Come sempre, scrivete i vostri casi di test con un linguaggio chiaro, conciso e oggettivo. Non c’è spazio per l’ambiguità.
Ecco un buon formato per i casi di test negativi.
- Utilizzare l’ID del caso di test
- Descrivere con precisione l’oggetto del test
- Prendere nota di eventuali condizioni preliminari per il test negativo
- Delineare l’insieme delle fasi coinvolte
- Stabilire risultati chiari e oggettivi
- Annotare il risultato effettivo del test
#6. Programmare il test
Ora è necessario programmare i test. Anche in questo caso, è importante dare priorità agli scenari che presentano gli esiti negativi più gravi, come gli incidenti, o in cui è più probabile che vengano scoperti problemi.
Esempio di caso di test negativo
Ecco un esempio di caso di test negativo.
ID del caso di test: TC001
Descrizione: Verificare che venga visualizzato un messaggio di errore se l’utente inserisce un indirizzo e-mail non valido.
Precondizioni: L’utente deve trovarsi nella pagina di login dell’applicazione
Passi: 1. Inserire un indirizzo e-mail non valido. 2. Premere “Accesso”.
Risultato atteso: Quando l’utente preme “Login”, viene visualizzato un messaggio di errore che dice “indirizzo e-mail errato inserito”.
Risultato: Registrare cosa è successo quando è stato selezionato “Login”.
Esempi di scenari negativi nel test del software
Ecco alcuni scenari tipici che si possono verificare utilizzando metodi di test negativi.
1. Tipi di dati e campi
Se avete compilato un modulo online, saprete che queste caselle sono impostate per accettare particolari tipi di dati. Alcuni sono solo numeri, mentre altri accettano date, testo o altri tipi di dati.
Il test negativo per queste caselle prevede l’invio di dati non validi, ad esempio l’inserimento di lettere in un campo numerico.
2. Campi obbligatori
Anche in questo caso, i campi obbligatori sono caratteristiche comuni di moduli e applicazioni. Sono uno strumento utile per garantire la raccolta di tutte le informazioni critiche prima che l’utente passi alla fase successiva.
Un buon banco di prova per questi scenari consiste nel vedere cosa succede quando questi campi vengono lasciati vuoti. In uno scenario ideale, dovrebbe essere attivato un messaggio di errore che invita l’utente a compilare il campo richiesto.
3. Numero adeguato di caratteri
Se avete un’applicazione di pagine web in fase di test, potreste avere un campo dati che richiede un numero limitato di caratteri. Potrebbe trattarsi di nomi di utenti, numeri di telefono, numeri di registrazione e così via.
È possibile creare casi di test negativi per questi campi, scrivendo test che immettono più dei caratteri massimi consentiti per vedere come risponde l’applicazione.
4. Limiti e confini dei dati
Alcuni moduli avranno campi con limiti fissi. Ad esempio, se si vuole che qualcuno dia un voto a qualcosa su 100, i limiti dei dati sarebbero 1-100.
Creare un caso di test negativo in cui si tenta di immettere 0, 101 o altri valori negativi o positivi da 1 a 100.
Migliori pratiche per i test negativi
Esistono diverse best practice per garantire un test negativo di alta qualità. Ecco alcuni suggerimenti per aiutarvi a raggiungere l’obiettivo.
1. Definire gli ingressi non validi:
Esaminare la documentazione di sviluppo, i casi d’uso e l’interfaccia utente/UX per comprendere e identificare i potenziali input non validi. Cercate i tipi di dati non validi, i valori estremi, i dati mancanti, i campi vuoti, i formati inaspettati e altro ancora.
2. Utilizzare l’analisi del valore limite:
Come già detto, delineate i valori limite per individuare i casi limite che possono causare reazioni inaspettate.
3. Partizione di equivalenza dei dipendenti:
Esaminate i domini di input e divideteli in partizioni di equivalenza di valori validi e non validi. Questo processo aiuta a ridurre il numero di casi di test da scrivere, perché se una parte equivalente di dati non validi causa problemi per un ingresso, è probabile che venga rappresentata nell’intera classe.
4. Imitare i cattivi utenti:
Il test positivo verifica il comportamento atteso dall’utente. I test negativi analizzano cosa succede quando le persone usano male la vostra applicazione. Pensate quindi ai diversi scenari in cui ciò può accadere e replicateli nei vostri casi di test.
5. Lasciate che il rischio e l’impatto guidino i vostri test:
Nessun tester ha tempo illimitato. A un certo punto, dovrete fare delle scelte difficili, perché non potete fare dei test (e nemmeno conoscere) per ogni risultato inaspettato. Quando dovete decidere quali tipi di test negativi eseguire, date priorità alle aree che comportano il maggior rischio o impatto negativo per il vostro prodotto.
6. Verifica della gestione degli errori:
Assicuratevi che la gestione degli errori sia parte integrante dei vostri test, verificando che i messaggi di errore siano utili e accurati.
7. Automatizzare il più possibile:
L’automazione è in grado di gestire compiti banali e ripetitivi. Tuttavia, i test negativi richiedono ancora un approccio manuale per i test esplorativi e la ricerca di casi limite.
I migliori strumenti di test negativo per il 2024
Sebbene il test negativo del software sia comune in tutto il settore, mancano strumenti specifici per questo lavoro. Un motivo importante è la natura versatile dei test negativi. Inoltre, molti degli stessi strumenti utilizzati per i test positivi funzionano anche per i test negativi, se si modificano i dati di input.
ZAPTEST è lo strumento migliore per i test negativi grazie alla sua natura versatile e modulare. È facile da usare e personalizzabile e, grazie alle funzionalità multipiattaforma e multiapplicazione, offre una flessibilità difficile da battere.
Test guidati dai dati e
test di mutazione
funzionalità rendono ZAPTEST perfetto per i test negativi. Inoltre, grazie alla sua RPA è possibile simulare gli utenti del mondo reale, riutilizzare i test e creare facilmente report e documentazione. In poche parole, la capacità di ZAPTEST di eseguire software di automazione del software e di automazione dei processi robotici all’avanguardia lo rende uno sportello unico per qualsiasi attività di automazione, compresi i test negativi.
Riflessioni finali
I test negativi nei test del software aiutano i team a capire come la loro applicazione gestirà gli input inattesi e i dati non validi. Mentre i test positivi verificano se il software funziona come previsto, i test negativi aiutano a capire cosa succede quando gli utenti selezionano input e dati in modo errato. Entrambi gli approcci sono importanti se si vuole un’applicazione solida e robusta, in grado di gestire le sollecitazioni e le interazioni degli utenti.