Code Strumento di copertura: test di dichiarazioni, rami e decisioni

⚡ Riepilogo intelligente

Code la copertura è una misurazione white-box che riporta il grado in cui il codice sorgente è stato esercitato da una suite di test, aiutaping I team individuano istruzioni, ramificazioni, condizioni e percorsi non testati che potrebbero nascondere difetti.

  • 🎯 Definizione: Code La copertura quantifica la quantità di codice sorgente effettivamente eseguita dai test.
  • 📊 Metodi: Esistono cinque metodi: dichiarazione, decisione, diramazione, condizione e copertura di macchine a stati finiti.
  • 🧩 Dichiarazione vs. ramo: La copertura delle dichiarazioni verifica le righe, mentre la copertura delle filiali verifica ogni risultato decisionale.
  • Code vs Funzionale: Code misure di copertura hanno applicato il codice; misure di copertura funzionale hanno coperto i requisiti.
  • Strumenti: Cobertura, OpenCloverEMMA e Sonar automatizzano la misurazione della copertura.
  • 🤖 Assistenza AI: Gli strumenti di intelligenza artificiale generano test e individuano automaticamente le lacune di copertura non testate e ad alto rischio.

Code Tutorial sulla copertura

Cosa è Code Copertura?

Code copertura è una misura che descrive il grado in cui il codice sorgente di un programma è stato testato. È una forma di test della scatola bianca che individua le aree di un programma non testate da una serie di casi di test. Aiuta inoltre a creare ulteriori casi di test per aumentare la copertura e a determinare una misura quantitativa della copertura del codice.

Nella maggior parte dei casi, un sistema di copertura del codice raccoglie informazioni sul programma in esecuzione. Successivamente, combina queste informazioni con quelle del codice sorgente per generare un report sulla copertura del codice della suite di test.

Perché usare Code Test di copertura?

Ecco alcuni motivi principali per utilizzare la copertura del codice:

  • Consente di misurare l'efficienza dell'implementazione dei test.
  • Offre una misurazione quantitativa dei test.
  • Definisce il grado in cui il codice sorgente è stato testato.

Code Metodi di copertura

Di seguito sono riportati i principali metodi di analisi della copertura del codice:

  • Dichiarazione di copertura
  • Copertura della decisione
  • Copertura delle filiali
  • Toggle Copertura
  • Copertura FSM

Dichiarazione di copertura

Dichiarazione di copertura Il test white box è una tecnica di test in cui tutte le istruzioni eseguibili del codice sorgente vengono eseguite almeno una volta. Viene utilizzato per calcolare il numero di istruzioni del codice sorgente che sono state eseguite. Lo scopo principale della copertura delle istruzioni è quello di coprire tutti i possibili percorsi, righe e istruzioni nel codice sorgente.

La copertura delle istruzioni viene utilizzata per derivare scenari basati sulla struttura del codice da testare.

Dichiarazione di copertura

Nel white box testing, il tester si concentra sul funzionamento del software. In altre parole, il tester si concentra sul funzionamento interno del codice sorgente, in particolare sui diagrammi di flusso o grafi di controllo.

Generalmente in qualsiasi software, se si guarda il codice sorgente, ci sarà un'ampia varietà di elementi come operatori, funzioni,ping, gestori di eccezioni e così via. In base all'input del programma, alcune istruzioni di codice potrebbero non essere eseguite. L'obiettivo della copertura delle istruzioni è quello di coprire tutti i possibili percorsi, righe e istruzioni nel codice.

Cerchiamo di capire meglio questo concetto con un esempio di come calcolare la copertura del rendiconto. Prendiamo in considerazione due scenari diversi per verificare la percentuale di copertura del rendiconto per ciascuno di essi.

Fonte Code:

Prints (int a, int b) {                       ------------  Printsum is a function
    int result = a + b;
    If (result > 0)
        Print ("Positive", result)
    Else
        Print ("Negative", result)
    }                                        -----------   End of the source code

Scenario 1: Se A = 3, B = 9

Scenario di copertura della dichiarazione 1

Le istruzioni evidenziate in giallo sono quelle eseguite secondo lo scenario. Numero di istruzioni eseguite = 5, numero totale di istruzioni = 7, quindi copertura delle istruzioni = 5/7 = 71%.

Scenario 2: Se A = -3, B = -9

Scenario di copertura della dichiarazione 2

Le istruzioni evidenziate in giallo sono quelle eseguite secondo lo scenario. Numero di istruzioni eseguite = 6, numero totale di istruzioni = 7, quindi copertura delle istruzioni = 6/7 = 85%.

