Agora eu sei que as pessoas poderiam considerar essa pergunta duplicada ou perguntada várias vezes; nesse caso, eu apreciaria um link para perguntas relevantes com resposta à minha pergunta.
Recentemente, estive em desacordo com algumas pessoas sobre a cobertura de código. Eu tenho um grupo de pessoas que deseja que nossa equipe abandone completamente a cobertura de código com base no argumento de que 100% de cobertura não significa testes de boa qualidade e, portanto, código de boa qualidade.
Consegui recuar vendendo o argumento de que o Code Coverage me diz o que não foi testado com certeza e nos ajuda a focar nessas áreas.
(O exposto acima foi discutido de maneira semelhante em outras questões SO, como esta - /programming/695811/pitfalls-of-code-coverage )
O argumento dessas pessoas é - então a equipe reagiria criando rapidamente testes de baixa qualidade e, assim, perdendo tempo sem acrescentar qualidade significativa.
Embora eu compreenda o ponto de vista deles, estou procurando uma maneira de apresentar um caso mais robusto para a cobertura de código, introduzindo ferramentas / estruturas mais robustas que atendam a mais critérios de cobertura (Functional, Statement,Decision, Branch, Condition, State, LCSAJ, path, jump path, entry/exit, Loop, Parameter Value etc)
.
O que estou procurando é sugerir uma combinação dessas ferramentas e práticas / processos de cobertura de código para acompanhá-los, o que pode me ajudar a combater esses argumentos enquanto me sinto à vontade com minha recomendação.
Também gostaria de receber quaisquer comentários / sugestões que acompanhem, com base na sua experiência / conhecimento sobre como combater esse argumento, porque, embora subjetiva, a cobertura do código ajudou minha equipe a ter mais consciência da qualidade do código e do valor dos testes.
Edit: Para reduzir qualquer confusão sobre minha compreensão da fraqueza da cobertura típica de código, quero ressaltar que não estou me referindo a Statement Coverage
(ou linhas de código executadas) ferramentas (há muitas). De fato, aqui está um bom artigo sobre tudo o que está errado: http://www.bullseye.com/statementCoverage.html
Eu estava procurando mais do que apenas cobertura de declaração ou linha, entrando mais em vários critérios e níveis de cobertura.
Veja: http://en.wikipedia.org/wiki/Code_coverage#Coverage_criteria
A ideia é que, se uma ferramenta pode nos dizer nossa cobertura com base em vários critérios, isso se torna uma avaliação automatizada razoável da qualidade do teste. Não estou tentando dizer que a cobertura da linha é uma boa avaliação. Na verdade, essa é a premissa da minha pergunta.
Edit:
Ok, talvez eu o projetei um pouco demais, mas você entendeu. O problema é definir processos / políticas em geral em todas as equipes de maneira homogênea / consistente. E o medo é geral de que como você garante a qualidade dos testes, como você aloca tempo garantido sem ter nenhuma medida para isso. Assim, eu gosto de ter um recurso mensurável que, quando feito em backup com processos apropriados e as ferramentas certas, nos permita melhorar a qualidade do código, sabendo que o tempo não está sendo gasto com força em processos desnecessários.
EDIT: Até agora, o que tenho das respostas:
- As revisões de código devem abranger testes para garantir a qualidade dos testes
- A estratégia Test First ajuda a evitar testes escritos após o fato para simplesmente aumentar a cobertura%
- Explorando ferramentas alternativas que cobrem critérios de teste que não sejam simplesmente Declaração / Linha
- A análise do código coberto / número de bugs encontrados ajudaria a apreciar a importância da cobertura e faria uma melhor situação
- O mais importante é confiar nas informações da equipe para fazer a coisa certa e lutar por suas crenças.
- Blocos cobertos / nº de testes - discutível, mas possui algum valor
Obrigado pelas respostas impressionantes até agora. Eu realmente aprecio eles. Essa discussão é melhor do que horas de brainstorm com os poderes que existem.