Durante il test del software possiamo supporre che un utente non esegua azioni così stupide sul software?


71

Ad esempio: Durante l'esecuzione del test funzionale di un modulo in un'applicazione Web, testeremo i campi inserendo diversi tipi di valori di input casuali.

In generale, come utenti dell'applicazione Web non immettiamo effettivamente valori casuali nei campi.

Quindi a che serve incorporare tutti quei test che possono / non possono portare a bug, quando la probabilità di presentare questo tipo di problemi nella produzione è molto inferiore?

Nota: l'esempio sopra è solo un caso di esempio; tali problemi possono verificarsi in qualsiasi tipo di funzione / modulo.

Sto ponendo questa domanda solo per sapere se ci sono pratiche standard da seguire o dipende totalmente dal prodotto, dal dominio e da tutti gli altri fattori.


4
Forse pertinente: test delle scimmie , con pro e contro
Christophe

Risposte:


190

Potresti non inserire valori casuali nei campi di un'applicazione web, ma sicuramente ci sono persone là fuori che fanno proprio questo.

Alcune persone entrano casualmente per caso e altre lo fanno intenzionalmente cercando di interrompere l'applicazione. In entrambi i casi, non si desidera che l'applicazione si blocchi o presenti altri comportamenti indesiderati.
Per il primo tipo di utente, non lo vuoi perché dà loro una brutta esperienza e potrebbe allontanarli.
Per il secondo tipo di utente, di solito non hanno intenzioni onorevoli e non si desidera consentire loro di avere accesso alle informazioni a cui non dovrebbero essere in grado di accedere o consentire loro di negare agli utenti reali l'accesso ai propri servizi.

La pratica standard per i test è quella di verificare non solo che il caso del bel tempo funzioni, ma anche che casi limite anomali vengano esplorati per trovare potenziali problemi e avere la certezza che gli attaccanti non possono facilmente accedere al sistema. Se la tua applicazione si blocca già con input casuali, non vuoi sapere cosa può fare un attaccante con input appositamente predisposti.


16
E poi ci sono cose che non sono persone che lo fanno. 👽
kojiro,

110
Oppure potrebbero provare a inserire il loro vero nome legale, come "O'Malley", "姓名" o "Robert"); DROP TABLE Studenti; - ” .
l0b0

90
O forse nomi di società autentiche ,; DROP TABLE "AZIENDE"; - LTD .
Ben

25
Penso che l'ultimo paragrafo possa essere rafforzato sottolineando che se un programma si blocca con input casuali di un gatto che cammina sulla tastiera, quasi sicuramente si bloccherà (e peggio) con input dannosi .
phihag il

11
Inoltre, molte persone inseriscono input casuali perché non vogliono fornire dati reali (come il loro nome, data di nascita, ecc.). Alcuni presumono anche che il computer sia intelligente come un addetto e potrebbero digitare qualcosa come "l'anno scorso" anziché "2016" e si aspettano che l'applicazione lo gestisca, proprio come farebbe un essere umano.
Luaan,

102

Non assumere mai nulla

Non puoi presumere che nessun utente non farà qualcosa di "stupido" con il tuo software per caso o di proposito. Gli utenti possono premere accidentalmente il pulsante sbagliato, il gatto può camminare sulla tastiera, il sistema può non funzionare correttamente, il loro computer può essere dirottato da software dannoso, ecc.

Inoltre, l'utente stesso può essere dannoso, intenzionalmente alla ricerca di modi per rompere il software nella speranza che possano trovare un modo per sfruttarlo a proprio vantaggio. Anche se trovano un bug che non possono sfruttare, tutto ciò che trovano può spronarli a sondare il tuo sistema per qualcosa che possono attaccare, sapendo che mancano le tue procedure di QA.

