testing - tools - test coverage




O que é cobertura de código e como você mede isso? (5)

O que é cobertura de código e como você mede isso?

Fiz esta pergunta sobre nossa automação de cobertura de código de teste. Parece que, fora das ferramentas automatizadas, é mais arte que ciência. Há algum exemplo real de como usar a cobertura de código?


A cobertura do código foi bem explicada nas respostas anteriores. Então, isso é mais uma resposta para a segunda parte da questão.

Nós usamos três ferramentas para determinar a cobertura de código.

  1. JTest - uma ferramenta proprietária construída sobre o JUnit. (Também gera testes de unidade.)
  2. Cobertura - uma ferramenta de cobertura de código aberto que pode ser facilmente acoplada a testes JUnit para gerar relatórios.
  3. Emma - outra - essa que usamos para um propósito um pouco diferente do teste unitário. Ele foi usado para gerar relatórios de cobertura quando o aplicativo da Web é acessado por usuários finais. Isso, juntamente com as ferramentas de teste na Web (exemplo: Canoo), pode fornecer relatórios de cobertura muito úteis, que informam quanto de código é coberto durante o uso típico do usuário final.

Nós usamos essas ferramentas para

  • Revise que os desenvolvedores escreveram bons testes de unidade
  • Assegure-se de que todo o código seja atravessado durante o teste de caixa preta

Apenas lembre-se, ter "100% de cobertura de código" não significa que tudo seja testado completamente - enquanto isso significa que cada linha de código é testada, isso não significa que eles são testados sob cada situação (comum).

Eu usaria a cobertura de código para destacar pedaços de código para os quais eu provavelmente deveria escrever testes. Por exemplo, se qualquer ferramenta de cobertura de código mostrar que myImportantFunction () não é executado durante a execução de meus testes unitários atuais, eles provavelmente devem ser aprimorados.

Basicamente, 100% de cobertura de código não significa que seu código é perfeito. Use-o como um guia para escrever testes (unit-) mais abrangentes.


Cobertura de código é uma medida de quantas linhas / blocos / arcos de seu código são executados enquanto os testes automatizados estão sendo executados.

Cobertura de 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 contra o produto instrumentado. Uma boa ferramenta lhe dará não apenas a porcentagem do código que é executado, mas também permitirá que você analise os dados e veja exatamente quais linhas de código foram executadas durante um determinado teste.

Nossa equipe usa o Magellan - um conjunto interno de ferramentas de cobertura de código. Se você é uma loja .NET, o Visual Studio tem ferramentas integradas para coletar a cobertura de código. Você também pode rolar algumas ferramentas personalizadas, como este artigo descreve.

Se você é uma loja C ++, a Intel tem algumas tools que são executadas para Windows e Linux, embora eu não as tenha usado. Eu também ouvi que há a ferramenta gcov para o GCC, mas eu não sei nada sobre isso e não posso te dar um link.

Quanto à forma como o utilizamos - a cobertura de código é um dos nossos critérios de saída para cada marco. 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 de código seja uma boa métrica de quanto teste 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 de código para garantir a qualidade.


Cobertura de código basicamente testa que quanto do seu código é coberto em testes. Portanto, se você tem 90% de cobertura de código, isso significa que há 10% de código que não é coberto por testes. Eu sei que você pode estar pensando que 90% do código é coberto, mas você tem que olhar de um ângulo diferente. O que está impedindo você de obter cobertura de código de 100%?

Um bom exemplo será este:

if(customer.IsOldCustomer()) 
{
}
else 
{
}

Agora, no código acima, existem dois caminhos / ramos. Se você estiver sempre acessando a ramificação "YES", não estará cobrindo a outra parte e ela será mostrada nos resultados da Cobertura de código. Isso é bom porque agora você sabe que o que não está coberto e você pode escrever um teste para cobrir a parte else. Se não houve cobertura de código, então você está apenas sentado em uma bomba-relógio para explodir.

NCover é uma boa ferramenta para medir a cobertura de código.


Para o Perl, há o excelente módulo Devel::Cover , que uso regularmente em meus módulos.

Se a compilação e a instalação forem gerenciadas pelo Module :: Build, você pode simplesmente executar o ./Build testcover para obter um bom site HTML que informa a cobertura por sub, linha e condição, com cores agradáveis, facilitando a visualização do caminho do código. não foi coberto.





code-coverage