Close

Cos'è la code coverage?

In questo articolo, imparerai come iniziare a usare la code coverage, trovare lo strumento giusto e come calcolarla.

Primo piano di Sten Pittet
Sten Pittet

Scrittore collaboratore


La code coverage è una metrica in grado di aiutarti a capire quanto della tua origine viene testata. È una metrica molto utile per valutare la qualità della tua suite di test e qui vedremo come iniziare con i tuoi progetti.

Come viene calcolata la code coverage


Gli strumenti di code coverage utilizzeranno uno o più criteri per determinare in che modo il tuo codice è stato utilizzato o meno durante l'esecuzione della tua suite di test. Le metriche comuni che potresti vedere menzionate nei tuoi rapporti di code coverage includono:

  • Copertura delle funzioni: quante delle funzioni definite sono state richiamate.
  • Copertura delle istruzioni: quante istruzioni del programma sono state eseguite.
  • Copertura dei branch: quanti branch delle strutture di controllo (istruzioni if, ad esempio) sono stati eseguiti.
  • Copertura delle condizioni: quante sottoespressioni booleane sono state testate per un valore true e uno false.
  • Code coverage della riga: quante righe di codice sorgente sono state testate.

Queste metriche sono generalmente rappresentate dal numero di articoli effettivamente testati, dagli articoli trovati nel tuo codice e da una percentuale di code coverage (articoli testati/articoli trovati).

Queste metriche sono correlate, ma distinte. Nel semplice script qui sotto, abbiamo una funzione Javascript che controlla se un argomento è un multiplo di 10. Useremo quella funzione in seguito per verificare se 100 è un multiplo di 10. Aiuterà a capire la differenza tra la copertura delle funzioni e la copertura dei branch.

Scopri la soluzione

Compilare e gestire software con Open DevOps

Materiale correlato

Test automatizzati in DevOps

coverage-tutorial.js

function isMultipleOf10(x) {   if (x % 10 == 0)     return true;   else    return false; }   console.log(isMultipleOf10(100));


Possiamo usare lo strumento di code coverage istanbul per vedere quanta parte del nostro codice viene eseguita con questo script. Dopo aver eseguito lo strumento di code coverage, riceviamo un report che mostra le nostre metriche di copertura. Possiamo vedere che mentre la nostra Copertura delle funzioni è del 100%, la Copertura del branch è solo del 50%. Possiamo anche vedere che lo strumento di code coverage istanbul non sta calcolando una metrica di Copertura delle condizioni.

Ottenere un report di copertura nella riga di comando

Questo perché quando eseguiamo il nostro script, l'istruzione else non è stata eseguita. Se volessimo ottenere una code coverage del 100%, potremmo semplicemente aggiungere un'altra riga, essenzialmente un altro test, per assicurarci che vengano utilizzati tutti i rami dell'istruzione if.

coverage-tutorial.js

function isMultipleOf10(x) {   if (x % 10 == 0)     return true;   else     return false; }   console.log(isMultipleOf10(100)); console.log(isMultipleOf10(34)); // This will make our code execute the "return false;" statement.  

Una seconda esecuzione del nostro strumento di code coverage mostrerà ora che il 100% dell'origine è coperta grazie alle nostre due istruzioni console.log() in fondo.

Ottenere una copertura del 100% in tutti i criteri

In questo esempio, stavamo solo registrando i risultati nel terminale, ma lo stesso principio si applica quando esegui la suite di test. Il tuo strumento di code coverage monitorerà l'esecuzione della tua suite di test e ti dirà quante istruzioni, branch, funzioni e righe sono stati eseguiti nell'ambito dei test.

istanbul per Javascript può mostrarti un report dettagliato sulla copertura per ogni percorso

Code coverage: 6 suggerimenti per iniziare


1. Trova lo strumento giusto per il tuo progetto

Potresti trovare diverse opzioni per creare rapporti sulla code coverage a seconda dei linguaggi utilizzati. Alcuni degli strumenti più diffusi sono elencati di seguito:

Un confronto tra gli strumenti può anche aiutarti a prendere la tua decisione. Alcuni strumenti come istanbul invieranno i risultati direttamente nel tuo terminale, mentre altri possono generare un report HTML completo che ti consentirà di esplorare quali parti del codice non sono coperte.

2. A quale percentuale di code coverage dovresti puntare?

Non esiste una soluzione ottimale nella code coverage e una percentuale elevata di code coverage potrebbe essere problematica se le parti critiche dell'applicazione non venissero testate o se i test esistenti non fossero sufficientemente solidi da rilevare correttamente gli errori in anticipo. Detto questo, in genere si stima che una code coverage dell'80% sia un buon obiettivo a cui puntare. Cercare di raggiungere una copertura più elevata potrebbe rivelarsi costoso e non necessariamente risultare più vantaggiosa.

