Cos'è la copertura del codice?
La copertura del codice è una misura che descrive il grado di verifica del codice sorgente del programma. È una forma di test white box che trova le aree del programma non esercitate da una serie di casi di test. Crea anche alcuni casi di test per aumentare la copertura e determinare una misura quantitativa della copertura del codice.
Nella maggior parte dei casi, il sistema di copertura del codice raccoglie informazioni sul programma in esecuzione. Inoltre, combina questo con le informazioni sul codice sorgente per generare un rapporto sulla copertura del codice della suite di test.
In questo tutorial imparerai-
- Cos'è la copertura del codice?
- Perché utilizzare la copertura del codice?
- Metodi di copertura del codice
- Copertura della dichiarazione
- Copertura decisionale
- Copertura delle filiali
- Copertura delle condizioni
- Copertura della macchina a stati finiti
- Quale tipo di copertura del codice scegliere
- Copertura del codice e copertura funzionale
- Strumenti di copertura del codice
- Vantaggi e svantaggi dell'utilizzo della copertura del codice
Perché utilizzare la copertura del codice?
Ecco alcuni motivi principali per utilizzare la copertura del codice:
- Ti aiuta a misurare l'efficienza dell'implementazione del test
- Offre una misurazione quantitativa.
- Definisce il grado in cui il codice sorgente è stato testato.
Metodi di copertura del codice
Di seguito sono riportati i principali metodi di copertura del codice
- Copertura della dichiarazione
- Copertura decisionale
- Copertura delle filiali
- Attiva / disattiva copertura
- Copertura FSM
Copertura della dichiarazione
La copertura delle istruzioni è una tecnica di test white box in cui tutte le istruzioni eseguibili nel codice sorgente vengono eseguite almeno una volta. Viene utilizzato per il calcolo del numero di istruzioni nel codice sorgente che sono state eseguite. Lo scopo principale di Statement Coverage è quello di coprire tutti i possibili percorsi, linee e dichiarazioni nel codice sorgente.
La copertura delle istruzioni viene utilizzata per derivare lo scenario in base alla struttura del codice sottoposto a test.
In White Box Testing, il tester si concentra sul funzionamento del software. In altre parole, il tester si concentrerà sul funzionamento interno del codice sorgente relativo ai grafici di flusso di controllo o ai diagrammi di flusso.
Generalmente in qualsiasi software, se guardiamo il codice sorgente, ci sarà un'ampia varietà di elementi come operatori, funzioni, loop, gestori eccezionali, ecc. In base all'input del programma, alcune delle istruzioni del codice potrebbero non essere eseguite . L'obiettivo della copertura delle istruzioni è quello di coprire tutti i possibili percorsi, linee e istruzioni nel codice.
Comprendiamolo con un esempio, come calcolare la copertura delle dichiarazioni.
Scenario per calcolare la copertura dell'istruzione per un determinato codice sorgente. Qui stiamo prendendo due diversi scenari per controllare la percentuale di copertura delle dichiarazioni per ogni scenario.
Codice sorgente:
Prints (int a, int b) {------------ Printsum è una funzioneint risultato = a + b;If (risultato> 0)Stampa ("Positivo", risultato)AltroStampa ("Negativo", risultato)} ----------- Fine del codice sorgente
Scenario 1:
Se A = 3, B = 9
Le istruzioni contrassegnate in giallo sono quelle che vengono eseguite secondo lo scenario
Numero di istruzioni eseguite = 5, Numero totale di istruzioni = 7
Copertura dichiarazione: 5/7 = 71%
Allo stesso modo vedremo lo scenario 2,
Scenario 2:
Se A = -3, B = -9
Le istruzioni contrassegnate in giallo sono quelle che vengono eseguite secondo lo scenario.
Numero di istruzioni eseguite = 6
Numero totale di dichiarazioni = 7
Copertura dichiarazione: 6/7 = 85%
Ma nel complesso se si vede, tutte le istruzioni sono coperti da 2 ° di scenario considerato. Quindi possiamo concludere che la copertura complessiva delle dichiarazioni è del 100%.
Cosa copre la copertura delle dichiarazioni?
- Dichiarazioni inutilizzate
- Codice morto
- Rami inutilizzati
- Dichiarazioni mancanti
Copertura decisionale
La copertura decisionale è una tecnica di test white box che riporta i risultati veri o falsi di ciascuna espressione booleana del codice sorgente. L'obiettivo del test di copertura decisionale è quello di coprire e convalidare tutto il codice sorgente accessibile controllando e assicurando che ogni ramo di ogni possibile punto di decisione venga eseguito almeno una volta.
In questa copertura, le espressioni a volte possono diventare complicate. Pertanto, è molto difficile ottenere una copertura del 100%. Ecco perché esistono molti metodi diversi per riportare questa metrica. Tutti questi metodi si concentrano sulla copertura delle combinazioni più importanti. È molto simile alla copertura delle decisioni, ma offre una migliore sensibilità al controllo del flusso.
Esempio di copertura decisionale
Considera il seguente codice:
Demo (int a) {Se (a> 5)a = a * 3Stampa (a)}
Scenario 1:
Il valore di a è 2
Il codice evidenziato in giallo verrà eseguito. Qui viene verificato il risultato "No" della decisione If (a> 5).
Copertura decisionale = 50%
Scenario 2:
Il valore di a è 6
Il codice evidenziato in giallo verrà eseguito. Qui viene verificato il risultato "Sì" della decisione If (a> 5).
Copertura decisionale = 50%
Caso di prova | Valore di A | Produzione | Copertura decisionale |
1 | 2 | 2 | 50% |
2 | 6 | 18 | 50% |
Copertura delle filiali
Branch Coverage è un metodo di test white box in cui viene testato ogni risultato di un modulo di codice (istruzione o loop). Lo scopo della copertura delle filiali è garantire che ogni condizione decisionale di ogni filiale venga eseguita almeno una volta. Aiuta a misurare frazioni di segmenti di codice indipendenti e a scoprire sezioni prive di rami.
Ad esempio, se i risultati sono binari, è necessario testare sia i risultati veri che falsi.
La formula per calcolare la copertura delle filiali:
Esempio di copertura delle filiali
Per conoscere la copertura delle filiali, consideriamo lo stesso esempio utilizzato in precedenza
Considera il codice seguente
Demo (int a) {Se (a> 5)a = a * 3Stampa (a)}
La copertura delle filiali considererà anche le filiali incondizionate
Caso di prova | Valore di A | Produzione | Copertura decisionale | Copertura delle filiali |
1 | 2 | 2 | 50% | 33% |
2 | 6 | 18 | 50% | 67% |
Vantaggi della copertura delle filiali:
Il test di copertura delle filiali offre i seguenti vantaggi:
- Consente di convalidare tutti i rami nel codice
- Aiuta a garantire che nessun ramo ramificato porti ad alcuna anomalia del funzionamento del programma
- Il metodo di copertura delle filiali rimuove i problemi che si verificano a causa del test di copertura delle istruzioni
- Consente di trovare quelle aree che non sono state testate con altri metodi di test
- Consente di trovare una misura quantitativa della copertura del codice
- La copertura dei rami ignora i rami all'interno delle espressioni booleane
Copertura delle condizioni
La copertura delle condizioni o copertura delle espressioni è un metodo di test utilizzato per testare e valutare le variabili o le sottoespressioni nell'istruzione condizionale. L'obiettivo della copertura delle condizioni è controllare i risultati individuali per ciascuna condizione logica. La copertura delle condizioni offre una migliore sensibilità al flusso di controllo rispetto alla copertura delle decisioni. In questa trattazione, vengono prese in considerazione solo le espressioni con operandi logici.
Ad esempio, se un'espressione ha operazioni booleane come AND, OR, XOR, che indica possibilità totali.
La copertura delle condizioni non fornisce una garanzia sulla copertura completa delle decisioni.
La formula per calcolare la copertura delle condizioni:
Esempio:
Per l'espressione sopra, abbiamo 4 possibili combinazioni
- TT
- FF
- TF
- FT
Considera il seguente input
X = 3 Y = 4 |
(x |
VERO |
La copertura delle condizioni è ¼ = 25% |
A = 3 B = 4 |
(a> b) |
FALSO |
Copertura della macchina a stati finiti
La copertura della macchina a stati finiti è certamente il metodo di copertura del codice più complesso. Questo perché funziona sul comportamento del design. In questo metodo di copertura, è necessario cercare quanti stati specifici nel tempo vengono visitati, transitati. Controlla anche quante sequenze sono incluse in una macchina a stati finiti.
Quale tipo di copertura del codice scegliere
Questa è sicuramente la risposta più difficile da dare. Per selezionare un metodo di copertura, il tester deve verificare che il file
- il codice sottoposto a test presenta uno o più difetti non rilevati
- costo della potenziale sanzione
- costo della reputazione persa
- costo della vendita persa, ecc.
Maggiore è la probabilità che i difetti causino costosi guasti di produzione, più severo è il livello di copertura che è necessario scegliere.
Copertura del codice e copertura funzionale
Copertura del codice | Copertura funzionale |
La copertura del codice ti dice quanto bene il codice sorgente è stato esercitato dal tuo banco di prova. | La copertura funzionale misura quanto bene la funzionalità del design è stata coperta dal banco di prova. |
Non utilizzare mai una specifica di progettazione | Usa le specifiche di progettazione |
Fatto dagli sviluppatori | Fatto dai tester |
Strumenti di copertura del codice
Di seguito è riportato un elenco di importanti strumenti di copertura del codice:
Nome strumento | Descrizione |
Cobertura | È uno strumento di copertura del codice open source. Misura la copertura dei test strumentando una base di codice e analizza quali righe di codice sono in esecuzione e quali non vengono eseguite durante l'esecuzione della suite di test. |
Trifoglio | Clover riduce anche il tempo di test eseguendo solo i test che coprono il codice dell'applicazione che è stato modificato dalla build precedente. |
DevPartner | DevPartner consente agli sviluppatori di analizzare il codice Java per qualità e complessità del codice. |
Emma | EMMA supporta la copertura di classi, metodi, linee e blocchi di base, file di origine aggregati, classi e livelli di metodo. |
Kalistick | Kalistick è un'applicazione di terze parti che analizza i codici con diverse prospettive. |
CoView e CoAnt | Il software di codifica è uno strumento di copertura del codice per metriche, creazione di oggetti fittizi, testabilità del codice, copertura di percorsi e rami, ecc. |
Bullseye per C ++ | BulseyeCoverage è uno strumento di copertura del codice per C ++ e C. |
Sonar | Sonar è uno strumento di copertura del codice aperto che ti aiuta a gestire la qualità del codice. |
Vantaggi dell'utilizzo della copertura del codice
- Utile per valutare una misura quantitativa della copertura del codice
- Consente di creare casi di test aggiuntivi per aumentare la copertura
- Consente di trovare le aree di un programma che non vengono esercitate da una serie di casi di test
Svantaggi dell'utilizzo della copertura del codice
- Anche quando una funzione specifica non è implementata nella progettazione, la copertura del codice riporta comunque una copertura del 100%.
- Non è possibile determinare se abbiamo testato tutti i possibili valori di una funzionalità con l'aiuto della copertura del codice
- Anche la copertura del codice non dice quanto e quanto bene hai coperto la tua logica
- Nel caso in cui la funzione specificata non sia stata implementata o non sia inclusa dalla specifica, le tecniche basate sulla struttura non possono trovare quel problema.
Sommario
- La copertura del codice è una misura che descrive il grado di verifica del codice sorgente del programma
- Ti aiuta a misurare l'efficienza dell'implementazione del test
- Cinque metodi di copertura del codice sono 1.) Copertura delle dichiarazioni 2.) Copertura delle condizioni 3) Copertura delle filiali 4) Attiva / disattiva la copertura 5) Copertura FSM
- La copertura delle istruzioni implica l'esecuzione di tutte le istruzioni eseguibili nel codice sorgente almeno una volta
- La copertura delle decisioni riporta i risultati veri o falsi di ciascuna espressione booleana
- Nella copertura delle filiali, viene testato ogni risultato di un modulo di codice
- Condizionale rivelerà come vengono valutate le variabili o le sottoespressioni nell'istruzione condizionale
- La copertura della macchina a stati finiti è certamente il tipo più complesso di metodo di copertura del codice
- Per selezionare un metodo di copertura, il tester deve controllare il costo della potenziale sanzione, reputazione persa, vendita persa, ecc.
- La copertura del codice ti dice quanto bene il codice sorgente è stato esercitato dal tuo banco di prova mentre la copertura funzionale misura quanto bene è stata coperta la funzionalità del progetto
- Cobertura, JTest, Clover, Emma, Kalistick sono alcuni importanti strumenti di copertura del codice
- La copertura del codice consente di creare casi di test aggiuntivi per aumentare la copertura
- La copertura del codice non ti aiuta a determinare se abbiamo testato tutti i possibili valori di una funzione