Pergunta

Eu tenho uma base de código muito grande que contém testes de unidade extensos (usando CppUnit). Preciso descobrir qual porcentagem do código é exercida por esses testes, e (idealmente) gerar algum tipo de relatório que me diga, por biblioteca ou por arquivo, quanto do código foi exercido.

Aqui está o chute:isso deve ser executado completamente sem supervisão (eventualmente dentro de uma construção de integração contínua) e deve ser multiplataforma (bem, WIN32 e *nix, pelo menos).

Alguém pode sugerir uma ferramenta ou conjunto de ferramentas que possa me ajudar a fazer isso?Não posso mudar de CppUnit (nem gostaria - é incrível), mas, por outro lado, estou ansioso para ouvir quaisquer recomendações que você possa ter.

Saúde,

Foi útil?

Solução

Qual ferramenta devo usar?

Esse artigo descreve outra frustração dos desenvolvedores em busca de ferramentas de cobertura de código C++.A solução final do autor foi Cobertura do alvo.

Cobertura do alvo características:

Quanto à conexão com sua integração contínua, depende de qual solução de CI você usa, mas provavelmente você pode conectar as etapas de medição de instrumentação/cobertura ao arquivo make usado para testes automatizados.


Testando Linux versus Windows?

Contanto que todos os seus testes sejam executados corretamente em ambos os ambientes, você deverá medir bem a cobertura em um ou outro.(Embora Bullseye apareça para suportar ambas as plataformas).Mas por que você não está fazendo compilações de integração contínua em ambos os ambientes?Se você entregar para clientes em ambos os ambientes, então você precisar estar testando em ambos.

Por esse motivo, parece que você pode precisar ter dois servidores de compilação contínua configurados, um para uma compilação Linux e outro para uma compilação Windows.Talvez isso possa ser facilmente conseguido com algum software de virtualização como VMware ou caixa virtual.Talvez você não precise executar métricas de cobertura de código em ambos os sistemas operacionais, mas definitivamente deveria executar testes de unidade em ambos.

Outras dicas

Se você pode usar GNU GCC como seu cumpridor, então o gcov ferramenta funciona bem.É muito fácil automatizar totalmente todo o processo.

Se você estiver usando o conjunto de ferramentas GCC, o gcov fornecerá estatísticas de origem, funcionais e de cobertura de ramificação.gcov funciona bem para MinGW e Cygwin.Isso permitirá que você obtenha estatísticas de cobertura, bem como emita código-fonte instrumentado que permite visualizar o código não executado.

No entanto, se você realmente deseja obter relatórios bonitos, use o gcov em conjunto com lcov é o caminho a seguir.lcov fornecerá relatórios de barras com escopo para arquivos e diretórios, estatísticas de cobertura funcional e navegação de arquivos de origem codificados por cores para mostrar a cobertura (verde significa executado, vermelho significa não...).

lcov é fácil no Linux, mas pode exigir alguns hackers perl no Cygwin.Pessoalmente, tive alguns problemas ao executar os scripts (lcov é implementado em perl) no Windows.Eu consegui uma versão hackeada para funcionar, mas esteja avisado.

Outra abordagem é fazer o gcov emit no Windows e fazer o pós-processamento do lcov no Linux, onde certamente funcionará imediatamente.

Confira nosso Cobertura de teste SD C++ ferramenta.Pode ser obtido para GCC e para MSVC6.

Ele possui coleta de dados de investigação de baixa sobrecarga, uma bela exibição de dados de cobertura sobrepostos em seu código e geração completa de relatórios com rollups de cobertura nos níveis de método/classe/arquivo/diretório.

EDITAR:Agosto de 2015:Agora oferece suporte a GCC5 e vários dialetos MS por meio do Visual Studio 2015.Para usar essas ferramentas no Linux, você precisa do Wine, mas lá as ferramentas fornecem scripts sh nativos do Linux e uma interface de usuário baseada em Linux/Java, então a ferramenta parece uma ferramenta nativa do Linux.

Acho que deveria ter especificado o compilador - estamos usando gcc para Linux e MSVC 6 (sim, eu sei, é antigo, mas funciona (principalmente) para nós) para WIn32.

Por esses motivos, o gcov não funcionará em nossas compilações Win32 e o Bullseye não funcionará em nossas compilações Linux.

Então, novamente, talvez eu só precise de cobertura em um sistema operacional...

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