Las herramientas de cobertura de código Java son de dos tipos: en primer lugar, las herramientas que añaden instrucciones al código fuente de Java y requieren su recompilación. En segundo lugar, las herramientas que instrumentan el bytecode , ya sea antes o durante la ejecución. El objetivo es averiguar qué partes del código se prueban registrando las líneas de código ejecutadas al ejecutar una prueba.
JaCoCo
JaCoCo es un conjunto de herramientas de código abierto para medir y generar informes sobre la cobertura del 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, cobertura de líneas y sucursales.
A diferencia de Atlassian Clover y OpenClover, que requieren instrumentar el código fuente, JaCoCo puede instrumentar el bytecode 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 la ejecución (fuera de línea)
Además, se puede configurar para almacenar los datos recopilados en un archivo o enviarlos a través de TCP. Los archivos de varias 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
- Complemento JaCoCo de SonarQube: uno de los valores predeterminados para los análisis de cobertura dentro de la plataforma de gestión de calidad de código SonarQube
- El complemento de cobertura de código de Eclipse (software) de EclEmma anteriormente se basaba en EMMA [5]
- Complemento JaCoCo de Jenkins [6]
- Compatibilidad con Netbeans JaCoCo [7]
- IntelliJ IDEA desde la versión v11 [4]
- Complemento JaCoCo de Gradle [8] [9]
- Complemento Maven JaCoCo [10] [11]
- Servicios de equipo de Visual Studio [12]
- Ciudad del equipo [13]
- SELLO (https://www.stamp-project.eu/ [ enlace muerto permanente ] ) [14]
Código de Procedimiento Civil
JCov es una herramienta que se ha desarrollado y utilizado con Sun JDK (y posteriormente Oracle JDK) desde el comienzo de Java: desde la versión 1.1. JCov es capaz de medir y generar informes 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). JCov se convirtió en código abierto como parte del proyecto de herramientas de código OpenJDK en 2014.
Características
JCov es capaz de informar los siguientes tipos de cobertura de código:
- Cobertura de bloque
- 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 por adelantado, modificando el código probado
- Instrumentación dinámica que se realiza sobre la marcha mediante el agente Java
JCov tiene algunas características más distintivas que incluyen, entre otras:
- Cobertura de campo
- Resumen de la cobertura de la API
- Cobertura directa/indirecta
- Información de cobertura por prueba (también conocida como "escalas de prueba")
- API pública y SPI que permiten implementar filtrado personalizado y/o extracción de datos de cobertura
Herramientas que utilizan JCov
- Oracle JDK (SE y ME)
- JCK (el kit de compatibilidad de Java)
- Varios TCK de Java SE y Java ME
- SDK de Java FX
- Generador de escenas Java FX
Clover abierto
OpenClover es un sucesor gratuito y de código abierto de Atlassian Clover, creado como una bifurcación del código base de Clover publicado por Atlassian en 2017. Contiene todas las características del Clover original (la edición para servidores). El proyecto OpenClover está dirigido por desarrolladores que mantuvieron Clover entre 2012 y 2017. [15]
OpenClover utiliza la técnica de instrumentación de código fuente y maneja lenguajes Java, Groovy y AspectJ . Algunas de sus características incluyen: control preciso sobre el 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 IntelliJ IDEA
IntelliJ IDEA Code Coverage Agent es una herramienta de cobertura de código integrada en IntelliJ IDEA IDE y en el servidor TeamCity CI. Admite la cobertura de sucursales y el seguimiento de la cobertura por prueba.
Testwell CTC++ para Java
Testwell CTC++ es una herramienta de cobertura de código para C , C++ , Java y C# . El desarrollo de esta herramienta comenzó en 1989 en Testwell en Finlandia. Desde 2013, el soporte y el desarrollo han sido continuados por Verifysoft Technology, una empresa de Offenburg , Alemania . Testwell CTC++ analiza todos los niveles de cobertura de código hasta la cobertura de condición/decisión modificada y la cobertura de múltiples condiciones. [16] La herramienta funciona con todos los compiladores . [17]
Herramientas históricas notables
Trébol
Clover es una utilidad de análisis de cobertura de código Java adquirida y desarrollada por Atlassian . En abril de 2017, Atlassian anunció el fin de la vida útil de Clover y, al mismo tiempo, lo convirtió en 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), que 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 API para la integración heredada y más.
Clover también permite reducir el tiempo de prueba al ejecutar únicamente las pruebas que cubren el código de la aplicación que se modificó desde la compilación anterior. Esto se denomina optimización de pruebas [19] y puede generar grandes reducciones en la cantidad de tiempo que se pasa esperando que se completen las pruebas automatizadas.
Clover viene con una serie de 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 el predecesor de JaCoCo.
EMMA
EMMA es un conjunto de herramientas de código abierto para medir y generar informes sobre la cobertura del 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 publicó a mediados de 2005. Como reemplazo, se desarrolló JaCoCo. [22] EMMA funciona envolviendo cada línea de código y cada condición con un indicador, que se establece cuando se ejecuta esa línea. [23]
Características
- clases de instrumentos para cobertura ya sea fuera de línea (antes de que se carguen) o sobre la marcha (utilizando un cargador de clases de aplicación de instrumentación).
- Tipos de cobertura admitidos: clase, método, línea, bloque básico. EMMA puede detectar cuando 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 en profundidad, hasta un nivel de detalle controlado por el usuario. El informe HTML admite la vinculación de código fuente.
- Los informes de salida pueden resaltar elementos con niveles de cobertura por debajo de los umbrales proporcionados por el usuario.
- Es posible fusionar los datos de cobertura obtenidos en diferentes instrumentaciones o ejecuciones de pruebas.
- Es posible volcar o restablecer datos de cobertura de forma remota y sin salir de JVM.
- no requiere acceso al código fuente y se degrada elegantemente a medida que disminuye la cantidad de información de depuración disponible en las clases de entrada.
- Se pueden instrumentar
.classarchivos individuales o completos.jars(en el lugar, si se desea). También es posible realizar un filtrado eficiente de subconjuntos de cobertura. - La integración de Makefile y la compilación ANT se admiten por igual.
- La sobrecarga en tiempo de ejecución de la instrumentación agregada es pequeña (5-20 %) y el instrumentor de bytecode en sí es muy rápido (principalmente limitado por la velocidad de E/S del archivo). 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 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 y genera informes sobre la cobertura del código Java . También genera informes fáciles de entender que describen lo que hace la aplicación y cómo funciona, incluidas las pruebas que se ejecutaron y los requisitos que se cumplieron. Funciona con las herramientas Selenium WebDriver, Appium y BDD.
Se miden las métricas de código más importantes, como la complejidad ciclométrica , la estabilidad, la abstracción y la distancia desde el código principal. 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 replica visualmente la interfaz de Eclipse IDE.
Serenity mejora dinámicamente el código de bytes, lo que hace innecesario un paso posterior a la compilación. Se admiten proyectos Ant y Maven. La configuración se realiza en xml. Un ejemplo de Ant sería:
<!-- Propiedades del sistema Serenity. -->
<sysproperty key= "included.packages" value= "your.package.name.here" /> <sysproperty key= "included.adapters" value= "cobertura,complejidad,dependencia" /> <!-- 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:
<propiedades>
<paquetes.incluidos> -Dpaquetes.incluidos=el.nombre.de.su.paquete.aquí </paquetes.incluidos>
<adaptadores.incluidos> -Dpaquetes.incluidos=cobertura,complejidad,dependencia </adaptadores.incluidos>
</propiedades>
<argLine> -javaagent:serenity/serenity.jar -Xms512m -Xmx1024m ${paquetes.incluidos} ${adaptadores.incluidos} </argLine>
Para obtener un ejemplo completo de una configuración, consulte la wiki de Jenkins en https://wiki.jenkins-ci.org/display/JENKINS/Serenity+Plugin.
Se admiten esclavos de Jenkins, así como proyectos multimódulo de Maven.
Referencias
- ^ Misión de JaCoCo
- ^ Patroklos Papapetrou (19 de diciembre de 2012). "Comparación de herramientas de cobertura de código (JaCoCo, Cobertura, Emma) en Sonar". Solo el software importa . Consultado el 3 de marzo de 2013 .
- ^ "Medición de la cobertura mediante pruebas de integración con Sonar: actualización". Archivado desde el original el 23 de febrero de 2013. Consultado el 1 de marzo de 2013 .
- ^ ab "Cobertura de código". Ayuda web de IntelliJ IDEA 12.0 . JetBrains. Archivado desde el original el 26 de abril de 2013. Consultado el 3 de marzo de 2013 .
- ^ EclEmma, complemento de cobertura de código de Eclipse
- ^ Complemento JaCoCo de Jenkins
- ^ "Soporte de NetBeans JaCoCo". Archivado desde el original el 2012-05-31 . Consultado el 2013-02-22 .
- ^ Complemento JaCoCo de Gradle
- ^ Gulati y Sharma 2017, págs. 99-103, Capítulo §6 Herramientas de integración - Herramientas de compilación - Gradle.
- ^ Complemento Maven JaCoCo
- ^ Gulati y Sharma 2017, pág. 115, Capítulo §6 Herramientas de integración - Herramientas de compilación - Extensión Maven.
- ^ Integración de JaCoCo en Visual Studio Team Services
- ^ Integración de JaCoCo en TeamCity
- ^ La herramienta STAMP DSpot utiliza Jacoco como selector de pruebas (considerado como una aptitud) para seleccionar pruebas que aumentan la cobertura y tienen una ruta de ejecución única
- ^ OpenClover - Acerca de nosotros
- ^ Testwell CTC++ admite todos los niveles de cobertura
- ^ Testwell CTC++ admite todos los compiladores
- ^ "¿Por qué Clover utiliza instrumentación de código fuente?"
- ^ Optimización de pruebas
- ^ "Atlassian Clover ahora es de código abierto". atlassian.com . 11 de abril de 2017.
- ^ "atlassian/clover". bitbucket.org .
- ^ Archivos de cobertura de código EMMA en SourceForge.net
- ^ Experto en Spring MVC y Web Flow; por Seth Ladd, Darren Davison, Steven Devijver, Colin Yates, pág. 289
Citas
- Gulati, Shekhar; Sharma, Rahul (2017). Pruebas unitarias de Java con JUnit 5. Berkeley, CA: Apress . doi :10.1007/978-1-4842-3015-2. ISBN . 978-1-4842-3014-5.
Enlaces externos
- Comparación de OpenClover, Clover, Cobertura, JaCoCo, JCov, CodeCover y PIT
- JaCoCo contra Clover2
- Elija su herramienta de cobertura de código en Sonar 2.2 Archivado el 23 de febrero de 2013 en Wayback Machine , un poco desactualizado, ya que JaCoCo mientras tanto admite la cobertura de rama
- Prueba de aplicaciones Java con Visual Studio Team Services