Articulo de referencia

Herramientas de cobertura de código Java

Las herramientas de cobertura de código Java son de dos tipos: primero, herramientas que añaden instrucciones al código fuente Java y requieren su recompilación; segundo, herram...

Las herramientas de cobertura de código Java son de dos tipos: primero, herramientas que añaden instrucciones al código fuente Java y requieren su recompilación; segundo, herramientas que instrumentan el bytecode , ya sea antes o durante la ejecución. El objetivo es determinar qué partes del código se prueban registrando las líneas de código ejecutadas durante la prueba.

JaCoCo

JaCoCo es un conjunto de herramientas de código abierto para medir e informar sobre la cobertura de código Java . JaCoCo se distribuye bajo los términos de la Licencia Pública de Eclipse . Fue desarrollado como reemplazo de EMMA, [ 1 ] bajo el paraguas del complemento EclEmma para Eclipse.

Características

JaCoCo ofrece instrucciones y cobertura de línea y sucursales.

A diferencia de Atlassian Clover y OpenClover , que requieren instrumentar el código fuente, JaCoCo puede instrumentar el código de bytes de Java utilizando dos enfoques diferentes:

  • como JCov sobre la marcha mientras se ejecuta el código con un agente Java [ 2 ]
  • como Cobertura y JCov antes de su ejecución (fuera de línea)

Y se puede configurar para almacenar los datos recopilados en un archivo o enviarlos a través de TCP. Los archivos de múltiples ejecuciones o partes de código se pueden fusionar fácilmente. [ 3 ] A diferencia de Cobertura y EMMA , es totalmente compatible con Java 7, Java 8, [ 4 ] Java 9, Java 10, Java 11, Java 12, Java 13, Java 14, Java 15, Java 16, Java 17, Java 18, Java 19 y Java 20.

Herramientas que utilizan o incluyen JaCoCo

JCov

JCov es la herramienta desarrollada y utilizada con Sun JDK (y posteriormente con Oracle JDK) desde los inicios de Java: desde la versión 1.1. JCov permite medir e informar sobre la cobertura del código Java . JCov se distribuye bajo los términos de la Licencia Pública General de GNU (versión 2, con la excepción Classpath). En 2014, JCov se convirtió en software de código abierto como parte del proyecto de herramientas de código OpenJDK .

Características

JCov es capaz de informar sobre los siguientes tipos de cobertura de código:

  • Cobertura de bloques
  • Cobertura de línea
  • Cobertura de sucursales
  • Cobertura del método

JCov implementa dos formas diferentes de guardar los datos recopilados:

  • En un archivo del sistema de archivos
  • En un servidor (también conocido como "capturador de red")

JCov funciona instrumentando el código de bytes de Java utilizando dos enfoques diferentes:

  • Instrumentación estática que se realiza de antemano, modificando el código probado.
  • Instrumentación dinámica que se realiza sobre la marcha mediante un agente Java.

JCov tiene algunas características distintivas adicionales que incluyen, entre otras:

  • Cobertura de campo
  • Cobertura de API abstracta
  • Cobertura directa/indirecta
  • Información de cobertura por prueba (también conocida como "escalas de prueba")
  • API pública y SPI que permite implementar filtrado personalizado y/o minería de datos de cobertura.

Herramientas que utilizan JCov

  • Oracle JDK (SE y ME)
  • JCK (Kit de compatibilidad de Java)
  • Diversos TCK de Java SE y Java ME
  • SDK de Java FX
  • Creador de escenas Java FX

OpenClover

OpenClover es un sucesor gratuito y de código abierto de Atlassian Clover, creado como una bifurcación del código fuente de Clover publicado por Atlassian en 2017. Contiene todas las características del Clover original (la edición para servidor). El proyecto OpenClover está liderado por desarrolladores que mantuvieron Clover entre 2012 y 2017. [ 15 ]

OpenClover utiliza la técnica de instrumentación de código fuente y admite los lenguajes Java, Groovy y AspectJ . Algunas de sus características incluyen: control preciso del alcance de la medición de cobertura, optimización de pruebas e informes sofisticados.

OpenClover se integra con Ant , Maven , Gradle , Grails , Eclipse , IntelliJ IDEA , Bamboo , Jenkins , Hudson , Griffon , SonarQube y AspectJ.

Agente de cobertura de código de IntelliJ IDEA

IntelliJ IDEA Code Coverage Agent es una herramienta de cobertura de código integrada en el IDE IntelliJ IDEA y en el servidor de integración continua TeamCity. Admite el seguimiento de la cobertura por ramas y por prueba.

Testwell CTC++ para Java