Per quanto riguarda i test, è utile proteggersi dagli input casuali, tuttavia la scelta degli input di test in modo completamente casuale (vale a dire senza alcuna considerazione particolare per qualsiasi caso d'uso o caso limite) è al limite di inutili. Lo scopo del test è di validare la tua soluzione rispetto ai requisiti e alle aspettative del tuo datore di lavoro / clienti / utenti; ciò significa che è necessario concentrarsi sul targeting di tutti i casi limite e delle condizioni al contorno, nonché di tutti i casi "degenerati" che non si adattano al flusso di lavoro previsto dell'utente.

Ovviamente, potresti eseguire test che rivelano bug che in seguito deciderai che non vale la pena correggere; questo può essere per tutti i tipi di motivi: il bug potrebbe essere troppo costoso per essere risolto in relazione al suo impatto sull'utente, oppure potresti scoprire bug nelle funzionalità che nessuno usa, o il bug potrebbe essere già così ben inserito nel sistema che alcuni gli utenti lo trattano come una funzionalità.

In alternativa, potresti scrivere un software su misura che ha un pubblico strettamente limitato di utenti "esperti" in cui non vi è alcun vantaggio commerciale nel passare il tempo a riparare i bug, perché quegli utenti sono in grado di fare il loro lavoro con software difettoso (ad esempio, uno strumento diagnostico utilizzato dal team IT interno non sta generando entrate, quindi se si blocca di tanto in tanto, è probabile che nessuno voglia pagare per il tempo necessario per risolverlo - diranno invece al team IT di convivere con i bug) .

Tuttavia, puoi prendere queste decisioni solo se conosci questi bug. Ad esempio, un utente può immettere un input dannoso che cancella l'intero database: se non si è esplicitamente protetti e testati per questo scenario, non è possibile essere certi che ciò accada o meno. Il rischio di lasciare bug non scoperti nel sistema significa che potenzialmente ti stai lasciando aperto a problemi reali se uno di questi bug si rivela nel mondo reale e ha un impatto notevole sui tuoi utenti.

Pertanto, mentre la decisione sull'opportunità di correggere i bug può richiedere l'input del proprietario del software (di solito chi paga il proprio stipendio), la decisione sull'opportunità di verificare la presenza di bug e su quali casi verificare è una preoccupazione ingegneristica che deve essere tenuto conto delle stime e della pianificazione del progetto, in cui l'obiettivo dovrebbe essere quello di una copertura quanto più possibile completa, ragionevolmente possibile, dati i vincoli di tempo / denaro / risorse.


12
Sebbene il test interamente a caso non sia utile e dovresti certamente testare esplicitamente tutti i casi limite che puoi pensare, una certa quantità di fuzzing casuale a volte può anche essere utile per verificare problemi che potresti non avere previsto.
Sean Burton,

10
Abbiamo un detto: "È così difficile scrivere software a prova di idiota perché gli idioti sono persone così intelligenti". Quindi, prova per input "senza senso"!
Ralf Kleberhoff,

For example, a user may enter a malicious input which wipes the entire database - if you haven't explicitly protected against and tested for this scenario, then there's no way you can be sure whether or not this can happen.Ti piacciono i tavolini Bobby di questo fumetto XKCD? ;)
nick012000,

12
"Non dare mai per scontato nulla." Presumo che questo sia un buon consiglio.
candied_orange,

Grazie per aver sottolineato che non tutti i "bug" sono "correzioni". C'è una grande differenza nell'essere consapevoli di un caso limite e nel spendere tempo e denaro per sistemare un caso limite. Sarebbe sicuramente fantastico consentire qualsiasi possibile input a un modulo Web e avere una risposta prestabilita per tutti i casi, ma forse non è rilevante per il tuo software specifico. Forse il tuo input consente solo numeri sul front-end, quindi è impossibile ricevere non numeri sul back-end. "Risolvere" il potenziale bug di avere non numeri solo nella tua forma numerica è una perdita di tempo e denaro.
EvSunWoodard,

60

Vi sono diversi fattori da tenere in considerazione. Per illustrare questi punti, userò un esempio di un campo in cui un utente dovrebbe inserire una percentuale in un contesto di una quota definita per un'attività specifica in termini di spazio su disco che l'attività potrebbe utilizzare. 0% indica che l'attività non sarebbe in grado di scrivere nulla sul disco; 100% indica che l'attività potrebbe riempire tutto lo spazio su disco. I valori in mezzo significano cosa significano.

Come sviluppatore, probabilmente stai considerando che i valori accettabili sono [0, 1, 2, 3, ⋯ 99, 100] e tutto il resto è sciocco. Vediamo perché gli utenti potrebbero ancora inserire quei valori "stupidi".

Errori di battitura

%^

L'utente stava inserendo il valore 56, ma ha premuto per errore Shiftdurante l'immissione (ad esempio perché sulla tastiera francese, è necessario premere Shiftper inserire le cifre e l'utente passa costantemente da una tastiera francese a una QWERTY).

Allo stesso modo, puoi ottenere un numero, con qualcosa dopo o prima di esso, o tra:

56q

Qui, probabilmente l'utente stava inserendo le cifre, seguito da una scheda per passare al campo successivo. Invece di premere   ⇆  , l'utente ha premuto il tasto vicino.

Incomprensioni e interpretazioni errate

Un input vuoto è probabilmente il più comune. L'utente immaginava che il campo fosse facoltativo o che non sapesse cosa inserire in questo campo.

56.5

L'utente ha ritenuto accettabili i valori in virgola mobile. O l'utente ha torto e l'applicazione dovrebbe spiegare educatamente perché sono accettati solo i valori interi o i requisiti iniziali erano sbagliati ed è logico consentire agli utenti di inserire valori in virgola mobile.

none

L'utente ha frainteso che quando è stato chiesto lo spazio che l'attività potrebbe richiedere, l'app si aspettava un numero. Ciò potrebbe indicare un'interfaccia utente scadente. Ad esempio, chiedendo all'utente "Quanto spazio su disco dovrebbe essere occupato dall'attività?" Invita a questo tipo di input, mentre un campo con un segno di percentuale che segue riceverà meno di quel tipo di input, perché "none%" non crea molto senso.

150

L'utente ha frainteso il significato della percentuale in questo caso. Forse l'utente voleva dire che l'attività può occupare il 150% dello spazio attualmente utilizzato, quindi se su un disco da 2 TB vengono utilizzati 100 GB, l'attività potrebbe utilizzare 150 GB. Ancora una volta, potrebbe essere utile un'interfaccia utente migliore. Ad esempio, invece di avere un campo di input nudo con un segno di percentuale aggiunto ad esso, si potrebbe avere questo:

[____] % of disk space (2 TB)

Quando l'utente inizia a digitare, cambierà il testo al volo per diventare questo:

[5___] % of disk space (102.4 GB of 2 TB)

Rappresentanze

Numeri di grandi dimensioni o numeri con virgola mobile possono essere rappresentati in modo diverso. Per esempio, un numero di 1.234,56 potrebbe essere scritta così: 1,234.56. A seconda della cultura, la rappresentazione testuale dello stesso numero sarebbe diversa. In francese, lo stesso numero sarà scritto in questo modo: 1 234,56. Vedi, una virgola dove non te lo aspetti, e uno spazio.

Aspettarsi sempre un formato specifico utilizzando una specifica lingua ti metterà nei guai prima o poi, perché gli utenti di diversi paesi avrebbero abitudini diverse di scrivere numeri, date e ore, ecc.

Umani contro computer

Twenty-four

Gli umani comuni non pensano allo stesso modo dei computer. "Ventiquattro" è un numero reale, indipendentemente da ciò che un PC ti direbbe.

Sebbene (1) la maggior parte dei sistemi non gestisca affatto questo tipo di input e (2) quasi tutti gli utenti non immaginerebbero di inserire un numero scritto a lettere intere, ciò non significa che tale input sia sciocco. In About Face 3 , Alan Cooper sottolinea che non gestire tali input è indicativo dell'incapacità dei computer di adattarsi all'uomo e, idealmente, l'interfaccia dovrebbe essere in grado di gestire correttamente quegli input.

L'unica cosa che devo aggiungere al libro di Alan Cooper è che in molti casi i numeri sono scritti in cifre per errore . Il fatto che i computer si aspettino che i loro utenti commettano errori (e non tollerino un utente che scrive correttamente) è fastidioso.

Unicode

5𝟨

Unicode riserva le sue sorprese: i personaggi che potrebbero apparire uguali non sono gli stessi. Non convinto? Copia e incolla "5𝟨" === "56"negli strumenti di sviluppo del tuo browser e premi Enter.

Il motivo per cui quelle stringhe non sono uguali è che il carattere Unicode 𝟨non è uguale al carattere 6. Ciò creerebbe una situazione in cui un cliente arrabbiato chiamerebbe, dicendo che la tua app non funziona, fornendo uno screenshot di un input che sembra legittimo e che la tua app afferma che l'input non è valido.

Perché qualcuno dovrebbe inserire un carattere Unicode che assomiglia a una cifra, chiederesti? Anche se non mi aspetto che un utente ne inserisca uno involontariamente, una copia-incolla da una fonte diversa potrebbe causare ciò, e ho avuto un caso in cui l'utente ha effettivamente fatto tale copia-incolla di una stringa che conteneva un carattere Unicode che non avrebbe appare sullo schermo.

Conclusione

Questi sono i casi che ottieni per un campo di immissione di numeri elementari. Ti farei immaginare cosa puoi gestire per forme più complesse, come una data o un indirizzo.

La mia risposta è focalizzata su ciò che hai chiamato input "sciocco". Il test non riguarda il controllo dei percorsi felici; si tratta anche di verificare che l'app non si rompa quando un utente malintenzionato sta inserendo intenzionalmente cose strane, cercando di romperla. Ciò significa che quando chiedi una percentuale, devi anche testare cosa succede quando l'utente sta rispondendo con una stringa contenente 1.000.000 di caratteri, un numero negativo o una tabella bobby .


9
Ah, U + 1D7E8: SHE-SERIF DIGIT MATEMATICO SIX.
Andreas Rejbrand,

23
Per quanto riguarda l'altro carattere Unicode: sulle tastiere giapponesi è molto comune passare da cifre normali a cifre a larghezza intera dove una cifra è larga quanto un kanji. Quindi un utente giapponese potrebbe aver avuto un input giapponese (piuttosto che inglese) e aver inserito accidentalmente cifre a larghezza intera.
Jan

3
Prima di vedere la tua sezione 5𝟨 relativa allo stesso problema di omogeneo, mi aspettavo davvero una 1 234,56stringa (usando U + 00A0 NO-BREAK SPACE invece di U + 0020 SPACE), che è il modo corretto di codificare quei marcatori numerici (o con U + 202F NARROW NO-BREAK SPACE, peroahps). Copiare il valore da qualsiasi applicazione che formatta i numeri in base alle impostazioni locali prima di presentarlo all'utente lo produrrebbe facilmente.
Ángel,

4
il copia e incolla è un problema molto più grande. Comune è copiare spazi di incollaggio, interruzioni di riga, caratteri invisibili ...
Sulthan,

7
@Arseni Mourzenko Devi essere fortunato. Copiare da un PDF e incollarlo può incollare tutti i tipi di caratteri che potrebbero essere indesiderabili a seconda dei circ, ad es. Legature (per fi ecc.), Virgolette intelligenti, trattini en o em dove si voleva meno ASCII, ecc.
Rosie F

12

Ci sono molte buone risposte qui che descrivono perché questo è importante, ma non molti consigli su come proteggere sensibilmente la tua applicazione. La "pratica standard" consiste nell'utilizzare una valida convalida dell'input, sia sul client che sul server. Gli input non sensibili sono facili da difendere; rifiuti semplicemente tutto ciò che non ha senso in quel contesto specifico. Ad esempio, un numero di previdenza sociale è costituito esclusivamente da trattini e cifre; puoi tranquillamente rifiutare qualsiasi altra cosa l'utente digiti in un campo numero di previdenza sociale.

Esistono due tipi di test che devono essere eseguiti su ogni applicazione che scrivi e ognuno ha scopi diversi. I test eseguiti sulla propria applicazione sono test positivi; il suo scopo è dimostrare che il programma funziona. Il test che cosa fanno anche i tester sull'applicazione è un test negativo; il suo scopo è dimostrare che il tuo programma non funziona. Perchè ti serve? Perché non sei la persona migliore per testare il tuo software. Dopotutto, hai scritto la cosa, quindi ovviamente funziona già, giusto?

Quando si scrive la convalida dell'input, verranno utilizzati test positivi per dimostrare che la convalida funziona. I tester useranno input casuali per tentare di dimostrare che non funziona. Si noti che lo spazio problematico per gli input casuali è sostanzialmente illimitato; il tuo obiettivo non è quello di testare ogni possibile permutazione, ma di limitare lo spazio del problema rifiutando input non validi.

Si noti inoltre che l'utente finale non è l'unico che fornisce input al proprio programma. Ogni classe che scrivi ha la sua API e i suoi vincoli su ciò che è considerato input valido, quindi una validazione solida (cioè "contratti di codice") è importante anche per le tue classi. L'idea è di rafforzare il software in modo che comportamenti imprevisti siano rari o inesistenti nella massima misura possibile.

Infine, il flusso di lavoro è importante. Ho visto cadere le applicazioni, non perché l'utente ha inserito qualcosa di non sensato, ma perché ha fatto cose nell'applicazione in un ordine inaspettato. L'applicazione deve essere consapevole di questa possibilità e gestire i flussi di lavoro imprevisti con grazia o richiedere all'utente di eseguire operazioni nell'ordine specificato.


Un esempio comune di un'applicazione che prevede un determinato ordine è una funzione di "smontaggio" che rilascia handle che non sono mai stati riservati.
wizzwizz4,

2
Sfortunatamente, la pratica standard è di rifiutare tutto ciò che non ha senso e lasciare l'utente confuso e frustrato. La pratica corretta è quella di spiegare con precisione (ad esempio utilizzando messaggi di errore / feedback) il motivo per cui l'input è stato rifiutato, in modo che l'utente sappia come correggere il proprio input e farlo accettare. Un semplice "get integer da 1 a 100" richiede un minimo di 4 diversi messaggi di errore (stringa vuota, carattere non supportato, troppo grande, troppo piccolo); oltre a test per garantire il giusto feedback in ogni caso.
Brendan,

2
@Brendan: è richiesto un solo messaggio: "Questo deve essere un numero compreso tra 1 e 100". L'utente non sa (e non ha bisogno di sapere) cosa sia una stringa o cosa significhi "caratteri non supportati". Quelle sono le conseguenze del programmatore, non l'aiuto dell'utente.
Robert Harvey,

@RobertHarvey Probabilmente aggiungerei a quell'affermazione qualcosa sulla falsariga di "composto da cifre". Perché l'ingresso "Seventy-Nine" è un numero compreso tra 1 e 100, ma non è un input con cui la maggior parte dei programmi può funzionare.
Delioth,

1
@Delioth: non puoi risolvere stupidi.
Robert Harvey,

11

Di solito i valori "casuali" non sono casuali. Stai tentando di acquisire casi limite, lo "sconosciuto sconosciuto".

Supponiamo, ad esempio, che il carattere # ti causi un arresto anomalo dell'app. Non lo sai in anticipo e sarebbe impossibile scrivere casi di test per ogni possibile input. Ma possiamo scrivere un test per "¬!"£$%^&*()_+-=[]{};'#:@~,./<>?|\"e vedere se si rompe


2
+1 È sorprendente a prima vista quanto spesso quei caratteri casuali troveranno un bug. I dati provenienti dall'input dell'utente possono viaggiare molto attraverso molti componenti / servizi. Ci vuole solo un componente nella catena che non lo elabora correttamente affinché il sistema abbia un bug.
Lan,

4
esp. ora che tutte le tastiere mobili hanno emoticon
Ewan,

per gli sviluppatori .Net lo strumento IntelliTest (precedentemente chiamato Pex) è davvero un ottimo modo per esercitare percorsi di codice per trovare casi limite, è particolarmente utile nella convalida dell'input e per ottenere una buona copertura del codice.
James Snell,

7

Una volta ho scritto un programma, che ho testato dal vivo in un laboratorio con 60 studenti. Ero dietro i 60 schermi di computer e li ho visti usare. La quantità di cose ridicole che hanno fatto è stata la crescita dei capelli. Ero inzuppato di sudore a guardare la loro "creatività". Hanno fatto molto più di quanto ogni singolo individuo possa fantasticare in una vita. Naturalmente uno di loro l'ha rotto.

Successivamente seguo un approccio: if "a very specific use case" do, else show error

Se ho diversi casi d'uso, li definisco rigorosamente e concateniamo quanto sopra.


1
Tuttavia, questi casi d'uso specifici potrebbero benissimo essere troppo specifici. Sottovalutiamo sempre lo spazio di input validi . (O'Hara, decimali formattati localmente ecc.). Quante procedure finanziarie sono state preparate per gestire i tassi di interesse negativi?
Guran,

6

Quello che stai descrivendo è Fuzzing o Fuzz Testing : lancia input casuali e non validi su un sistema e guarda cosa succede. Non lo fai perché ti aspetti che un utente lo faccia. Lo fai per esporre i tuoi presupposti e le tue inclinazioni a sottolineare i bordi del tuo sistema per vedere cosa succede.

Il normale input di test scritto da un essere umano verrà con ipotesi e pregiudizi. Questi pregiudizi possono essere determinate classi di bug che non vengono mai trovate tramite test.

Ad esempio, se la maggior parte dell'input rientra nell'intervallo Unicode sicuro ASCII, le ipotesi sulla codifica dei caratteri nel codice non vengono esercitate. O forse è sempre al di sotto di una certa dimensione, quindi un campo o buffer di dimensioni fisse non viene colpito. O forse ci sono caratteri speciali che vengono interpretati in modo sorprendente esponendo l'input dell'utente in una shell o usato per creare query in modo non sicuro. O forse ci sono troppi test "buon percorso" e non abbastanza tentativi per esercitare la gestione degli errori.

Il fuzzing non ha tali preconcetti sull'input. Eserciterà brutalmente il tuo sistema con qualsiasi possibile combinazione di input "valido". Unicode, ASCII, grande, piccolo e molti e molti errori. Il tuo sistema dovrebbe rispondere con garbo a tutti loro. Non dovrebbe mai andare in crash. L'utente dovrebbe sempre ricevere una sorta di messaggio sensibile su cosa è andato storto e su come risolverlo. Non è Garbage In / Garbage Out, è Garbage In / Error Out .

