Non menzioni il tuo strumento di test. Molti hanno funzioni "combinate" che consentono di aggregare i risultati di più esecuzioni o suite. Se desideri una metrica di copertura aggregata, esplora la funzione di combinazione nello strumento di copertura.
Ora, possiamo parlare dell'elefante nella stanza?
Non c'è il cucchiaio. E non esiste una "percentuale di copertura totale". Almeno nessuno semplice.
La percentuale di copertura è una metrica di facile comprensione presentata per aiutare a comprendere l'ambito, la profondità e la gamma delle suite di test. Ma come ogni semplice benchmark, è molto facile diventare target fissati su questo valore come una sorta di talismano magico di "test completi".
Supponiamo che tu abbia raggiunto la gloria della "copertura del test al 100%". Sìì! Ma cosa significa? Il 100% delle righe di codice viene testato, giusto? E che dire di questa linea?
launch_missile = launch_authorized and launch_cmd_given else previous_launch_status
"Coprire" quella linea significa qualcosa - ma non molto, perché ci sono una varietà di condizioni che sono True
o False
con qualche probabilità, ma è improbabile che tu abbia testato tutte le combinazioni di quelle condizioni. Anche se quella linea è coperta una dozzina di volte, se una delle condizioni è relativamente rara, non ti sei avvicinato al test di tutti i risultati reali che potrebbero verificarsi nella pratica. Per renderlo più chiaro, un esempio più sintetico:
engage_laser = (laser_armed and safety_disengaged) or random.random() < 0.0000003
Quante volte dovresti coprire quella linea per testarla in modo esaustivo? Quante volte dovresti coprirlo per testarlo in combinazione con tutte le altre variabili del programma (con le loro probabilità, possibilmente similmente rare)?
Non sto dicendo che le metriche di copertura siano inutili. In realtà sono fantastici . Si concentrano su uno dei problemi chiave: quanto è ampiamente testato il mio sistema software? Aiutano a passare da "abbiamo alcuni test" a "abbiamo testato a fondo".
Ma mentre stai lavorando su "punteggi combinati", la realtà è che il tuo punteggio sarà in genere per "copertura delle dichiarazioni" piuttosto che per "condizione", "predicato" o "percorso" . Quindi, qualunque sia il numero che ti danno i punteggi aggregati, è improbabile che ti dia un quadro reale di quanti stati potenziali del tuo programma e combinazioni di stati vengono testati. Mentre lavori per aumentare la percentuale di copertura, considera anche la misurazione della copertura del predicato. Ti fornirà una visione più realistica - e quasi invariabilmente, più rassicurante - dell'estensione del test.