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?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.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.
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 -).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
- Cobertura da condição: todas as expressões booleanas a avaliar para ver se são verdadeiras e falso.
- 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.
- 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.
- Cobertura de entrada e saída: teste para todas as chamadas possíveis e o seu valor de retorno.
- 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.
- 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.
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.- JTest - uma ferramenta proprietária construída sobre o JUnit. (Ele gera testes unitários também.)
- Cobertura - uma ferramenta de cobertura de código aberto que pode ser facilmente associada a testes JUnit para gerar relatórios.
- - 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
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.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.