Al primo utilizzo del tuo strumento di code coverage potresti scoprire di avere una percentuale di copertura piuttosto bassa. Se hai appena iniziato con i test, è una situazione normale e non dovresti sentire la pressione di raggiungere subito una copertura dell'80%. Il motivo è che il raggiungimento di un obiettivo di copertura potrebbe portare il tuo team a scrivere test per ogni riga di codice, invece di scrivere test basati sui requisiti aziendali della tua applicazione.

Ad esempio, nell'esempio sopra riportato abbiamo raggiunto una copertura del 100% testando se 100 e 34 erano multipli di 10. E se chiamassimo la nostra funzione con una lettera anziché un numero? Dovremmo ottenere un risultato vero/falso? O dovremmo ottenere un'eccezione? È importante che il tuo team abbia il tempo necessario per pensare ai test dal punto di vista dell'utente e non solo esaminando le righe di codice. La code coverage non ti dirà se ti mancano elementi nella tua origine.

3. Inizia dagli unit test

Gli unit test verificano che i singoli metodi delle classi e dei componenti utilizzati dalla tua applicazione funzionino. Sono generalmente economici da implementare e veloci da eseguire e garantiscono che la base della piattaforma sia solida. Un modo semplice per aumentare rapidamente la code coverage è iniziare aggiungendo unit test poiché, per definizione, dovrebbero aiutarti ad assicurarti che la tua suite di test raggiunga tutte le righe di codice.

4. Usa i report sulla copertura per identificare errori critici nei test

Presto avrai così tanti test nel tuo codice che ti sarà impossibile sapere quale parte dell'applicazione venga controllata durante l'esecuzione della tua suite di test. Saprai cosa non funziona in presenza di una build rossa, ma sarà difficile capire quali componenti hanno superato i test.

È qui che i rapporti di code coverage possono fornire indicazioni pratiche per il tuo team. La maggior parte degli strumenti ti consentirà di esaminare i rapporti di code coverage per vedere gli elementi effettivi non ancora coperti dai test e quindi di utilizzarli per identificare le parti critiche della tua applicazione ancora da testare.

SimpleCov per Ruby può mostrarti quali metodi non sono stati testati

5. Integra la code coverage nel flusso di continuous integration al momento più opportuno

Una volta stabilito il tuo flusso di lavoro di continuous integration (CI), i test potranno iniziare a non riuscire se non raggiungi una percentuale di copertura sufficientemente alta. Ovviamente, come abbiamo detto prima, sarebbe irragionevole impostare una soglia di errore troppo alta e una copertura del 90% comporterebbe molte convalide della build non riuscite. Se il tuo obiettivo è una copertura dell'80%, potresti prendere in considerazione di impostare una soglia di errore al 70% come rete di sicurezza per la tua cultura di CI.

Ancora una volta, fai attenzione a evitare di inviare il messaggio sbagliato, poiché fare pressione sul tuo team per raggiungere una buona copertura potrebbe portare a pratiche di test controproducenti.

6. Una buona copertura non è sinonimo di test ottimali

Una cultura dei test ottimale inizia facendo capire al tuo team come dovrebbe comportarsi l'applicazione quando gli utenti la usano correttamente, ma anche quando commettono errori. Gli strumenti di code coverage possono aiutarti a capire dove concentrare la tua attenzione successivamente, ma non ti diranno se i tuoi test esistenti sono sufficientemente solidi per far fronte a comportamenti imprevisti.

Raggiungere un'ottima copertura è un obiettivo eccellente, ma dovrebbe essere abbinato a una solida suite di test in grado di garantire che le singole classi non restituiscano errori e di verificare l'integrità del sistema.

Puoi scoprire di più sui diversi tipi di test del software qui. Open DevOps di Atlassian fornisce una piattaforma di toolchain aperta che ti consente di creare una pipeline di sviluppo basata su CD con gli strumenti che preferisci. Dai un'occhiata ai nostri tutorial sui test DevOps per scoprire come Atlassian e gli strumenti di terze parti possono integrare i test nel tuo flusso di lavoro.

Sten Pittet
Sten Pittet

Lavoro nel settore del software da 10 anni, ricoprendo vari ruoli, dallo sviluppo alla gestione del prodotto. Dopo aver trascorso gli ultimi 5 anni in Atlassian a aver lavorato sugli strumenti per gli sviluppatori, ora scrivo sulla creazione di software. Al di fuori del lavoro sto affinando le mie capacità paterne con un bambino meraviglioso.


Condividi l'articolo

Letture consigliate

Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.

Illustrazione su Devops

Community DevOps

Illustrazione su Devops

Leggi il blog

Illustrazione di una mappa

Inizia gratis

Iscriviti alla nostra newsletter DevOps

Thank you for signing up

Prossimo contenuto
Continuous deployment