Copertura dei test nel testing del software: come misurarla

โšก Riepilogo intelligente

La copertura dei test nel testing del software misura la quantitร  di un'applicazione effettivamente testata da un insieme di test. Rivela requisiti, percorsi del codice e rischi non testati, consentendo ai team di aggiungere casi mirati e rilasciare con una sicurezza misurabile.

  • ๐ŸŽฏ Definizione: La copertura dei test riporta quali requisiti, funzionalitร  e percorsi di codice sono giร  testati dai test esistenti.
  • ๐Ÿงญ tipi: Dichiarazione, ramo, condizione, percorso, requisiti e copertura del rischio rispondono ciascuno a una domanda diversa.
  • ๏ธ Code vs Test: Code La copertura misura le righe di codice sorgente eseguite, mentre la copertura dei test misura l'intero piano di test.
  • ๐Ÿงฎ Formula: Dividi il numero di righe eseguite per il numero totale di righe, quindi moltiplica per 100 per ottenere la percentuale.
  • ๏ธ tecniche: L'analisi dei valori limite, le tabelle decisionali e i test di transizione di stato ampliano la copertura senza aumentare eccessivamente il numero di strumenti necessari.
  • ๐Ÿ“ˆ Ottimizzazione: Classifica i moduli in base al rischio, automatizza la suite di regressione e rivedi l'andamento della copertura a ogni sprint.
  • ๐Ÿค– Assistenza AI: Gli strumenti di intelligenza artificiale generano test unitari mancanti e classificano i percorsi non testati in base al rischio di produzione.

Cos'รจ la copertura del test?

La copertura del test รจ definita come una metrica nel test del software che misura la quantitร  di test eseguiti da una serie di test. Comprenderร  la raccolta di informazioni su quali parti di un programma vengono eseguite durante l'esecuzione della suite di test per determinare quali rami delle istruzioni condizionali sono stati presi.

In termini semplici, รจ una tecnica per garantire che i test stiano testando il tuo codice o la quantitร  di codice che hai esercitato eseguendo il test.

A cosa serve la copertura dei test?

In un progetto reale, la copertura dei test supporta quattro attivitร  pratiche:

  • Trovare l'area di un requisito non implementato da una serie di casi di test
  • Aiuta a creare casi di test aggiuntivi per aumentare la copertura
  • Identificare una misura quantitativa della copertura del test, che รจ un metodo indiretto per il controllo di qualitร 
  • Identificare casi di test privi di significato che non aumentano la copertura

Vantaggi della copertura dei test nell'ingegneria del software

Tali attivitร  si traducono in vantaggi ingegneristici concreti.

  • Puรฒ garantire la qualitร  del test
  • Puรฒ aiutare a identificare quali parti del codice sono state effettivamente toccate per il rilascio o la correzione
  • Puรฒ individuare tutti i punti decisionali e i percorsi nella tua applicazione che non sono stati testati, consentendoti di aumentare la copertura dei test.
  • Prevenire difetto dispersione
  • Tempi, portata e costi possono essere tenuti sotto controllo
  • Prevenzione dei difetti nelle fasi iniziali del ciclo di vita del progetto
  • Le lacune nei requisiti, nei casi di test e nei difetti a livello di unitร  e di codice possono essere trovate in modo semplice

Tipi di copertura dei test

La copertura non รจ mai un singolo numero. Squadre tracEsistono diversi tipi contemporaneamente, perchรฉ ognuno risponde a una domanda diversa sulla stessa suite. La tabella seguente raggruppa i tipi che si incontrano piรน spesso.

Tipo di copertura Cosa misura migliori Usato per
Copertura della dichiarazione (linea) Le righe eseguibili vengono eseguite almeno una volta Test unitari e audit del codice legacy
Copertura della filiale o della decisione Esito vero o falso di ogni decisione Logica condizionale e di validazione
Copertura delle condizioni Ogni sottoespressione booleana come vera e come falsa Espressioni composte AND o OR
Copertura del percorso Percorsi unici intrapresi attraverso un modulo Flussi finanziari e di sicurezza critici
Copertura funzionale Funzioni o metodi richiamati dai test API e livelli di servizio
Copertura dei requisiti Requisiti mappati ad almeno un test Accettazione e consensotracfirma finale
Copertura del rischio Sono state individuate le aree ad alto rischio in cui รจ stata effettuata un'esercitazione. Cicli di rilascio brevi

I primi cinque tipi sono misure a livello di codice e appartengono a test della scatola bianca, mentre i requisiti e la copertura del rischio si collocano a livello del piano di test.

