É possível medir a cobertura função com gcov?
-
22-08-2019 - |
Pergunta
Atualmente nós usamos gcov com nossa suíte de testes para aplicação Linux C ++ e ele faz um trabalho bom para medir a cobertura de linha.
Can gcov produzir relatório de cobertura função / método, além de cobertura de linha?
Olhando para os parâmetros gcov aceita Eu não acho que é possível, mas eu pode estar faltando alguma coisa. Ou, provavelmente, há alguma outra ferramenta que pode produzir relatório de cobertura função / método de fora das estatísticas geradas pelo gcc?
Update:. por função / cobertura método I percentual médio de funções que são executadas durante os testes
Solução
Eu acho que você quer dizer é a opção -f, o que lhe dará a porcentagem de linhas cobertas por função. Há um artigo interessante sobre gcov em Dr. de Dobb, que pode ser útil. Se "o homem gcov" não mostra o sinalizador -f, verifique se você tem uma versão reasobably recente da suíte gcc.
Editar: para obter a percentagem de funções não executados você pode simplesmente analisar através da saída de cobertura função, como a cobertura de 0,00% deve ser praticamente equivalente a não chamada. Este pequeno script imprime a porcentagem de funções não executado:
#!/bin/bash
if test -z "$1"
then
echo "First argument must be function coverage file"
else
notExecuted=`cat $1 | grep "^0.00%" | wc -l`
executed=`cat $1 | grep -v "^0.00%" | wc -l`
percentage=$(echo "scale=2; $notExecuted / ($notExecuted + $executed) * 100" |bc)
echo $percentage
fi
Outras dicas
Nós começamos a usar gcov e lcov juntos. Os resultados de lcov fazer incluem a percentagem de funções que são executadas para o "módulo" você está olhando.
EDIT: O módulo pode ir de diretórios para baixo para arquivos.
Eu também quero acrescentar que, se você já estiver usando as ferramentas GNU Compiler, então gcov / lcov não vai ser muito difícil para você obter em execução e os resultados que ela produz são muito impressionante.
O utilitário lcov é bom, e nós usá-lo. Mas eu não tenho certeza se você precisar dele para o que você quiser.
-
Use CTags ( wikipedia ; sourceforge ) para encontrar todas as funções declaradas nos arquivos de cabeçalho relevantes.
-
Executar gcov para obter cobertura de linha para cada função no binário.
-
Compare a lista de funções a partir de 1 & 2 para produzir "funções chamadas" / "Funções disponíveis".
Nós o chamamos de "cobertura de API", uma vez que se aplicam a etapa # 1 apenas para cabeçalhos de API pública. Mas você pode fazê-lo em todos os cabeçalhos ou apenas um subconjunto como você escolher. Eu acho que a razão nós produzimos desta maneira é a razão que você está procurando.