Ma nel complesso, come potete vedere, tutte le affermazioni sono coperte da entrambi gli scenari. Possiamo quindi concludere che la copertura complessiva delle affermazioni è del 100%.

Cosa è coperto dalla copertura assicurativa?

  1. Dichiarazioni non utilizzate
  2. Dead Code
  3. Rami inutilizzati
  4. Dichiarazioni mancanti

Test di copertura delle decisioni

Copertura della decisione È una tecnica di test white box che riporta i risultati veri o falsi di ogni espressione booleana nel codice sorgente. L'obiettivo del test di copertura decisionale è quello di coprire e validare tutto il codice sorgente accessibile, verificando e garantendo che ogni ramo di ogni possibile punto decisionale venga eseguito almeno una volta.

In questo tipo di copertura, le espressioni possono diventare complesse, rendendo difficile raggiungere una copertura del 100%. Per questo motivo, vengono utilizzati diversi metodi per riportare questa metrica. Tali metodi danno priorità alle combinazioni più critiche. Pur essendo simile alla copertura dei rami, offre una maggiore sensibilità al flusso di controllo.

Test di copertura delle decisioni

Esempio di copertura decisionale

Considera il codice seguente:

Demo(int a) {
    If (a > 5)
        a = a * 3
    Print (a)
    }

Scenario 1: Il valore di a è 2. L'esito "No" della decisione se (a>5) è selezionato, quindi la copertura della decisione è del 50%.

Scenario 2: Il valore di a è 6. L'esito "Sì" della decisione se (a>5) è selezionato, quindi la copertura della decisione è del 50%.

Test Case Valore di A Uscita Copertura della decisione
1 2 2 50%
2 6 18 50%

Test di copertura delle filiali

Copertura delle filiali È un metodo di test white box in cui viene testato ogni risultato di un modulo di codice (istruzione o ciclo). Lo scopo della copertura dei rami è garantire che ogni condizione decisionale di ogni ramo venga eseguita almeno una volta. Aiuta a misurare la percentuale di segmenti di codice indipendenti e a individuare le sezioni prive di ramificazioni.

Ad esempio, se i risultati sono binari, è necessario verificare sia i risultati Vero che quelli Falsi.

La formula per calcolare la copertura delle filiali:

Formula di copertura delle filiali

Esempio di copertura delle filiali

Per comprendere la copertura dei rami, si consideri lo stesso esempio utilizzato in precedenza. La copertura dei rami prenderà in considerazione anche il ramo incondizionato.

Test Case Valore di A Uscita Copertura della decisione Copertura delle filiali
1 2 2 50% 33%
2 6 18 50% 67%

Vantaggi della copertura delle filiali:

  • Consente di convalidare tutti i rami del codice.
  • Ti aiuta a garantire che nessun ramo porti ad anomalie nel funzionamento del programma.
  • Risolve i problemi che si verificano a causa dei test di copertura delle istruzioni.
  • Consente di individuare aree non testate con altri metodi di verifica.
  • Consente di trovare una misura quantitativa della copertura del codice.
  • La copertura dei rami ignora i rami all'interno delle espressioni booleane.

Test di copertura delle condizioni

Copertura delle condizioniLa copertura delle condizioni, o copertura delle espressioni, è un metodo di test utilizzato per testare e valutare le variabili o le sottoespressioni in un'istruzione condizionale. L'obiettivo della copertura delle condizioni è verificare i singoli risultati per ogni condizione logica. La copertura delle condizioni offre una maggiore sensibilità al flusso di controllo rispetto alla copertura delle decisioni. In questo tipo di copertura, vengono considerate solo le espressioni con operandi logici.

Ad esempio, se un'espressione contiene operazioni booleane come AND, OR o XOR, ciò indica il numero totale di possibilità. La copertura delle condizioni non garantisce la copertura completa delle decisioni.

La formula per calcolare la copertura delle condizioni:

Formula di copertura delle condizioni

Per un'espressione con due operandi, ci sono quattro possibili combinazioni: TT, FF, TF e FT. Considera l'input X=3, Y=4 (x b) FALSO, il che dà una copertura delle condizioni pari a 1/4 = 25%.

Copertura della macchina a stati finiti

La copertura del codice basata su macchine a stati finiti è senza dubbio il metodo di copertura più complesso. Questo perché si concentra sul comportamento del progetto. In questo metodo di copertura, è necessario analizzare quante volte vengono visitati o transitati specifici stati. Verifica inoltre quante sequenze sono incluse in una macchina a stati finiti.

Quale tipo di Code Copertura tra cui scegliere

Questa è sicuramente la risposta più difficile da dare. Per selezionare un metodo di copertura, il tester deve verificare se:

  • Il codice in fase di test presenta uno o più difetti non ancora scoperti,
  • costo della potenziale sanzione,
  • costo della reputazione perduta,
  • costo delle vendite perse e così via.