Mentre uno potrebbe respingere le esplosioni risultanti perché "nessun utente reale lo farà", ciò non rispecchia il punto dell'esercizio. Il fuzzing è un modo economico per eliminare i tuoi pregiudizi su possibili input. È un modo economico per lanciare tutte le cose strane che gli utenti cercheranno di fare sul tuo sistema. In qualità di ingegnere, il tuo lavoro è garantire che il tuo sistema si guasta con grazia.


Inoltre, il "input" fuzzing non riguarda solo gli utenti. Potrebbe rappresentare il risultato di una query API a un servizio di terze parti, cosa succede se questo inizia a inviare risultati incasinati? Come lo gestisce il tuo sistema? Un sistema adeguato dovrebbe avvisare un amministratore che un componente è andato male. Un sistema improprio rifiuterà silenziosamente la query errata, o peggio, la accetterà come dati validi.

Infine, alcuni utenti sono dannosi. Se non esegui il test fuzz del tuo sistema, qualcun altro lo farà. Esamineranno i bordi del sistema per errori comuni e proveranno a usarli come falle di sicurezza. I test Fuzz possono simulare questo, in una certa misura, e puoi affrontare eventuali falle di sicurezza scoperte prima che diventino un problema.


E ci sono gli strumenti di test di Quick Check che fanno cose simili
icc97,

