Delphi Code Coverage

Se conoce como code coverage a la cantidad de código que es ejecutado (“cubierto”) durante una ejecución de nuestra aplicación. Evidentemente, además de la cantidad de código, debemos saber exactamente qué lineas se han ejecutado y cuales no se han ejecutado. No hablamos de tiempo de ejecución (de eso se encargan los profilers), solamente saber qué lineas de código se han ejecutado. La utilidad de esto.. pues varias. Para mí en concreto, poder comprobar de un vistazo rápido qué codigo se ha usado, detectar código sobrante, detectar casos no cubiertos durante un proceso (los que se ocupen en el código no utilizado), etc. No va a ser algo a utilizar a diario, pero sí a tener en cuenta en nuestro arsenal de herramientas.

Para hacernos una idea, aquí muestro una captura real, de cobertura de código en una de mis aplicaciones. En verde lo ejecutado, en morado lo no ejecutado. Es un proceso de pruebas, y ya puedo ver fácilmente que el caso cubierto en la línea 378 no se ha ejecutado nunca, por tanto mis proceso de pruebas no está completo. ¿Útil verdad?

La utilidad DelphiCodeCoverage

La herramienta que nos permite hacer esto (no he encontrado otra) y que he comprobado está en github: DelphiCodeCoverage

  • Primero bajamos el zip o clonamos el repositorio.

  • Abrimos el grupo de proyectos DelphiCodeCoverage.groupproj y compilamos. Yo con Delphi 11 Alexandria no he tenido problemas, compilado a la primera.

  • Para que esto funcione, debemos generar un .map para nuestra aplicación. No me extiendo sobre esto, hay muchos tutoriales sobre como generar el .map. Yo lo genero siempre, incluso en versión release, puesto que utilizo EurekaLog; pero eso es otra cuestión.

  • Una vez disponibles nuestro ejecutable y nuestro .map, lo mejor es hacer un fichero .bat por ejemplo codecoverage.bat, en el directorio de nuestra aplicación, con el siguiente contenido:

          path\CodeCoverage.exe -e nuestro_exe -m nuestro_map -dproj nuestro_dproj -od path_output -html -a nuestros_params
    
  • path\CodeCoverage: es el path al codecoverage.exe que hemos compilado anteriormente, es la herramienta en sí

  • nuestro_exe: es el nombre de nuestro .exe

  • nuestro_map: es el nombre de nuestro .map

  • nuestro_dproj es el nombre del fichero .dproj de nuestra aplicación. La herramienta va a procesar los forms y unidades encontrados ahí. A mí me funciona porque tengo todo añadido al proyecto, evito lo más que puedo el uso de paths (para que el proyecto sepa exactamente qué está utilizando). Si no lo tienes así, hay otros parámetros dónde puedes indicar que ficheros/unidades quieres procesar. la documentación está en el readme del repositorio

  • path_output es el directorio en el cual se van a generar los ficheros html con el resultado, como la captura que he mostrado más arriba. Ojo, debes crearlo previamente.

  • nuestros_params: Parámetros de la aplicación, todos seguidos, por ejemplo param1 param2 param3

Ejecutamos el .bat (mejor desde una consola dos/powershell) , utilizamos la aplicación y listo. Al terminar tendremos en path_output los html de las unidades que hayamos indicado, con toda la cobertura, como la imagen previa.

De uso sencillo, es una herramienta muy potente, como digo, no del dia a dia pero es de esas cosas que cuando se necesitan.. mejor tenerlas ya prepatadas. No dejes de ver el readme del repositorio, puesto que hay más parámetros, más formatos de salida, etc. Yo he mostrado aquí la forma más simple de ponerla en marcha.

Avatar
Diego J. Muñoz
Programador Freelance

Desarrollo de aplicaciones a medida. Experiencia.

Relacionado

Anterior