Ciclo while e do-while nel metodo della casella bianca del test del ciclo

4

Sto cercando di capire come funziona questo metodo e ovunque lo controllo vedo che c'è qualcosa di difettoso o forse è che non sto capendo qualcosa dal metodo.

Qui c'è una spiegazione del metodo di riferimento.

Alcune cose del metodo non hanno molto senso per un ciclo while o do-while. Voglio dire, se usi un ciclo while o do-while è perché non sai quante iterazioni il ciclo avrà.

In questo caso non vedo cose come queste che abbiano un significato:

  • Progettare un test in cui un corpo del loop viene eseguito un numero "tipico" di volte.

    Qual è il numero tipico di volte per a ciclo while o do-while? Questi loop di solito dipendono dall'assunzione dell'utente qualche azione, quindi non penso che abbia senso parlare di eseguire un numero "tipico" di volte in quanto dipende strongmente dal utente. A meno che non consideriamo "tipico" la quantità di volte in cui l'utente è probabile utilizzare il ciclo, che trovo impossibile conoscere sotto qualsiasi standard ragionevole.

  • Esecuzione di test esterni (come descritto sopra) per ciascun ciclo, mantenendo il numero di iterazioni di cicli esterni ai valori minimi diversi da zero possibili (ovvero, i valori minimi che possono essere utilizzati quando il corpo del ciclo interno deve essere eseguito il numero desiderato di volte) [...]

    Qual è un valore minimo per un ciclo while o do-while, posso undersand che forse se ci fosse una condizione come while (int_num > 0) it potrebbe essere testato per int_num = 1, ma come sarebbe fatto se il condizione erano un confronto di stringhe per esempio?

Grazie per il tuo tempo.

    
posta user2638180 24.12.2017 - 14:22
fonte

2 risposte

2

Innanzitutto, sebbene il metodo di prova sia descritto solo in termini di do-while e while-do cicli, il metodo si applica ugualmente a for e foreach cicli. I cicli for e foreach possono essere visti come uno zucchero sintattico attorno a un ciclo while-do.

Riguardo alla prima domanda, potresti non sapere esattamente quante iterazioni il ciclo passerà, ma dovresti avere un'idea se, in una situazione normale

  • il ciclo non dovrebbe essere eseguito ed esiste solo per attendere una condizione che normalmente sarà vera in anticipo
  • il ciclo dovrebbe essere eseguito una sola volta ed esiste principalmente per riprovare l'operazione se non riesce in modo inaspettato
  • il ciclo dovrebbe eseguire alcune decine di cicli
  • il ciclo dovrebbe eseguire alcune centinaia o migliaia di cicli

Questa conoscenza dovrebbe essere utilizzata per determinare il numero "tipico" di volte in cui viene eseguito un ciclo. Il numero di iterazioni utilizzate in questo test non deve essere azzeccato, ma è bene averlo in un ordine di grandezza del numero effettivo di iterazioni che il loop esegue nella vita reale.

Per quanto riguarda la seconda domanda, l'impostazione di tale test richiede la conoscenza di esattamente cosa fanno questi loop, che non è un problema per i test white-box.

L'idea qui è che il numero di iterazioni del ciclo interno può dipendere dal ciclo esterno. In molti casi, il numero minimo di iterazioni per i loop esterni sarà 1, ma potrebbe essere che un loop interno sia limitato al massimo N volte. Se si desidera avere iterazioni 3N in totale del corpo del loop interno, è necessario ripetere l'iterazione 3 volte sul ciclo esterno.

    
risposta data 24.12.2017 - 15:15
fonte
3

Un numero "tipico" di iterazioni è semplicemente qualsiasi altro valore rispetto ai valori "speciali", di solito 0, 1 e forse 2. 0 iterazioni significa che qualsiasi cosa il ciclo non viene mai fatto, quindi si vuole assicurarsi che no i problemi si verificano a causa di ciò (es. valore non definito per contatore, ecc.). Una iterazione significa che i valori scritti dal ciclo potrebbero non essere mai letti. Due iterazioni sono il primo caso in cui le azioni intraprese dal ciclo possono avere un effetto cumulativo, cioè influenzare ciò che accade la seconda volta. Quindi ha senso testare cosa succede per le iterazioni 0, 1 e 2. L'idea è che qualsiasi problema con il ciclo rischia di diventare visibile durante almeno uno di questi test.

Un test con un numero "tipico" di iterazioni, come 10 o giù di lì, probabilmente non esporrà ulteriori errori nella logica fondamentale, ma potrebbe essere utile verificare che il ciclo faccia esattamente ciò che dovrebbe, ad es. mantieni un conteggio degli articoli elaborati, non dei valori di overflow, ecc. Tutto ciò è vero sia che tu abbia un ciclo for o un ciclo while .

Con i cicli annidati ha senso esercitare questi casi per ogni livello del ciclo. Con tre livelli, è possibile testare in teoria le iterazioni 0x0x0, le iterazioni 1x0x0, le ripetizioni 2x0x0 e 10x0x0 ecc. Ecc. Fino a iterazioni 10x10x10. È discutibile se sia necessario testare tutte 4³ = 64 combinazioni o solo ogni possibile conteggio per ogni livello, cioè 12 combinazioni, ma ognuna di queste controlla condizioni leggermente diverse, quindi è una buona idea avere a meno quelli.

    
risposta data 24.12.2017 - 15:14
fonte

Leggi altre domande sui tag