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

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

Fizeram-me esta pergunta sobre a automatização do código de testes. Parece que, fora das ferramentas automatizadas, é mais arte do que ciência. Existem alguns exemplos no mundo real de como usar a cobertura de código?

Author: Peter Mortensen, 2008-10-12

7 answers

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 é recolhida utilizando uma ferramenta especializada para instrumentar os binários para adicionar chamadas de localização e executar um conjunto completo de testes automáticos com o produto instrumentado. Uma boa ferramenta lhe dará não só a porcentagem do código que é executado, mas também lhe permitirá perfurar os dados e ver exatamente quais linhas de código foram executado durante um determinado teste.

A nossa equipa usa Magalhães - um conjunto interno de ferramentas de cobertura de código. Se você é uma loja. net, o Visual Studio tem ferramentas integradas 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 tem algumas ferramentas que funcionam para Windows e Linux, embora eu não as tenha usado. Também ouvi dizer que há a ferramenta gcov para o GCC, mas não sei nada sobre isso e ... não te posso dar uma ligação.

Quanto à forma como usamos a cobertura de código it é 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 unitários (da equipe de desenvolvimento), testes de cenário (da equipe de teste) e cobertura combinada.

[[1]}BTW, embora a cobertura do 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 juntamente com o código cobertura para garantir a qualidade.
 168
Author: Franci Penov, 2018-07-16 19:47:44
A cobertura do Código basicamente testa a quantidade do seu código coberto por testes. Então, se você tem 90% de cobertura de código do que significa que há 10% de código que não está coberto em testes. Sei que podes estar a pensar que 90% do código está coberto, mas tens de olhar de um ângulo diferente. O que te impede de obter cobertura de código a 100%?

Um bom exemplo será este:

if(customer.IsOldCustomer()) 
{
}
else 
{
}
Agora, no código acima há dois caminhos / ramos. Se você está sempre batendo o"SIM" branch então você não está cobrindo a outra parte e será mostrado nos resultados de 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 outra parte. Se não havia 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 do Código.

 116
Author: azamsharp, 2014-12-17 21:34:33

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

Eu usaria a cobertura de código para destacar bits de código para os quais eu provavelmente deveria escrever testes. Por exemplo, se qualquer ferramenta de code-coverage mostra que minha função importante() não é executada ao executar meus testes de unidade atuais, eles provavelmente devem ser melhorados. Basicamente, 100% de cobertura de código não significa que o teu código seja perfeito. Use - o como um guia para escrever testes mais abrangentes (unit -).
 47
Author: dbr, 2008-10-12 03:24:38

Complementando alguns pontos a muitas das respostas anteriores:

Cobertura de código significa, quão bem o seu conjunto de testes está a cobrir o seu código-fonte. ou seja, em que medida é o código fonte abrangido pelo conjunto de casos de ensaio.

Como mencionado nas respostas acima, existem vários critérios de cobertura, como caminhos, condições, funções, declarações, etc. Mas os critérios adicionais a preencher são

  1. Cobertura da condição: todas as expressões booleanas a avaliar para ver se são verdadeiras e falso.
  2. cobertura da decisão: não só as expressões booleanas a serem avaliadas como verdadeiras e falsas uma vez, mas para abranger todo o organismo if-elsef-else subsequente.
  3. Cobertura Do Loop: significa que todos os loop possíveis foram executados uma vez, mais de uma vez e sem tempo. Além disso, se temos suposições sobre o limite máximo, então, se possível, testar os tempos limite máximo e, um mais do que o limite máximo.
  4. Cobertura de entrada e saída: teste para todas as chamadas possíveis e o seu valor de retorno.
  5. parâmetro Cobertura de valor (PVC). Para verificar se todos os valores possíveis para um parâmetro são testados. Por exemplo, uma string poderia ser qualquer uma dessas comumente: a) null, b) empty, c) whitespace (space, tabs, new line), d) string válida, e) string inválida, f) string de byte simples, g) string de byte duplo. A falha em testar cada valor de parâmetro possível pode deixar um bug. Testando apenas uma delas poderia resultar em cobertura de código 100% como cada linha é coberta, mas como apenas uma de sete opções são testadas, significa, apenas 14,2% cobertura do valor do parâmetro.
  6. Cobertura hereditária: no caso de fonte orientada a objectos, ao devolver um objecto derivado referido pela classe base, a cobertura para avaliar, se o objecto aparentado for devolvido, deve ser testada.

Nota: A análise de código estática verificará se existe algum código inacessível ou código de suspensão, ou seja, o código não abrangido por qualquer outra chamada de função. E também outra cobertura estática. Mesmo que a análise de código estático relate que o código 100% é coberto, ele não fornece relatórios sobre o seu conjunto de testes se toda a possível cobertura de código for testada.

 27
Author: Chand51, 2018-07-16 19:56:42

A cobertura do Código foi bem explicada nas respostas anteriores. Esta é, portanto, mais uma resposta à segunda parte da pergunta.

Usamos três ferramentas para determinar a cobertura do Código.
  1. JTest - uma ferramenta proprietária construída sobre o JUnit. (Ele gera testes unitários também.)
  2. Cobertura - uma ferramenta de cobertura de código aberto que pode ser facilmente associada a testes JUnit para gerar relatórios.
  3. - Outra ... esta que temos utilizado com um objectivo ligeiramente diferente do dos ensaios unitários. Tem sido usado para gerar relatórios de cobertura quando a aplicação web é acessada por usuários finais. Isto juntamente com ferramentas de teste web (exemplo: Canoo) pode dar-lhe relatórios de cobertura muito úteis que lhe dizem quanto código é coberto durante o uso típico do usuário final.

Usamos estas ferramentas para

  • revisão de que os programadores escreveram bons testes de unidade
  • assegurar que todo o código é percorrido durante a caixa negra teste
 12
Author: Vivek Kodira, 2018-07-16 19:53:01

A cobertura do Código é simplesmente uma medida do código que é testado. Há uma variedade de critérios de cobertura que podem ser medidos, mas tipicamente são os vários caminhos, condições, funções e declarações dentro 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 destes critérios de cobertura.

No que diz respeito à forma como sigo a cobertura do teste da unidade nos meus projectos, uso ferramentas estáticas de análise de código para manter faixa.
 5
Author: SaaS Developer, 2018-07-16 19:48:38

Para o Perl há o excelenteDevel::Cover módulo que eu uso regularmente nos meus módulos.

Se a compilação e instalação forem geridas pelo módulo::Build, você pode simplesmente executar {[[0]} para obter um site HTML agradável que lhe diz a cobertura por sub, linha e condição, com cores agradáveis, tornando mais fácil ver qual o caminho do código não foi coberto.

 4
Author: moritz, 2008-10-12 11:56:19