Respostas:
A cobertura de código é uma medida de quantas linhas / blocos / arcos do seu código são executados enquanto os testes automatizados estão em execução.
A cobertura do código é coletada usando uma ferramenta especializada para instrumentar os binários para adicionar chamadas de rastreamento e executar um conjunto completo de testes automatizados no produto instrumentado. Uma boa ferramenta fornecerá não apenas a porcentagem do código que é executado, mas também permitirá que você faça uma busca detalhada nos dados e veja exatamente quais linhas de código foram executadas durante um teste específico.
Nossa equipe usa o Magellan - um conjunto interno de ferramentas de cobertura de código. Se você é uma loja do .NET, o Visual Studio integrou ferramentas para coletar cobertura de código. Você também pode rolar algumas ferramentas personalizadas, como este artigo descreve.
Se você é uma loja de C ++, a Intel possui algumas ferramentas executadas para Windows e Linux, embora eu não as tenha usado. Também ouvi dizer que existe a ferramenta gcov para o GCC, mas não sei nada sobre isso e não posso fornecer um link para você.
Quanto à forma como a usamos - a cobertura do código é um dos critérios de saída para cada etapa. Na verdade, temos três métricas de cobertura de código - cobertura de testes de unidade (da equipe de desenvolvimento), testes de cenário (da equipe de teste) e cobertura combinada.
BTW, embora a cobertura do código seja uma boa métrica de quantos testes você está fazendo, não é necessariamente uma boa métrica de quão bem você está testando seu produto. Existem outras métricas que você deve usar junto com a cobertura do código para garantir a qualidade.
A cobertura do código basicamente testa se o seu código é coberto por testes. Portanto, se você tiver 90% de cobertura de código, isso significa que há 10% de código que não é coberto nos testes. Eu sei que você pode estar pensando que 90% do código é coberto, mas você precisa olhar de um ângulo diferente. O que está impedindo você de obter 100% de cobertura de código?
Um bom exemplo será este:
if(customer.IsOldCustomer())
{
}
else
{
}
Agora, no código acima, existem dois caminhos / ramificações. Se você estiver sempre pressionando a ramificação "SIM", não estará cobrindo a parte else e ela será mostrada nos resultados da Cobertura de código. Isso é bom porque agora você sabe o que não é coberto e pode escrever um teste para cobrir a outra parte. Se não havia cobertura de código, você está sentado em uma bomba-relógio para explodir.
O NCover é uma boa ferramenta para medir a cobertura do código.
Lembre-se, ter "100% de cobertura de código" não significa que tudo é testado completamente - enquanto isso significa que toda linha de código é testada, não significa que eles são testados em todas as situações (comuns).
Eu usaria cobertura de código para destacar bits de código nos quais provavelmente deveria escrever testes. Por exemplo, se qualquer ferramenta de cobertura de código mostrar que myImportantFunction () não é executada durante a execução dos testes de unidade atuais, eles provavelmente deverão ser aprimorados.
Basicamente, 100% de cobertura de código não significa que seu código seja perfeito. Use-o como um guia para escrever testes mais abrangentes (unitários).
x
e retornasse x/x
e executasse o teste usando my_func (2), teria 100% de cobertura (pois o código da função será executado), mas você perdeu um grande problema quando 0 é o parâmetro. Ou seja, você não testou todos os cenários necessários, mesmo com 100% de cobertura.
Complementando alguns pontos para muitas das respostas anteriores:
A cobertura do código significa quão bem o seu conjunto de testes está cobrindo o seu código-fonte. isto é, até que ponto o código fonte é coberto pelo conjunto de casos de teste.
Como mencionado nas respostas acima, existem vários critérios de cobertura, como caminhos, condições, funções, declarações, etc. Mas critérios adicionais a serem cobertos são
Nota: A análise de código estático descobrirá se há algum código inacessível ou código suspenso, ou seja, código não coberto por nenhuma outra chamada de função. E também outra cobertura estática. Mesmo se a análise de código estático relatar que 100% do código está coberto, ele não fornecerá relatórios sobre o seu conjunto de testes se toda a cobertura possível do código for testada.
A cobertura do código foi explicada bem nas respostas anteriores. Portanto, essa é mais uma resposta para a segunda parte da pergunta.
Usamos três ferramentas para determinar a cobertura do código.
Usamos essas ferramentas para
A cobertura do código é simplesmente uma medida do código testado. Há vários critérios de cobertura que podem ser medidos, mas geralmente são os vários caminhos, condições, funções e instruções de um programa que compõem a cobertura total. A métrica de cobertura de código é apenas uma porcentagem de testes que executam cada um desses critérios de cobertura.
No que diz respeito ao acompanhamento da cobertura dos testes de unidade em meus projetos, uso ferramentas de análise de código estático para acompanhar.
Para Perl, existe o excelente módulo Devel :: Cover , que eu uso regularmente nos meus módulos.
Se a compilação e instalação são gerenciadas pelo Module :: Build, você pode simplesmente executar ./Build testcover
para obter um bom site HTML que informe a cobertura por sub, linha e condição, com cores agradáveis, facilitando a visualização de qual caminho de código não foi coberto.
Nas respostas anteriores, a cobertura do código foi bem explicada. Estou apenas adicionando algum conhecimento relacionado às ferramentas, se você estiver trabalhando em plataformas iOS
e OSX
, o Xcode fornece a facilidade para testar e monitorar a cobertura do código.
Links de referência:
https://medium.com/zendesk-engineering/code-coverage-and-xcode-6b2fb8756a51
Ambos são links úteis para aprender e explorar a cobertura do código com o Xcode.
Para PHP, você deve dar uma olhada no Github de Sebastian Bergmann
Fornece funcionalidade de coleta, processamento e renderização para informações de cobertura de código PHP.