Test de cobertura
Gcov es una utilidad que se distribuye con el compilador gcc para realizar tests de cobertura. Estos tests están destinado a determinar qué partes de un programa han sido ejecutadas y qué partes no a lo largo de una o más ejecuciones. Por ejemplo, para saber si en un if siempre se sigue por la misma rama. Esto permite determinar si los casos de prueba con los que se valida un programa cubren todas las posibilidades, o queda código sin testear. Gcov permite extraer información útil para tal fin. El programa debe compilarse con un argumento de compilación especial para que a lo largo de las ejecuciones genera un registro binario de qué lineas se ejecutan y qué ramas se siguen en las estructuras de control, para que luego gcov extraiga esa información de forma legible. ZinjaI puede configurar automáticamente un proyecto para que genere esta información y mostrar parte de los resultados en su ventana principal.
Para poder realizar el análisis se debe:
- Compilar el programa de forma que genere información la información necesaria: esto se hace pasándole a gcc el parámetro "--coverage" en los pasos de compilación y enlazado. ZinjaI permite agregar o quitar ese argumento de la configuración de un proyecto o programa simple mediante el ítem Habilitar/Deshabilitar del submenú Test de cobertura del menú Herramientas. Al modificarse estas opciones, ZinjaI ofrecerá recompilar el programa completo para que las mismas sean efectivamente aplicadas.
- Ejecutar el programa una o más veces: cada vez que ejecute un programa, el mismo generará en junto a los objetos temporales achivos de extensión gcov y gcno con la información recopilada durante las ejecuciones. Si ejecuta el programa más de una vez, la información se acumula. Para eliminar la información de ejecuciones anteriores puede utilizar el ítem Eliminar resultados del submenú Test de cobertura del menú Herramientas.
- Visualizar la información generada: Con la opción Mostrar barra de resultados del submenú Test de cobertura del menú Herramientas puede observar parte de la información recopilada durante la ejecución en una barra lateral a la izquierda del código fuente. En dicha barra se muestran números que indican la cantidad de veces que se ejecutó cada línea. Las lineas marcadas con "#####" son las líneas que no han sido ejecutadas, y las líneas sin marca son líneas que al compilarse no produjeron código binario ejecutable.
Notas:
- ZinjaI actualiza automáticametne la información que se muestra en la barra de resultados al cambiar de pestaña de código (con la excepción de los programas simples sin título) y al finalizar la ejecución del programa. Para forzar la actualización en cualquier momento utilice el botón derecho del ratón sobre la misma.
- Al eliminar la información de gcov en programas simples solo se elimina el archivo de resultados del cpp actual, pero la ejecución de gcov puede generar archivos de resultados para las cabeceras incluidas que no serán eliminados con este mecanismo. Cuando se trabaja en un proyecto, la eliminación se realiza por extensión, se eliminan todos los archivos con extensiones gcov, gcno y gcda del directorio de temporales.