Quali sono le principali differenze tra Code Copertura e copertura dei test?

Code copertura e la copertura dei test sono tecniche di misurazione che consentono di valutare la qualitร  del codice dell'applicazione.

Ecco alcune differenze critiche tra le cabine di questi metodi di copertura:

Scheda Sintetica Code Copertura Copertura del test
Definizione Code Il termine "copertura" viene utilizzato quando il codice dell'applicazione viene eseguito durante l'esecuzione dell'applicazione stessa. Per copertura del test si intende il piano di test complessivo.
Goal Code Le metriche di copertura possono aiutare il team a monitorare i propri test automatizzati. La copertura del test fornisce dettagli sul livello a cui รจ stata testata la codifica scritta di un'applicazione.
Sottotipi Code copertura suddivisa in sottotipi come copertura delle dichiarazioni, copertura delle condizioni, copertura delle filiali, Togglcopertura e, copertura FSM. Nessun sottotipo di metodo di copertura del test.

Formula di copertura del test

Per calcolare la copertura del test, รจ necessario seguire i passaggi indicati di seguito:

Passo 1) Contare Y, il numero totale di righe di codice nel pezzo di software che stai utilizzando analisi

Passo 2) Contare X, il numero di righe di codice eseguite attualmente da tutti i casi di test

Ora devi trovare (X diviso per Y) moltiplicato per 100. Il risultato di questo calcolo รจ la percentuale di copertura del test.

Per esempio:

Se il numero di righe di codice in un componente di sistema รจ 500 e il numero di righe eseguite in tutti i casi di test esistenti รจ 50, allora la copertura dei test รจ:

(50 / 500) * 100 = 10%   // executed lines divided by total lines

Esempi di copertura del test

La percentuale da sola non racconta mai tutta la storia, come dimostrano gli esempi seguenti.

Esempio 1:

Ad esempio, se l'oggetto da testare รจ un "coltello", รจ necessario concentrarsi sulla sua capacitร  di tagliare frutta e verdura con precisione. Tuttavia, ci sono anche altri aspetti da considerare, come la comoditร  d'uso per l'utente.

Esempio 2:

Ad esempio, se si desidera testare l'applicazione Blocco note, verificarne le funzionalitร  essenziali รจ fondamentale. Tuttavia, รจ necessario considerare anche altri aspetti, come il corretto funzionamento dell'applicazione Blocco note durante l'utilizzo di altre applicazioni, la facilitร  d'uso da parte dell'utente, il corretto funzionamento in caso di blocchi o arresti anomali dovuti a manovre insolite, ecc.

Tecniche di copertura dei test

Entrambi gli esempi portano alla stessa conclusione: raggiungere un obiettivo di copertura dipende meno dallo scrivere piรน test e piรน dallo scegliere la giusta tecnica di progettazione dei test. Le tecniche seguenti ampliano la copertura mantenendoping la suite รจ piccola.

  • Analisi dei valori limite: Seleziona gli input ai margini di ciascun intervallo valido, dove i difetti si concentrano maggiormente. Vedi analisi del valore limite per i casi trattati.
  • Partizionamento di equivalenza: Raggruppa gli input che l'applicazione tratta in modo identico, in modo che un singolo caso possa rappresentare in modo sicuro un'intera classe di valori.
  • Test della tabella decisionale: Rappresenta combinazioni di condizioni e i relativi risultati attesi all'interno di un'unica griglia.
  • Test di transizione di stato: Esercita ogni movimento valido e non valido tra gli stati dell'applicazione.
  • Test del percorso di base: Ricava l'insieme minimo di percorsi indipendenti dal grafo del flusso di controllo.
  • Test basati sul rischio: Classifica le funzionalitร  in base all'impatto sul business, dando prioritร  a quelle a piรน alto rischio.
  • Test esplorativi: Svela lacune che i casi preconfezionati e i report di copertura mediatica non rivelano mai.

Come si puรฒ raggiungere una copertura adeguata dei test?

Una volta scelte le tecniche, quattro percorsi consolidati garantiscono la copertura.

  • La copertura dei test puรฒ essere effettuata esercitando tecniche di revisione statica come revisioni tra pari, ispezioni e procedure dettagliate
  • Trasformando i difetti ad hoc in casi di test eseguibili
  • A livello di codice o di test unitario, la copertura del test puรฒ essere ottenuta avvalendosi degli strumenti automatizzati di copertura del codice o di test unitario
  • La copertura dei test funzionali puรฒ essere effettuata con l'aiuto di strumenti di gestione dei test adeguati