4

Se il tuo obiettivo è creare un prodotto di qualità, verifica ogni possibile tipo di input che un utente sarà fisicamente in grado di inviare. Altrimenti stai solo aspettando il giorno in cui qualcuno invii quel tipo di input che non ritieni necessario testare.

Durante una grande dimostrazione del nuovo software di asta elettronica presso un'autorità locale in cui ho lavorato, il mio manager ha deciso (dichiaratamente con qualche malizia) di aver sentito il bisogno di vedere cosa sarebbe successo se avesse fatto un'offerta all'asta con un valore negativo. Con mia sincera sorpresa, il software dell'asta ha consentito di bloccare questa offerta senza senso e l'intero processo dell'asta si è interrotto. Il tipo di asta dimostrata non avrebbe mai dovuto consentire la presentazione di importi negativi.

Alcuni del grande gruppo di procuratori e addetti alle finanze riuniti erano infastiditi dal mio manager per aver presentato un valore senza senso. Ma altri, incluso me stesso, erano infastiditi dagli sviluppatori di software per non aver testato e rifiutato un tipo così ovvio di input non validi. Posso solo immaginare quanto deve essere stato debole il software nel deviare altri tipi di input non validi (tentativi di immissione del codice, caratteri esotici non rappresentabili nella tabella del database, ecc.).

