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 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.
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:
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.
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.
JCov es capaz de informar los siguientes tipos de cobertura de código:
JCov implementa dos formas diferentes de guardar los datos recopilados:
JCov funciona instrumentando el código de bytes de Java utilizando dos enfoques diferentes:
JCov tiene algunas características más distintivas que incluyen, entre otras:
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.
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++ 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]
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 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 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]
.class
archivos individuales o completos .jars
(en el lugar, si se desea). También es posible realizar un filtrado eficiente de subconjuntos de cobertura.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.