Herramientas de análisis estático de Java en Eclipse e IntelliJ IDEA

1. Información general

En nuestra introducción a FindBugs, analizamos la funcionalidad de FindBugs como una herramienta de análisis estático y cómo se puede integrar directamente en IDE como Eclipse e IntelliJ Idea.

En este artículo, veremos algunas de las herramientas alternativas de análisis estático para Java y cómo se integran con Eclipse e IntelliJ IDEA.

2. PMD

Comencemos con PMD.

Esta herramienta madura y bien establecida analiza el código fuente en busca de posibles errores, códigos subóptimos y otras malas prácticas; también analiza métricas más avanzadas, como la complejidad ciclomática, para el código base que analiza.

2.1. Integración con Eclipse

El complemento PMD se puede instalar directamente desde Eclipse Marketplace. El complemento también se puede descargar manualmente aquí. Una vez instalado, podemos ejecutar la comprobación PMD directamente desde el propio IDE:

Vale la pena señalar que podemos ejecutar PMD a nivel de proyecto o a nivel de clase individual.

Los resultados se muestran a continuación, con diferentes colores para diferentes niveles del hallazgo que van desde "advertencia" hasta "bloqueador" en el orden creciente de gravedad:

Podemos profundizar en los detalles de cada entrada haciendo clic derecho y seleccionando "mostrar detalles" en el menú contextual. Eclipse mostrará una breve descripción del problema y la posible solución de cómo resolverlo:

También es posible cambiar la configuración del escaneo PMD; podemos hacerlo en el menú, en Ventana -> Preferencias -> PMD para iniciar la página de configuración. Aquí, podemos configurar los parámetros de escaneo, el conjunto de reglas, la configuración de visualización de resultados, etc.

Si necesitamos desactivar algunas reglas específicas para el proyecto, simplemente podemos eliminarlas del escaneo:

2.2. Integración con IntelliJ

Por supuesto, IntelliJ tiene un complemento PMD similar, que se puede descargar e instalar desde la tienda de complementos JetBrains.

De manera similar, podemos ejecutar el complemento directamente en el IDE, haciendo clic con el botón derecho en la fuente que necesitamos escanear y seleccionando Escaneo PMD en el menú contextual:

Los resultados se muestran inmediatamente pero, a diferencia de Eclipse, si intentamos abrir la descripción, abrirá un navegador con una página web pública para encontrar información:

Podemos configurar el comportamiento del complemento PMD desde la página de configuración, yendo a Archivo -> Configuración -> otras configuraciones -> PMD para ver la página de configuración. Desde la página de configuración, podemos configurar el conjunto de reglas cargando un conjunto de reglas personalizado con nuestras propias reglas de prueba.

3. JaCoCo

Continuando: JaCoCo es una herramienta de cobertura de prueba, que se utiliza para realizar un seguimiento de la cobertura de prueba unitaria en la base de código. En pocas palabras, la herramienta calcula la cobertura utilizando una serie de estrategias, por ejemplo: líneas, clase, métodos, etc.

3.1. Integración con Eclipse

JaCoCo se puede instalar directamente desde el mercado. También hay un enlace de instalación alojado en el sitio oficial disponible aquí.

La herramienta se puede ejecutar desde el nivel de proyecto hasta el nivel de método individual. El complemento Eclipse utiliza diferentes esquemas de color para identificar qué parte del código está cubierta por los casos de prueba y qué no está cubierta:

Nuestro método consiste en dividir dos parámetros enteros proporcionados y devolver el resultado. Si el segundo parámetro es cero, devolverá un valor máximo para el tipo de datos entero.

En nuestro caso de prueba, solo estamos probando el escenario donde el segundo parámetro es cero:

En este caso, podemos ver que la línea 6 está coloreada en amarillo. Solo se prueba una rama de la condición 'si' y se ejecuta en nuestra prueba simple. Por lo tanto, no está completamente probado y marcado en amarillo.

Además, la línea 7 tiene color verde, lo que significa que está completamente probada. Finalmente, la línea 9 está resaltada con un color rojo, lo que significa que nuestras pruebas unitarias no prueban esta línea en absoluto.

Podemos ver un resumen de la cobertura de la prueba donde muestra cuánto código se cubre en las pruebas unitarias en el nivel de clase y de paquete:

3.2. Integración con IntelliJ IDEA

JaCoCo se incluye de forma predeterminada con la última distribución de IntelliJ IDEA, por lo que no es necesario instalar el complemento por separado.

Al ejecutar pruebas unitarias, podemos seleccionar qué corredor de cobertura necesitamos usar. Podemos ejecutar los casos de prueba a nivel de proyecto o a nivel de clase:

Al igual que en Eclipse, JaCoCo muestra los resultados utilizando diferentes esquemas de color para la cobertura.

Podemos ver el resumen de la cobertura de la prueba donde muestra qué parte del código está cubierto por las pruebas unitarias en el nivel de clase y de paquete.

4. Cobertura

Finalmente, vale la pena mencionar Cobertura: esto se usa de manera similar para realizar un seguimiento de la cobertura de pruebas unitarias en la base de código.

La última versión de Eclipse no es compatible con el complemento Cobertura en el momento de escribir este artículo; el complemento funciona con versiones anteriores de Eclipse.

Del mismo modo, IntelliJ IDEA no tiene un complemento oficial que pueda ejecutar la cobertura de Cobertura.

5. Conclusión

Analizamos la integración con Eclipse e IntelliJ IDEA para tres herramientas de análisis estático ampliamente utilizadas. FindBug se trató en una introducción anterior a FindBugs.

El código fuente de este tutorial se puede encontrar en el proyecto GitHub; este es un proyecto basado en Maven, por lo que debería ser fácil de importar y ejecutar tal como está.