Testwell CTC++ es una herramienta de cobertura de código para C , C++ , Java y C# . Su desarrollo comenzó en 1989 en Testwell, Finlandia. Desde 2013, Verifysoft Technology, una empresa de Offenburg , Alemania , se encarga del soporte y desarrollo . Testwell CTC++ analiza todos los niveles de cobertura de código hasta la cobertura de condición/decisión modificada y la cobertura multicondicional. [ 16 ] La herramienta funciona con todos los compiladores . [ 17 ]

Herramientas históricas destacadas

Trébol

Clover es una utilidad de análisis de cobertura de código Java adquirida y desarrollada posteriormente por Atlassian . En abril de 2017, Atlassian anunció el fin del soporte para Clover y, al mismo tiempo, lo liberó como código abierto bajo la licencia Apache 2.0.

Clover utiliza una técnica de instrumentación de código fuente (a diferencia de Cobertura y JaCoCo, que utilizan instrumentación de código de bytes), lo cual tiene sus ventajas (como la capacidad de recopilar métricas de código) y desventajas (es necesaria la recompilación de las fuentes). [ 18 ] Algunas de sus características incluyen informes históricos, un gran control sobre el proceso de recopilación de cobertura, un conjunto de herramientas de línea de comandos y una API para la integración con sistemas heredados, entre otras.

Clover también permite reducir el tiempo de prueba ejecutando únicamente las pruebas que cubren el código de la aplicación modificado desde la compilación anterior. Esto se denomina optimización de pruebas [ 19 ] y puede generar una gran reducción en el tiempo de espera para que finalicen las pruebas automatizadas.

Clover incluye varias integraciones desarrolladas tanto por Atlassian (Ant, Maven, Grails, Eclipse, IDEA, Bamboo) como por la comunidad de código abierto (Gradle, Griffon, Jenkins, Hudson, Sonar).

En abril de 2017, Atlassian anunció que ya no lanzaría nuevas versiones de Clover después de la versión 4.1.2, y su código se puso a disposición como software de código abierto alojado en Bitbucket . [ 20 ] [ 21 ]

Cobertura

Cobertura es una herramienta de código abierto para medir la cobertura de código. Lo hace instrumentando el código de bytes. Fue la predecesora de JaCoCo.

EMMA

EMMA es un conjunto de herramientas de código abierto para medir e informar sobre la cobertura de código Java . EMMA se distribuye bajo los términos de la Licencia Pública Común v1.0.

EMMA no se encuentra actualmente en desarrollo activo; la última versión estable se lanzó a mediados de 2005. Como reemplazo, se desarrolló JaCoCo. [ 22 ] EMMA funciona envolviendo cada línea de código y cada condición con una bandera, que se activa cuando se ejecuta esa línea. [ 23 ]

Características

  • Las clases de instrumentación se utilizan para la cobertura, ya sea sin conexión (antes de que se carguen) o sobre la marcha (utilizando un cargador de clases de la aplicación de instrumentación).
  • Tipos de cobertura compatibles: clase, método, línea, bloque básico. EMMA puede detectar cuándo una sola línea de código fuente está cubierta solo parcialmente.
  • Las estadísticas de cobertura se agregan a nivel de método, clase, paquete y "todas las clases".
  • Tipos de informes de salida: texto sin formato, HTML, XML. Todos los tipos de informes admiten la exploración detallada, con un nivel de detalle controlado por el usuario. El informe HTML admite enlaces al código fuente.
  • Los informes de resultados pueden resaltar los elementos con niveles de cobertura inferiores a los umbrales especificados por el usuario.
  • Los datos de cobertura obtenidos en diferentes instrumentaciones o ejecuciones de prueba pueden combinarse.
  • Es posible volcar o restablecer los datos de cobertura de forma remota y sin que se produzca una salida de la JVM.
  • No requiere acceso al código fuente y se degrada de forma gradual a medida que disminuye la cantidad de información de depuración disponible en las clases de entrada.
  • Se pueden instrumentar archivos individuales .classo completos .jars(in situ, si se desea). También es posible un filtrado eficiente de subconjuntos de cobertura.
  • La integración de Makefile y ANT se admite en igualdad de condiciones.
  • La sobrecarga de tiempo de ejecución de la instrumentación añadida es pequeña (5-20 %) y el propio instrumentador de código de bytes es muy rápido (limitado principalmente por la velocidad de E/S de archivos). La sobrecarga de memoria es de unos pocos cientos de bytes por clase Java.
  • EMMA es 100% Java puro, no tiene dependencias de bibliotecas externas y funciona en cualquier JVM de Java 2 (incluso 1.2.x).

Serenidad

