Cos'è il test di loop? Metodologia, esempio
⚡ Riepilogo intelligente
Il test dei cicli convalida le strutture di ciclo all'interno di un programma, verificando cosa accade quando un ciclo viene saltato, eseguito una volta, eseguito al suo limite e spinto di un passaggio oltre il numero massimo consentito.
Cos'è il test di loop?
Test del circuito è un tipo di test del software che si concentra interamente sulla validità delle strutture di ciclo in un programma. È una parte del test della struttura di controllo, insieme test del percorso, test di convalida dei dati e test delle condizioni.
Il test del circuito è a test della scatola bianca Si tratta di una tecnica che viene applicata da chi è in grado di leggere il codice sorgente e individuare la condizione del ciclo, il contatore e il percorso di uscita. Il tester non deve dedurre il comportamento dall'interfaccia utente; l'oggetto del test è il ciclo stesso.
Il diagramma seguente mostra la posizione dei test di ciclo all'interno della famiglia dei test di struttura di controllo.
Tipi di loop testati
Prima di scegliere una strategia, identifica quale delle quattro classi di cicli stai considerando. Esempi di tipi di cicli testati sono:
- Ciclo semplice — un singolo ciclo con un ingresso e un'uscita, come ad esempio un semplice per, while or fare mentre costruire.
- Ciclo annidato — un ciclo inserito all'interno di un altro, in modo che il ciclo interno venga completato ad ogni passaggio del ciclo esterno.
- Ciclo concatenato — due o più cicli che si susseguono in sequenza.
- Ciclo non strutturato — una combinazione non pianificata di cicli annidati e concatenati, solitamente il risultato di salti all'interno o all'esterno del corpo di un ciclo.
La classe determina l'impegno richiesto. Un ciclo semplice necessita di poche iterazioni; un ciclo non strutturato, invece, di solito richiede una riprogettazione del codice prima ancora di poterlo testare.
Perché eseguire il test di loop?
Il test del loop viene eseguito per i seguenti motivi
- I test possono risolvere i problemi di ripetizione del loop
- I test di loop possono rivelare colli di bottiglia in termini di prestazioni e capacità.
- Attraverso il test dei cicli, è possibile determinare le variabili non inizializzate nel ciclo.
- Aiuta a identificare i problemi di inizializzazione del ciclo.
Esiste anche una ragione commerciale. Un ciclo che esegue un'iterazione di troppo corrompe il totale; un ciclo che non termina mai blocca un processo. Entrambi i difetti sono economici da individuare quando il codice è ancora sulla macchina di uno sviluppatore, ma costosi da trovare in produzione.
Come eseguire il Loop Testing: metodologia completa
Durante il test di un ciclo, è necessario verificarlo a tre livelli diversi:
- Quando si entra nel ciclo
- Durante la sua esecuzione, e
- Quando il ciclo viene lasciato
La strategia di test per tutti questi cicli è la seguente.
Ciclo semplice
Un ciclo semplice ha un singolo punto di ingresso e una singola uscita, come mostrato di seguito.
Un ciclo semplice viene testato nel modo seguente:
- Salta l'intero ciclo
- Effettuare un passaggio attraverso il circuito
- Fai 2 passaggio attraverso il cappio
- Make a passa attraverso il ciclo dove a < b, ovvero un tipico numero di iterazioni di fascia media
- Make b, b-1 e b+1 passa attraverso il ciclo dove b è il numero massimo di passaggi consentiti attraverso il ciclo.
Gli ultimi due casi hanno il maggior valore.ping il ciclo dimostra che la condizione di uscita viene valutata prima che il corpo venga eseguito e il bIl caso +1 dimostra che il ciclo si rifiuta di lavorare oltre il limite dichiarato anziché sovrascrivere un array.
Ciclo annidato
Un ciclo annidato moltiplica il numero di possibili combinazioni di iterazioni, quindi viene testato dall'interno verso l'esterno anziché tutto in una volta.
Per creare un ciclo annidato, è necessario seguire i seguenti passaggi.
- Imposta tutti gli altri cicli al loro valore minimo e inizia dal ciclo più interno
- Per il ciclo più interno, esegui un semplice test del ciclo e mantieni i cicli esterni al valore minimo del parametro di iterazione
- Eseguire il test per il ciclo successivo e procedere verso l'esterno.
- Continuare finché non è stato testato il circuito più esterno.
Loop concatenati
Come mostrato nel diagramma, i cicli concatenati si susseguono nello stesso percorso di esecuzione.
Nei cicli concatenati, se due cicli sono indipendenti l'uno dall'altro, vengono testati utilizzando l'approccio del ciclo semplice; altrimenti, vengono testati come cicli annidati.
Tuttavia, se il contatore di un ciclo viene utilizzato come valore iniziale per l'altro, i due cicli non sono considerati indipendenti.
Loop non strutturati
I cicli non strutturati rappresentano il caso più difficile, perché il controllo entra ed esce dal corpo del ciclo in punti arbitrari.
Per i cicli non strutturati, la progettazione deve essere ristrutturata per riflettere l'uso di costrutti di programmazione strutturata. Una volta che il codice è stato ridotto a forme semplici, annidate o concatenate, si applica la strategia di corrispondenza descritta sopra.
Esempio di test di ciclo con casi di test
Un esempio pratico rende concreto il conteggio delle iterazioni. Consideriamo una routine che moltiplica un risultato corrente per ogni intero da 1 a n, un calcolo fattoriale. Il contatore del ciclo parte da 1, la condizione di uscita è contrastare > ne il ciclo è dichiarato per accettare un massimo di 12 passaggi prima che il risultato superi il tipo intero dichiarato.
Trattando questo come un semplice ciclo, il numero di iterazioni raccomandato sopra si traduce in quanto segue casi test.
| Caso di prova | Valore di n | Passaggi eseguiti | Cosa dimostra |
| TC01 | 0 | 0 (ciclo saltato) | La condizione di uscita viene valutata prima dell'esecuzione del corpo del programma e il risultato rimane al suo valore iniziale di 1. |
| TC02 | 1 | 1 | Un singolo passaggio produce il risultato corretto e il contatore si incrementa di una volta. |
| TC03 | 2 | 2 | L'accumulatore riporta un valore tra due passaggi consecutivi. |
| TC04 | 5 | 5 | Un conteggio tipico di fascia media restituisce il valore atteso di 120, confermando un comportamento normale. |
| TC05 | 11 | 11 | Un passaggio al di sotto del massimo si completa comunque normalmente (b-1). |
| TC06 | 12 | 12 | Il valore massimo dichiarato viene accettato e il ciclo termina (b). |
| TC07 | 13 | respinto | Un passaggio oltre il massimo viene rifiutato anziché traboccare silenziosamente (b+ 1). |
Si noti che TC01 e TC07 sono i due casi che gli sviluppatori più spesso omettono, e sono i due che espongono difetti di inizializzazione saltata e overflow. Un valore negativo di n appartiene allo stesso insieme se la specifica consente di fornirlo, che collega il test del ciclo a test negativo.
Difetti comuni rilevati tramite test di loop
I test di ciclo continuano a individuare la stessa piccola famiglia di errori, ed è questo che giustifica l'esecuzione con un numero fisso di iterazioni.
- Confini fuori uno — una condizione scritta come < where <= era previsto, quindi il ciclo esegue un passaggio in meno o uno in più.
- Contatori o accumulatori non inizializzati — un totale che include un valore residuo da una chiamata precedente.
- Cicli infiniti — una condizione di uscita che il corpo del ciclo non può mai soddisfare perché il contatore viene aggiornato solo su alcuni rami.
- Presupposti del ciclo saltato — codice dopo il ciclo che legge una variabile che il corpo del ciclo avrebbe dovuto impostare, e che fallisce quando il ciclo viene eseguito zero volte.
- Guasti di capacità e prestazioni — un ciclo corretto ma che rilegge il database a ogni iterazione, quindi il costo aumenta con il numero di iterazioni.
- Interferenza ad anello annidato — un ciclo interno che riutilizza il contatore del ciclo esterno e modifica silenziosamente il conteggio delle iterazioni del ciclo esterno.
Poiché ogni errore corrisponde a uno specifico numero di iterazioni, i difetti qui evidenziati sono facili da riprodurre e rapidi da correggere rispetto ai difetti riscontrati a livelli superiori. livelli di prova.
Test dei cicli rispetto ad altre tecniche di test delle strutture di controllo
Il test di ciclo appartiene alla famiglia delle tecniche di controllo e può essere facilmente confuso con le tecniche affini. La tabella seguente le distingue.
| Tecnica | A cosa si rivolge | Obiettivo di copertura tipico |
| Test del ciclo | Strutture del ciclo: ingresso, conteggio delle iterazioni e uscita | Zero, uno, tipico e conteggio delle iterazioni limite per ogni ciclo |
| Test delle condizioni | Espressioni booleane all'interno delle decisioni | Ciascuna condizione è stata valutata sia vera che falsa |
| Test del flusso di dati | Definizione e utilizzo di ciascuna variabile | Ogni coppia definizione-uso esercitata almeno una volta |
| Test del percorso di base | Percorsi indipendenti attraverso il grafo di flusso di controllo | Un numero di percorsi pari alla complessità ciclomica |
In pratica, queste tecniche sono complementari anziché in competizione. Complessità ciclomatica ti dice quanti percorsi indipendenti esistono, il test del percorso di base li copre e il test del ciclo aggiunge quindi i conteggi di iterazione che la sola copertura del percorso non imporrebbe. Tutti loro sono test dinamico attività, poiché il codice deve essere eseguito affinché i risultati siano osservabili.
Limitazione nel test del circuito
Questa tecnica ha dei limiti ben precisi, e conoscerli previene un investimento eccessivo.
- I bug dei loop si manifestano principalmente nei software di basso livello
- I bug identificati durante il test del loop non sono molto nascosti
- Molti bug potrebbero essere rilevati dal sistema operativo, poiché causano violazioni dei limiti di memoria, errori di puntatore rilevabili e guasti simili.
- Identificare la classe di ogni ciclo e testarla di conseguenza richiede tempo, il che è difficile da giustificare in percorsi di codice che comportano un rischio minimo.





