Non menzioni il tuo strumento di test. Molte hanno funzioni "combinate" che consentono di aggregare i risultati di più sessioni o suite. Se desideri una metrica di copertura aggregata, esplora la funzione di combinazione nel tuo strumento di copertura.
Ora, possiamo parlare dell'elefante nella stanza?
Non c'è un cucchiaio. E non c'è "percentuale di copertura totale". Almeno, non semplice.
La percentuale di copertura è una metrica prontamente comprensibile presentata per aiutare a comprendere la portata, la profondità e la gamma di suite di test. Ma come ogni benchmark semplice, è molto facile diventare target fissato su questo valore come una specie di talismano magico di "testing completo" ".
Supponiamo che tu abbia raggiunto la gloria di "copertura di prova del 100%". Yay! Ma cosa significa? Il 100% delle linee di codice sono testati, giusto? Allora che dire di questa linea?
launch_missile = launch_authorized and launch_cmd_given else previous_launch_status
"Coprire" quella linea significa qualcosa - ma non un intero lotto, perché ci sono una varietà di condizioni che sono True
o False
con una certa probabilità, ma è improbabile che tu abbia provato tutte le combinazioni di quelle condizioni. Anche se quella linea è coperta una dozzina di volte, se una delle condizioni è relativamente rara, non sei arrivato vicino a testare 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 copiarlo per testarlo in combinazione con tutte le altre variabili del programma (con le loro probabilità, probabilmente altrettanto rare)?
Non sto dicendo che le metriche di copertura sono inutili. In realtà sono grandi . Si concentrano su uno dei problemi chiave: quanto è stato testato il mio sistema software? Aiutano a passare da "abbiamo alcuni test" a "abbiamo accuratamente testato".
Ma mentre lavori su "punteggi combinati", la realtà è che il tuo punteggio sarà tipicamente per "copertura informativa" piuttosto di "condizione", "predicato" o copertura "percorso" . Quindi, qualunque sia il numero che i tuoi punteggi aggregati ti danno, è improbabile che ti dia un'immagine reale di quanto dei tuoi potenziali stati e combinazioni di stati del programma siano stati testati. Mentre stai lavorando per aumentare la percentuale di copertura, prendi in considerazione anche la misurazione della copertura dei tuoi predicati. Ti darà una visione più realistica - e quasi invariabile, più sobria - dell'estensione del test.