Serenity es una herramienta de código abierto que crea pruebas de aceptación de software más automatizadas en menos tiempo. Mide e informa sobre la cobertura del código Java . También genera informes fáciles de entender que describen qué hace la aplicación y cómo funciona, incluyendo qué pruebas se ejecutaron y qué requisitos se cumplieron . Es compatible con Selenium WebDriver, Appium y herramientas BDD.

Se miden las principales métricas de código, como la complejidad ciclométrica , la estabilidad, la abstracción y la distancia al núcleo. Los datos del informe se almacenan en una base de datos de objetos y se ponen a disposición a través de Jenkins/Hudson. La interfaz reproduce visualmente la interfaz del IDE de Eclipse.

Serenity optimiza dinámicamente el código de bytes, eliminando la necesidad de un paso posterior a la compilación. Admite proyectos Ant y Maven. La configuración se realiza en XML; un ejemplo en Ant sería:

<!-- Propiedades del sistema Serenity. --> <sysproperty key= "included.packages" value= "your.package.name.here" /> <sysproperty key= "included.adapters" value= "coverage,complexity,dependency" /> <!-- Línea de comandos de la JVM de Serenity. --> <jvmarg line= "-javaagent:serenity/serenity.jar" />

Y un ejemplo de configuración de Maven sería:

<properties> <included.packages> -Dincluded.packages=your.package.name.here </included.packages> <included.adapters> -Dincluded.adapters=coverage,complexity,dependency </included.adapters> </properties> <argLine> -javaagent:serenity/serenity.jar -Xms512m -Xmx1024m ${included.packages} ${included.adapters} </argLine>

Para ver un ejemplo completo de configuración, consulte la wiki de Jenkins en https://wiki.jenkins-ci.org/display/JENKINS/Serenity+Plugin .

Se admiten tanto los agentes de Jenkins como los proyectos multimodulares de Maven.

Referencias

  1. Misión JaCoCo
  2. Patroklos Papapetrou (19 de diciembre de 2012). "Comparación de herramientas de cobertura de código (JaCoCo, Cobertura, Emma) en Sonar" . Only Software matters . Consultado el 3 de marzo de 2013 .
  3. "Medición de la cobertura mediante pruebas de integración con Sonar – Actualizado" . Archivado del original el 23/02/2013 . Consultado el 01/03/2013 .
  4. 1 2 "Cobertura de código" . Ayuda web de IntelliJ IDEA 12.0 . JetBrains . Consultado el 3 de marzo de 2013 .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  5. EclEmma, ​​complemento de cobertura de código de Eclipse
  6. Plugin JaCoCo de Jenkins
  7. "Soporte para NetBeans JaCoCo" . Archivado del original el 31 de mayo de 2012. Consultado el 22 de febrero de 2013 .
  8. Plugin Gradle JaCoCo
  9. Gulati y Sharma 2017 , págs. 99–103, Capítulo §6 Integración de herramientas - Herramientas de compilación - Gradle.
  10. Plugin Maven JaCoCo
  11. Gulati y Sharma 2017 , pág. 115, Capítulo §6 Integración de herramientas - Herramientas de compilación - Extensión Maven.
  12. Integración de JaCoCo en Visual Studio Team Services
  13. Integración de JaCoCo en TeamCity
  14. Jacoco es utilizado por la herramienta STAMP DSpot como selector de pruebas (considerado como una prueba de aptitud) para seleccionar pruebas que aumenten la cobertura y tengan una ruta de ejecución única.
  15. OpenClover - Sobre nosotros
  16. Testwell CTC++ admite todos los niveles de cobertura.
  17. Testwell CTC++ es compatible con todos los compiladores.
  18. "¿Por qué Clover utiliza la instrumentación del código fuente?"
  19. Optimización de pruebas
  20. "Atlassian Clover ahora es de código abierto" . atlassian.com . 11 de abril de 2017.
  21. "atlassian/clover" . bitbucket.org .
  22. Archivos de cobertura de código EMMA en SourceForge.net
  23. Expert Spring MVC y Web Flow; Por Seth Ladd, Darren Davison, Steven Devijver, Colin Yates, pág. 289

Citas

  • Gulati, Shekhar; Sharma, Rahul (2017). Java Unit Testing with JUnit 5. Berkeley, CA: Apress . doi : 10.1007/978-1-4842-3015-2 . ISBN 978-1-4842-3014-5.
  • Comparación de OpenClover, Clover, Cobertura, JaCoCo, JCov, CodeCover y PIT
  • JaCoCo contra Clover2
  • Elige tu herramienta de cobertura de código en Sonar 2.2 Archivado el 23/02/2013 en Wayback Machine , un poco desactualizado, ya que JaCoCo ahora admite la cobertura de ramas.
  • Pruebas de aplicaciones Java con Visual Studio Team Services