Existe diversa información a analizar cuando se realiza un análisis de cobertura de código (http://en.wikipedia.org/wiki/Code_coverage), aunque aquí nos limitaremos a anotar la manera de utilizarlo de forma mas básica.
Para utilizar gcov, deberemos compilar nuestro programa/as añadiendo las opciones -fprofile-arcs -ftest-coverage a la compilación (podemos añadirlo a CFLAGS p. ej.)
¡¡¡Importante!!! Si utilizamos alguna directiva de optimización de código (p. eje -O2) gcov no nos dará información útil, ya que las optimizaciones modificarán el análisis. Por tanto, dichas opciones han de ser eliminadas en la compilación para la cobertura de código.
Una vez compilado el programa, obtenemos un archivo .gcno con la información que necesita gcov.
A continuación, si ejecutamos el programa, se nos creará un archivo .gcda con los datos de la ejecución para interpretarlos con gcov.
Lo siguiente sería invocar a gcov con las opciones que necesitemos, por ejemplo:
#gcov programa.c
Ésto creará un archivo programa.c.gcov con toda la información sobre la cobertura del código. Si lo editamos, podemos ver que al lado de cada línea nos indica el número de veces que se ha ejecutado la linea en cuestión (y si se ha ejecutado claro). De esta forma podemos saber que partes del código han sido probadas y cuáles no.
Otra opción interesante es invocar gcov con la opción -b, que nos dará información probabilistica sobre las sentencias condicionales (análisis MC/DC y similares como se puede ver en el artículo de la wikipedia)
Por último, es posible generar informes html a partir de ésta información utilizando el script lcov en vez de gcov, inicialmente pensando para realizar estas tareas sobre el kernel de Linux, pero útil también para aplicaciones de usuario normales, aunque no genera información probabilistica sobre las sentencias condicionales.
La manera de utilizarlo es la siguiente:
- Capturar la información.
- Generar html
Para usarlo en baterías de test, puede ser necesario utilizar las capacidades que tiene de combinar datos de distintas ejecuciones, para lo cual es recomendable ver man lcov.