Maggiore è la probabilità che i difetti causino costosi guasti alla produzione, più severo sarà il livello di copertura da scegliere.

Code Copertura vs. copertura funzionale

Code Copertura Copertura funzionale
Indica quanto bene il codice sorgente è stato testato dal tuo banco di prova. Misura il grado di copertura delle funzionalità del progetto da parte del banco di prova.
Non utilizza mai una specifica di progettazione. Utilizza una specifica di progettazione.
Fatto dagli sviluppatori. Fatto dai tester.

Code Strumenti di copertura

Ecco un elenco di importanti strumenti per l'analisi della copertura del codice:

Nome strumento Descrizione
Cobertura Uno strumento open source per la copertura del codice. Misura la copertura dei test strumentando una base di codice e analizzando quali righe di codice vengono eseguite e quali no durante l'esecuzione della suite di test.
Trifoglio Trifoglio (OpenCloverriduce inoltre i tempi di test eseguendo solo i test che coprono il codice dell'applicazione modificato dall'ultima build.
Partner di sviluppo DevPartner consente agli sviluppatori di analizzare Java codice per la qualità e la complessità del codice.
Emma EMMA supporta la copertura di classi, metodi, righe e blocchi di codice di base, aggregata a livello di file sorgente, classe e metodo.
Kalistick Kalistick è un'applicazione di terze parti che analizza il codice da diverse prospettive.
CoView e CoAnt Uno strumento di copertura del codice per metriche, creazione di oggetti mock, testabilità del codice, copertura di percorsi e rami e altro ancora.
Bullseye per C++ BullseyeCoverage è uno strumento di copertura del codice per C++ e C.
Sonar Sonar è uno strumento open source per l'analisi della copertura del codice che ti aiuta a gestire la qualità del codice.

Vantaggi e svantaggi dell'utilizzo Code Copertura

Vantaggi Svantaggi
Utile per valutare una misura quantitativa della copertura del codice. Anche quando una specifica funzionalità non è implementata nella progettazione, la copertura del codice riporta comunque una copertura del 100%.
Consente di creare casi di test aggiuntivi per aumentare la copertura. Non è possibile determinare se tutti i possibili valori di una funzionalità siano stati testati utilizzando la copertura del codice.
Consente di individuare le aree di un programma non testate da una serie di casi di prova. Code La copertura non indica quanto e con quanta accuratezza hai coperto la tua logica.

DOMANDE FREQUENTI

Molti team considerano il 70-80% come obiettivo realistico. Raggiungere il 100% è raramente conveniente. Concentrati sulla copertura della logica critica e ad alto rischio, piuttosto che inseguire un singolo numero sull'intero codice sorgente.

No. Una copertura completa dimostra che ogni riga di codice è stata eseguita, non che ogni input, valore o requisito sia stato validato. Errori logici e funzionalità mancanti possono comunque passare inosservati, quindi la copertura integra, anziché sostituire, una buona progettazione dei test.

Code La copertura misura quanto codice sorgente viene eseguito durante i test. La copertura dei test è più ampia, tracmisura quanto bene i test rispondono ai requisiti, alle funzionalità e ai rischi. Code La copertura è uno degli elementi che contribuiscono alla copertura complessiva dei test.

No. È possibile raggiungere una copertura del 100% delle istruzioni lasciando dei rami non testati, come ad esempio un percorso else mancante. La copertura dei rami (decisioni) è più robusta perché include la copertura delle istruzioni ed esamina ogni possibile risultato.

L'IA analizza il codice sorgente e i test esistenti per individuare percorsi non testati e ad alto rischio, quindi suggerisce o genera nuovi casi. L'apprendimento automatico inoltre dà priorità ai test da eseguire, abbreviando il feedback mantenendoping elevata copertura.

Sì. Strumenti di intelligenza artificiale come Diffblue Cover analizzano il codice e scrivono autonomamente test unitari per la logica non coperta. Si concentrano su rami e condizioni a rischio, aumentando la copertura con uno sforzo manuale notevolmente ridotto.

OpenClover Misura la copertura di istruzioni, rami e metodi e raccoglie oltre 20 metriche. Cobertura, EMMA e JaCoCo ci sono altre opzioni gratuite ampiamente utilizzate per Java

La copertura modificata delle condizioni/decisioni richiede che ogni condizione in una decisione influenzi in modo indipendente il risultato. È più rigorosa della copertura dei rami ed è obbligatoria per i software critici per la sicurezza, come l'avionica, secondo lo standard DO-178C.

Riassumi questo post con: