Non devi applicare automaticamente la copertura del codice.
Questo è come imporre le linee massime di codice per metodo: concordato, la maggior parte dei metodi dovrebbe essere inferiore a, diciamo, 20 LOC, ma ci sono casi validi in cui i metodi sarebbero più lunghi di quello.
Allo stesso modo, il targeting di una data percentuale di copertura del codice per classe può portare a conseguenze indesiderate. Ad esempio:
-
Le classi di codici o le classi di codice delle piastre di caldaia create dai generatori di codice potrebbero non essere affatto testate. Costringere gli sviluppatori a testarli non avrà alcun vantaggio e avrà un costo notevole in termini di tempo impiegato a farlo.
-
La gestione semplice del codice di parti non importanti dell'applicazione non deve necessariamente essere testata.
-
In alcune lingue, alcuni codici non possono essere testati. Ho avuto questo caso in C # con metodi anonimi su una libreria in cui ho voluto per avere una copertura del 100% del codice. Questi casi potrebbero essere demoralizzanti per gli sviluppatori.
Ancora più importante, la copertura del codice dovrebbe essere proporzionale a due aspetti del codice: quanto è critico e quanto è complicato :
-
Un pezzo di codice con una logica complicata che fa parte delle funzionalità principali di un'applicazione dovrebbe essere esaminato attentamente, perché errori o regressioni possono avere conseguenze importanti.
-
Un semplice pezzo di codice che gestisce una caratteristica che nessuno usa potrebbe avere test di base che coprono solo casi di base.
Ovviamente, puoi utilizzare la copertura del codice come misura , in particolare per confrontare il modo in cui team diversi ottengono la copertura del codice: potrebbero esserci team meno disciplinati e più riluttanti quando si tratta di test. In questi casi, potresti voler combinare questa metrica con altre, come il numero di bug, il tempo impiegato a risolvere bug o il numero di commenti durante le revisioni del codice.
Potresti anche voler applicare almeno alcuni coverage di codice, ad esempio il 60% ¹, su singoli progetti dove ha senso (fai attenzione a escludere prototipi, codice generato , CRUD, ecc.) Rendere possibile agli sviluppatori di contrassegnare classi specifiche come escluse dalla copertura del codice è anche bello². In questo caso, questo può essere fatto sotto forma di un assegno che fallisce una compilazione se la copertura del codice è inferiore al minimo richiesto. Vorrei farlo nella fase di costruzione, non nella fase di commit , poiché non è previsto l'esecuzione di test unitari durante il commit .
¹ Considererei il 60% come minimo ragionevole basato sulla mia base di codice: quasi ogni progetto o classe che ha meno del 60% di copertura del codice è veramente non testato . Questo può variare molto da una lingua all'altra e da una società all'altra (in alcune aziende lo 0% è uno standard). Assicurati di discutere con il tuo team cosa è normale e cosa è troppo alto per loro. Forse stanno colpendo costantemente il 95% e possono facilmente raggiungere il 99%, o forse hanno difficoltà ad aumentare la copertura del codice dal 70% al 75%.
² Dato che l'eventuale abuso verrà rilevato durante le revisioni del codice, non dovresti aver paura di dare questa possibilità agli sviluppatori. Questo è simile alla possibilità di escludere alcune parti del codice dai controlli dei linters o dei controllori di stile. JSLint, StyleCop e Code Analysis sono tre esempi in cui l'esclusione è supportata ed è effettivamente utile senza incoraggiare l'abuso.