Come migliorare la copertura dei test

Stabilire la copertura รจ il punto di partenza; aumentarla รจ una procedura ripetibile. Seguite questa sequenza all'inizio di ogni ciclo di rilascio.

  1. Stabilire il valore di riferimento attuale. Esegui un report di copertura e registra separatamente la copertura di dichiarazioni, rami e requisiti, in modo che le lacune rimangano visibili per ciascun modulo anzichรฉ essere nascoste all'interno di una media a livello di progetto.
  2. Mappare i test ai requisiti. Costruire un tracGriglia di fattibilitร  che collega ogni requisito ad almeno un caso di test. Ogni riga vuota indica una lacuna confermata, non un sospetto.
  3. Classifica i moduli in base al rischio. La logica relativa a pagamenti, autenticazione e migrazione dei dati merita una trattazione molto piรน approfondita di una schermata di aiuto statica, quindi investite il budget dove un eventuale errore avrebbe le conseguenze piรน gravi.
  4. Aggiungere i casi negativi e i casi limite. Input vuoti, valori sovradimensionati, timeout di rete ed errori di autorizzazione raggiungono rami che i test di percorso normale non toccano mai.
  5. Sovrapponi i livelli di test. Combinare unit test, test d'integrazionee controlli end-to-end, perchรฉ ogni livello copre ciรฒ che gli altri, per loro natura, non possono coprire.
  6. Automatizzare la suite di test di regressione. Promoi casi stabili in test di automazione e eseguirli all'interno del Conduttura CI/CD dopo ogni commit.
  7. Ritirare i casi ridondanti. Elimina i test duplicati che aggiungono minuti di esecuzione senza aggiungere una singola riga di codice non coperta.
  8. RevOsserva l'andamento ad ogni sprint. Traccoperture k accanto a densitร  dei difettiUn aumento delle perdite di segnale a fronte di una copertura uniforme รจ un segnale precoce di un punto cieco.

โš ๏ธ Attenzione: Non bisogna considerare il 100% come obiettivo. Una suite di controlli all'85% con asserzioni solide protegge una release molto meglio di un 95% di controlli superficiali che eseguono codice senza verificarne il risultato.

Svantaggi della copertura dei test

La copertura rimane preziosa, ma presenta dei limiti che รจ opportuno menzionare prima di riportare qualsiasi percentuale.

  • La maggior parte delle attivitร  nella copertura del test sono manuali poichรฉ non sono presenti strumenti da automatizzare. Pertanto, รจ necessario un grande impegno per analizzare i requisiti e creare casi di test.
  • La copertura del test consente di contare le funzionalitร  e quindi di effettuare misurazioni rispetto a diversi test. Tuttavia cโ€™รจ sempre spazio per errori di giudizio.

DOMANDE FREQUENTI

La maggior parte dei team considera il 70-80% come obiettivo realistico, e il 90% o superiore per i moduli critici per la sicurezza. Puntare al 100% raramente ripaga lo sforzo. รˆ preferibile dare prioritร  alla profonditร  dei test sulla logica ad alto rischio piuttosto che distribuire i test in modo uniforme su tutto il codice.

No. Una copertura completa dimostra che ogni elemento รจ stato eseguito, non che ogni valore, requisito o percorso utente sia stato convalidato. Requisiti mancanti, asserzioni deboli e difetti non funzionali come tempi di risposta lenti sfuggono comunque a una suite che dichiara una copertura del 100%.

Un report di copertura elenca le linee, i rami e le funzioni coperte e non coperte per file, con le percentuali aggregate per modulo e progetto. Strumenti come JaCoCo Segnala anche i rami parzialmente coperti, che di solito sono quelli che si chiudono piรน velocemente.

L'intelligenza artificiale analizza il codice sorgente, la cronologia di esecuzione e i dati relativi ai difetti per individuare percorsi ad alto rischio non testati, quindi propone soluzioni per risolverli. Inoltre, stabilisce l'ordine di esecuzione dei test, abbreviando i tempi di feedback nella pipeline senza compromettere la copertura.

Sรฌ. Strumenti come Diffblue I modelli generativi scrivono automaticamente test unitari per la logica non coperta e trasformano i requisiti in linguaggio naturale in casi eseguibili. La revisione umana rimane essenziale, perchรฉ le asserzioni generate possono essere superate senza verificare il comportamento effettivo.

Riassumi questo post con: