Você não deve impor a cobertura do código automaticamente.
É como impor o máximo de linhas de código por método: concordado, a maioria dos métodos deve ser menor que, digamos, 20 LOC, mas há casos válidos em que os métodos seriam mais longos que isso.
Da mesma forma, segmentar uma determinada porcentagem de cobertura de código por classe pode levar a conseqüências indesejadas. Por exemplo:
Classes de código padrão ou classes criadas por geradores de código podem não ser testadas. Forçar os desenvolvedores a testá-los não terá nenhum benefício e terá um custo substancial em termos de tempo gasto com isso.
O código simples que manipula partes não importantes do aplicativo não precisa necessariamente ser testado.
Em alguns idiomas, algum código não pode ser testado. Eu tive esse caso em C # com métodos anônimos em uma biblioteca onde eu realmente queria ter 100% de cobertura de código. Esses casos podem ser desmoralizantes para os desenvolvedores.
Mais importante, a cobertura do código deve ser proporcional a dois aspectos do código: quão crítico e quão complicado é :
Um pedaço de código com uma lógica complicada, que faz parte do principal recurso de um aplicativo, seria melhor testado cuidadosamente, porque falhas ou regressões podem ter consequências importantes.
Um código simples que lida com um recurso que ninguém usa pode ter testes básicos que abrangem apenas casos básicos.
Obviamente, você ainda pode usar a cobertura de código como uma medida , especialmente para comparar como equipes diferentes obtêm cobertura de código: pode haver equipes menos disciplinadas e mais relutantes quando se trata de testar. Nesses casos, convém combinar essa métrica com outras, como o número de bugs, o tempo gasto na resolução de bugs ou o número de observações durante as revisões de código.
Você também pode aplicar pelo menos uma cobertura de código, digamos 60% ¹, em projetos individuais onde faz sentido (tenha cuidado para excluir protótipos, código gerado, CRUD, etc.) Possibilitando aos desenvolvedores marcar classes específicas como excluídas da cobertura do código também é bom². Nesse caso, isso pode ser feito sob a forma de uma verificação que falha na compilação se a cobertura do código estiver abaixo do mínimo necessário. Eu faria isso no estágio de construção, não no estágio de confirmação , pois não é esperado que você execute testes de unidade durante o commit .
¹ Eu consideraria 60% como um mínimo razoável, com base na minha base de código: quase todos os projetos ou classes com menos de 60% de cobertura de código são realmente não testados . Isso pode variar muito de um idioma para outro e de uma empresa para outra (em algumas empresas, 0% é um padrão). Certifique-se de discutir com sua equipe o que é normal e o que é alto demais para eles. Talvez eles estejam constantemente atingindo 95% e possam atingir 99% facilmente, ou talvez tenham dificuldade para aumentar sua cobertura de código de 70% para 75%.
² Dado que eventuais abusos serão detectados durante as revisões de código, você não deve ter medo de dar essa possibilidade aos desenvolvedores. Isso é semelhante à possibilidade de excluir algumas partes do código das verificações pelas linhas ou verificadores de estilo. JSLint, StyleCop e Code Analysis são três exemplos em que a exclusão é suportada e é realmente útil sem incentivar o abuso.