Cobertura de código con Emma

Emma es una librería que permite generar reportes sobre el nivel de cobertura de las pruebas unitarias sobre el código fuente de un proyecto. Para usarlo con Ant es necesario importar la librería en el archivo XML de Ant, en nuestro caso, el build.xml. Una vez se importa la librería creamos una tarea para que realice el análisis y almacene el reporte en el directorio y formato indicado, para el caso de Hudson es necesario un reporte en formato XML.

Para integrar este reporte en XML dentro de la tarea de Hudson, es necesario instalar el plugin Emma y activarlo en el proyecto.

1. Abra el archivo build.xml del proyecto ejemplo.

2. Importe las librerías y las tareas de Emma agregando al principio del archivo las siguientes líneas:

    <path id = "emma.lib">
        <pathelement location = "${lib.dir}/emma.jar" />
        <pathelement location = "${lib.dir}/emma_ant.jar" />
        <pathelement location = "${emma.build.dir}/**" />
    </path>
 
    <taskdef resource = "emma_ant.properties" classpathref = "emma.lib" />
Cobertura de código con Emma

3. En la tarea init agregue la creación del directorio ${emma.coverage.dir} mediante la siguiente línea:

        <mkdir dir = "${emma.coverage.dir}" />
Cobertura de código con Emma

4. En la tarea cleanall agregue el borrado del directorio ${emma.coverage.dir} mediante la siguiente línea:

        <delete failonerror = "false" dir = "${emma.coverage.dir}" />
Cobertura de código con Emma

5. Agregue ahora la tarea emma que consiste en la compilación del código fuente y los test y en la ejecución de AllTestCase.class. Después de esta ejecución la tarea genera los reportes en el directorio ${emma.coverage.dir}.
El script de la tarea es el siguiente:

<target name = "emma" depends = "init">
       <javac
                encoding = "ISO-8859-1"
                destdir = "${emma.build.dir}"
                classpathref = "lib.jarfiles"
                debug = "on"
                deprecation = "on"
                optimize = "on">
            <src path = "${src.dir}" />
            <src path = "${test.dir}" />
        </javac>
 
        <emmajava
                 enabled = "true"
                 libclasspathref = "lib.jarfiles"
                 fullmetadata = "yes"
                 filter = "org.farng.*"
                 sourcepath = "${src.dir}"
                 classname = "org.farng.mp3.AllTestCase"
                 fork = "true"
                 classpathref = "lib.jarfiles"
                 failonerror = "true">
             <classpath>
                 <pathelement path = "${emma.build.dir}" />
                 <pathelement path = "${java.class.path}" />
             </classpath>
             <txt outfile = "${emma.coverage.dir}/coverage.txt" />
             <xml outfile = "${emma.coverage.dir}/coverage.xml" />
             <html outfile = "${emma.coverage.dir}/coverage.html" />
        </emmajava>
</target>

La primera parte que es la compilación es similar a la compilación de la tarea junit, sólo cambia el directorio destino. En la segunda parte del script usamos el tag emmajava para que ejecute la clase org.farng.mp3.AllTestCase y analice únicamente los archivos de tipo org.farng.*. Al final genera los reportes en formatos txt, xml y html.

6. Abra una consola de comandos en el directorio del proyecto y ejecute el comando ant emma. Debe obtener un resultado similar al mostrado en las siguientes imágenes:

Cobertura de código con Emma
Cobertura de código con Emma

7. En el directorio emmaResults puede ver los resultados del reporte de cobertura, el formato HTML es el más legible.

8. Suba el archivo build.xml al repositorio haciendo clic derecho sobre él y seleccionando la opción Commit…. Este es un ejemplo del archivo después de las últimas modificaciones.

9. Vaya ahora a la página principal del Hudson que instaló y seleccione la opción Administrar Hudson —> Administrar Plugins.

Cobertura de código con Emma

10. Seleccione la pestaña Todos los plugins.

Cobertura de código con Emma

11. Busque Emma Plugin y selecciónelo.

Cobertura de código con Emma

12. Vaya al final de la página y seleccione Instalar.

Cobertura de código con Emma

13. Cuando finalice la instalación del plugin aparecerá un mensaje indicando que fue exitosa y que debe reiniciar la aplicación.

Cobertura de código con Emma

14. Reinicie el contenedor (Tomcat).

15. Ingrese a la página principal de Hudson y seleccione el proyecto BuildProyectoEjemplo y la opción Configurar. En la sección Acciones para ejecutar después seleccione Recoger informes de cobertura EMMA.
En la casilla Directorios o archivos donde Emma deja la información ingrese la ruta del reporte xml de Emma. En nuestro caso ProyectoEjemplo/emmaResults/coverage.xml.
Deje el resto de casillas en blanco para usar los valores por defecto.

Cobertura de código con Emma

16. En la misma página de configuración agregue la tarea emma en la sección Ejecutar Ant.

Cobertura de código con Emma

17. Guarde la nueva configuración y ejecute dos veces la tarea.

18. Vaya a la página principal del proyecto e ingrese a la nueva opción Tendencia de cobertura.

Cobertura de código con Emma

19. Esta opción le mostrará un gráfico con el reporte de tendencia de cobertura de codigo. En este caso las pruebas unitarias están cubriendo aproximadamente el 50% de las clases y métodos y el 62% - 63% de bloques y líneas de código.

Cobertura de código con Emma

19. Haga clic sobre el gráfico para ver más detalles del reporte.

20. Esta nueva opción le muestra detalles del cubrimiento de código de cada paquete.

Cobertura de código con Emma

21. Puede seleccionar el paquete para ver el porcentaje de cobertura por clase.

Cobertura de código con Emma

22. Seleccione un archivo para ver detalles por métodos, bloques y líneas.

Cobertura de código con Emma

23. Si desea ver con más detalle las líneas exactas por las que pasaron las pruebas, puede ver el reporte HTML generado cuando ejecutó las pruebas desde eclipse. La siguiente imagen muestra el tipo de detalle que se puede ver:

Cobertura de código con Emma

Las líneas resaltadas en verde fueron cubiertas por las pruebas unitarias. Las rojas en cambio indican que la prueba no pasó por esas porciones de código.

24. Hasta acá el taller de cobertura de código. Otros puntos en los que se puede profundizar es en definir las reglas que indiquen el porcentaje de líneas, métodos, bloques o clases que deben cubrir las pruebas unitaria para considerar el proyecto estable o también hay opciones para que importe el reporte HTML en la ejecución de la tarea.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License