2009-02-10 22 views
7

Actualmente utilizamos gcov con nuestro conjunto de pruebas para la aplicación Linux C++ y hace un buen trabajo midiendo la cobertura de línea.¿Es posible medir la cobertura de funciones con gcov?

¿Puede el gcov producir informe de cobertura de función/método además de la cobertura de línea?

Mirando los parámetros que gcov acepta, no creo que sea posible, pero me puede estar perdiendo algo. O, probablemente, ¿existe alguna otra herramienta que pueda generar informes de cobertura de función/método a partir de las estadísticas generadas por gcc?

Actualización: Por cobertura de función/método me refiero al porcentaje de funciones que se ejecutan durante las pruebas.

Respuesta

6

Supongo que lo que quiere decir es la opción -f, que le dará el porcentaje de líneas cubiertas por función. Hay un interesante artículo sobre gcov en Dr. Dobb's que podría ser útil. Si "man gcov" no muestra el distintivo -f, compruebe si tiene una versión razonablemente reciente del paquete gcc.

Editar: Para obtener el porcentaje de funciones no ejecutadas, simplemente puede analizar la salida de cobertura de función, ya que el 0.00% de cobertura debería ser prácticamente equivalente a no invocado. Este pequeño script muestra el porcentaje de funciones no ejecutado:

#!/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 
+0

-f opción no es exactamente lo que quiero. Da cobertura de línea por función, pero quiero cobertura de función/método. Agregué una aclaración a la pregunta. –

6

Hemos comenzado a utilizar gcov y lcov juntos. Los resultados de lcov incluyen el porcentaje de funciones que se ejecutan para el "módulo" que está viendo.

EDIT: El módulo puede ir desde los directorios hasta los archivos.

También quiero agregar que si ya está usando las herramientas del compilador GNU, entonces gcov/lcov no será demasiado difícil de ejecutar y los resultados que produce son muy impresionantes.

5

La utilidad lcov es agradable, y la usamos. Pero no estoy seguro si lo necesitas para lo que quieres.

Nosotros

  1. Use ctags (wikipedia; sourceforge) para encontrar todas las funciones declaradas en los archivos de cabecera relevantes.

  2. Ejecute GCOV para obtener cobertura de línea para cada función en el binario.

  3. Compare la lista de funciones de 1 & 2 para producir "Funciones llamadas"/"Funciones disponibles".

Lo llamamos "cobertura de API" ya que aplicamos el paso n. ° 1 solo a los encabezados API públicos. Pero puedes hacerlo en todos los encabezados o solo en un subconjunto que elijas. Creo que la proporción que producimos de esta manera es la relación que está buscando.

Cuestiones relacionadas