unitarias pruebas ejemplos descargar configuracion java code-coverage cobertura jacoco clover

descargar - pruebas unitarias java ejemplos



¿Cuáles son las diferencias entre los tres métodos de análisis de cobertura de código? (2)

Básicamente, esta página de sonar enumera los diversos métodos empleados por diferentes herramientas de análisis de cobertura de código:

  1. Código fuente de instrumentación (utilizado por Clover )
  2. Instrumentación de código de byte fuera de línea (utilizada por Cobertura )
  3. Instrumentación de código de byte sobre la marcha (utilizada por Jacoco )

¿Cuáles son estos tres métodos y cuál es el más eficiente y por qué? Si la respuesta a la pregunta de eficiencia es "depende", entonces explique por qué?


En general el efecto sobre la cobertura es el mismo.

La instrumentación de código fuente puede proporcionar resultados de informes superiores , simplemente porque la instrumentación de código de bytes no puede distinguir ninguna estructura dentro de las líneas de origen, ya que la granularidad del bloque de código solo se registra en términos de líneas de origen.

Imagine que tengo dos declaraciones if anidadas (o equivalentemente, si (a && b) ... * ) en una sola línea. Un instrumentador de código fuente puede ver estos y proporcionar información de cobertura para los múltiples brazos dentro de if, dentro de la línea de origen; Puede reportar bloques basados ​​en líneas y columnas. Un instrumentador de código de bytes solo ve una línea alrededor de las condiciones. ¿Reporta la línea como "cubierta" si la condición a se ejecuta, pero es falsa?

Puedes argumentar que esto es una circunstancia rara (y probablemente lo sea), y por lo tanto no es muy útil. Cuando obtiene una cobertura falsa seguida de una falla de campo, puede cambiar de opinión acerca de la utilidad.

Hay un buen ejemplo y una explicación de cómo la cobertura del código de bytes hace que la cobertura de las declaraciones de cambio sea correcta , extremadamente difícil.

Un instrumentador de código fuente también puede lograr ejecuciones de prueba más rápidas, ya que el compilador ayuda a optimizar el código instrumentado. En particular, una sonda insertada dentro de un bucle por un instrumentador binario puede ser compilada dentro de un bucle por un compilador JIT. Un buen compilador de Java verá que la instrumentación produce un resultado invariante de bucle y levanta la instrumentación fuera del bucle. (Podría decirse que un compilador JIT también puede hacer esto; la pregunta es si realmente lo hacen).


La instrumentación del código fuente consiste en agregar instrucciones al código fuente antes de compilarlo. Estas instrucciones se utilizan para rastrear qué partes de los códigos se han ejecutado.

La instrumentación de código de bytes sin conexión consiste en agregar esas mismas instrucciones, pero después de la compilación, directamente en el código de bytes.

La instrumentación de código de byte sobre la marcha consiste en agregar esas mismas instrucciones en el código de byte, pero dinámicamente, en tiempo de ejecución, cuando la JVM carga el código de byte.

Esta página tiene una comparación entre los métodos. Puede ser parcial, ya que es parte de la documentación de Clover.

Dependiendo de su definición de "eficiente", elija la que más le guste. No creo que tengas enormes diferencias. Todos hacen el trabajo, y el panorama general será el mismo, independientemente del método utilizado.