Se dipendesse da me, avrei restituito il software e lo avrei ritenuto inadatto allo scopo. La differenza tra un prodotto software debole e uno forte è il livello di test a cui è stato sottoposto.


2
test every possible type of input that a user will be physically able to submit.- Lo spazio problematico è essenzialmente infinito e stai perdendo tempo cercando di testarlo tutto. Il controllo degli input negativi è una singola biforcazione; non è solo ragionevole, ma anche atteso da sviluppatori competenti. Non è necessario controllare tutti i numeri negativi per dimostrare che tale convalida funziona.
Robert Harvey,

13
Ecco perché ho detto ogni tipo di input e non tutti i possibili input. E ripeterò il mio punto: se non testerai ogni tipo di input, gli utenti alla fine lo faranno.
Arkanon,

1

Ad esempio: Durante l'esecuzione del test funzionale di un modulo in un'applicazione Web, testeremo i campi inserendo diversi tipi di valori di input casuali.

Sì. Questo è un tipo di test ma non è un test funzionale . Questo è ciò che si chiama stress test . È l'atto di applicare una pressione a un sistema per vedere se è in grado di gestirlo.

Quindi a che serve incorporare tutti quei test che possono / non possono portare a bug, quando la probabilità di presentare questo tipo di problemi nella produzione è molto inferiore?

Quando stai testando un software di stress , stai cercando di scoprire i limiti di quali siano i limiti del software.

I test sono per natura esaustivi. Dove è necessario scoprire limiti di utilizzo, punti di interruzione, controllare tutti i rami logici o vedere come gli errori parziali influenzano l'intero sistema.

Puoi superare tutti i test funzionali, ma non superare comunque le prove di stress .

Sto ponendo questa domanda solo per sapere se ci sono pratiche standard da seguire o dipende totalmente dal prodotto, dal dominio e da tutti gli altri fattori.

Sì, questa è una pratica standard.

Il test del software consiste nel porre una domanda sul comportamento previsto e quando tutti i test superano questo comunica che il software funziona come previsto. Questo è il motivo per cui i test forniscono buone condizioni preliminari per la distribuzione degli aggiornamenti.

Le prove di stress non forniscono chiari specifici indicatori di superamento o fallimento. I risultati sono più informativi. Ti dice cosa può gestire il tuo sistema e prendi decisioni da quelle informazioni.

È possibile definire obiettivi specifici per le prove di stress che devono essere superati per passare alla fase successiva dello sviluppo. Questi possono essere inclusi come parte del processo di garanzia della qualità, ma i cambiamenti nell'ambiente possono cambiare i risultati di uno stress test. Quindi le persone eseguono stress test in momenti diversi per vedere come il sistema gestisce le mutevoli condizioni.

Quello che voglio dire è che non puoi semplicemente eseguire lo stress test ogni volta che distribuisci una nuova versione del tuo software e supponiamo che ciò significhi che tutto passerà lo stress test in un secondo momento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.