Pergunta

O que é a cobertura de código e como se mede isso?

me pediram esta pergunta sobre a nossa cobertura automatizar código de teste. Parece ser que, fora de ferramentas automatizadas, é mais arte do que ciência. Existem exemplos do mundo real de como usar a cobertura de código?

Foi útil?

Solução

A cobertura de código é uma medida de quantas linhas / blocos / arcos de seu código são executados enquanto os testes automatizados estão em execução.

cobertura

Código é coletado usando uma ferramenta especializada para o instrumento os binários para adicionar chamadas de rastreamento e executar um conjunto completo de testes automatizados contra o produto instrumentada. Uma boa ferramenta lhe dará não só a porcentagem do código que é executado, mas também irá permitir que você furar os dados e ver exatamente quais linhas de código foram executados durante um teste particular.

Os nossos usos da equipe Magellan - um conjunto de in-house de ferramentas de cobertura de código . Se você é uma loja NET, Visual Studio tem ferramentas para cobertura de código coleta integrado. Você também pode rolar algumas ferramentas personalizadas, como este artigo descreve.

Se você é uma loja C ++, a Intel tem algum ferramentas que correm para Windows e Linux, embora eu não tê-los usado. Eu também ouvi que há a ferramenta gcov para o GCC, mas eu não sei nada sobre isso e não pode dar-lhe um link.

Quanto à forma como a usamos - código de cobertura é um dos nossos critérios de saída para cada etapa. Temos realmente métricas de cobertura de três código - cobertura de testes de unidade (da equipe de desenvolvimento), testes de cenários (da equipe de teste) e cobertura combinada

.

BTW, enquanto a cobertura de código é uma boa métrica de quanto o teste que você está fazendo, não é necessariamente uma boa métrica de quão bem você está testando seu produto. Há outras métricas que você deve usar, juntamente com cobertura de código para garantir a qualidade.

Outras dicas

A cobertura de código testa, basicamente, que o quanto do seu código está coberto por testes. Então, se você tem a cobertura de código de 90% do que significa que há 10% de código que não está coberto pela 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 é que você parar para obter a cobertura de código 100%?

Um bom exemplo será o seguinte:

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

Agora, no código acima, existem dois caminhos / filiais. Se você está sempre batendo o ramo "SIM", então você não está cobrindo a parte mais e ele será mostrado nos resultados de cobertura de código. Isso é bom porque agora você sabe que o que não é coberto e você pode escrever um teste para cobrir a parte mais. Se não existir cobertura de código, em seguida, você está apenas sentado em uma bomba-relógio explodir.

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

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

Gostaria de usar de cobertura de código em pedaços destaque de código que eu provavelmente deveria escrever testes para. Por exemplo, se qualquer código-cobertura de shows de ferramentas myImportantFunction () não é executado durante a execução de meus atuais unidades-testes, eles provavelmente deve ser melhorado.

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

Complementando alguns pontos a muitas das respostas anteriores:

código significa cobertura, quão bem o seu conjunto de teste está cobrindo seu código-fonte. ou seja, até que ponto está o código-fonte coberta pelo conjunto de casos de teste.

Como mencionado em respostas acima, existem vários critérios de cobertura, como caminhos, condições, funções, declarações, etc., mas critérios adicionais a serem abordados são

    cobertura
  1. Condição:. Todas as expressões booleanas para ser avaliado para o verdadeiro eo falso
  2. cobertura de decisão:. Não apenas boolean expressões a serem avaliados para verdadeiro e falso uma vez, mas para cobrir todos corpo posterior se-elseif-else
  3. Curva Cobertura: meios, tem todo o circuito possível sido executado uma vez, mais de uma vez e tempo zero. Além disso, se tivermos hipótese de limite máximo, então, se os tempos viável, teste de limite máximo e, um a mais que tempos limite máximo.
  4. Entrada e Saída Cobertura:. Teste para todas as chamadas possíveis e seu valor de retorno
  5. Parâmetro Valor de Cobertura (PVC). Para verificar se todos os valores possíveis para um parâmetro são testados. Por exemplo, uma cadeia pode ser qualquer um destes geralmente: a) nula, b) esvaziar, c) o espaço em branco (espaço, as abas, nova linha), d) de cadeia válida, e) cadeia inválida, f) de byte único cadeia, g ) cadeia de dois bytes. Não testar cada possível valor do parâmetro pode deixar um bug. Testando apenas um deles poderia resultar em cobertura de código 100% como cada linha é coberto, mas como apenas uma das sete opções são testados, os meios, apenas uma cobertura de 14,2% do valor do parâmetro.
  6. Inheritance Cobertura: Em caso de fonte orientada a objeto, ao retornar um objeto derivado referido pelo classe base, a cobertura para avaliar, se o objeto irmão é devolvido, deve ser testado
  7. .

Nota: Análise estática de código vai encontrar, se houver algum código inacessível ou código de suspensão, código ou seja, não abrangidos por qualquer outra chamada de função. E também outra cobertura estática. Mesmo se relatórios de análise estática de código que o código 100% é coberto, não dar relatórios sobre o seu conjunto de teste se tudo cobertura de código possível é testada.

A cobertura de código foi explicado bem nas respostas anteriores. Portanto, esta é mais uma resposta à segunda parte da pergunta.

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

  1. Jtest - uma ferramenta proprietária construída sobre JUnit. (Ele gera testes unitários bem.)
  2. Cobertura - uma ferramenta de cobertura de código-fonte aberto que pode ser facilmente combinada com testes JUnit para gerar relatórios.
  3. Emma - outro - um presente que temos usado para um propósito um pouco diferente do que o teste de unidade. Ela tem sido usada para gerar relatórios de cobertura quando a aplicação web é acessado por usuários finais. Isso, combinado com ferramentas de teste de web (exemplo: Canoo). Pode dar-lhe relatórios de cobertura muito úteis que indicam como muito código é coberto durante o uso típico usuário final

Nós usamos essas ferramentas para

  • comentário que os desenvolvedores têm escrito testes de boa unidade
  • Certifique-se de que todo o código é percorrida durante o teste caixa-preta

A cobertura de código é simplesmente uma medida do código que é testada. Há uma variedade de critérios de cobertura que pode ser medido, mas tipicamente é os vários caminhos, condições, funções e instruções dentro de um programa que a composição da cobertura total. A métrica de cobertura de código é a apenas uma percentagem de testes que executam cada um desses critérios de cobertura.

Com relação a como eu vou sobre o acompanhamento de cobertura de teste de unidade em meus projetos, eu uso as ferramentas de análise estática de código para acompanhar.

Para Perl, há o excelente Devel :: módulo Tampa que eu regularmente usar em meus módulos.

Se a construção e instalação é gerida por Module :: Construa você pode simplesmente executar ./Build testcover para obter um local agradável HTML que indica a cobertura por sub, linha e condição, com cores agradáveis, tornando mais fácil para ver qual caminho de código tem não foi coberto.

Nas respostas anteriores cobertura de código foi bem explicado. Eu estou apenas adicionando alguns conhecimentos relacionados às ferramentas se você está trabalhando em plataformas iOS e OSX, Xcode oferece a facilidade de cobertura de teste e código de monitor.

links de referência:

https: // developer .apple.com / biblioteca / arquivo / documentation / DeveloperTools / conceitual / testing_with_xcode / capítulos / 07-code_coverage.html

https://medium.com/zendesk-engineering/code -coverage-and-xcode-6b2fb8756a51

Ambos são links úteis para aprender e explorar a cobertura de código com o Xcode.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top