jueves, 11 de febrero de 2010

Sonar: Métricas de calidad del código

Según su propia web, Sonar es una plataforma que permite gestionar la calidad del código controlando los 7 ejes principales de dicha calidad del código:
  • Arquitectura y diseño
  • Duplicaciones
  • Pruebas unitarias
  • Complejidad
  • Errores potenciales
  • Reglas de codificación
  • Comentarios

Sonar realiza varios análisis de nuestro código a través de otras herramientas (Checkstyle, PMD, Cobertura…) y presenta de manera unificada a través de su interfaz la información generada por ellas en forma de métricas.

A través de la interfaz de Sonar podemos ver de forma detallada los puntos débiles de nuestro proyecto como errores potenciales en el código, escasez de comentarios, clases demasiado complejas, escasez de cobertura de las pruebas unitarias, y más.

Lo mejor es ilustrar la potencia de esta herramienta con un ejemplo de su uso, para lo cual vamos instalarla en nuestro equipo en primer lugar desde la página web del proyecto Sonar.

Descargamos la versión actual, que en este momento es la 1.12. Una vez que hemos descargado Sonar, tenemos un archivo .zip que podemos descomprimir en cualquier lugar, yo lo haré en la carpeta D:\java.

Por sencillez, para las pruebas vamos a lanzar el servidor de Sonar en modo standalone, aunque lo ideal sería instalarlo en un servidor de aplicaciones. Desde la línea de comandos vamos a la carpeta D:\java\sonar-1.12\bin\windows-x86-32 (estoy haciendo la prueba en Windows) y ejecutamos StartSonar.bat:

Esto lanzará el servidor de Sonar, al que podremos acceder desde la URL http://localhost:9000/:

Como acabamos de instalar Sonar, la interfaz aparecerá prácticamente vacía hasta que empecemos a analizar nuestros proyectos. Para ello iremos a uno de nuestros proyectos, gestionados con Maven, y le pediremos a Sonar que lo analice mediante el target de Maven mvn sonar:sonar:

Si ahora refrescamos la interfaz de Sonar, veremos que aparece el nuevo proyecto analizado:

Además ya nos va mostrando información sobre el proyecto, como el porcentaje de cumplimiento de las reglas de análisis o el porcentaje de cobertura de las pruebas unitarias. Pero, si queremos más información, no tenemos más que pinchar sobre nuestro proyecto para ir a la siguiente pantalla:

Aquí se empieza a ver la potencia de Sonar. En una interfaz compacta nos muestra una cantidad importante de información sobre el código del proyecto como:
  • medida en líneas de código
  • complejidad de los componentes
  • cantidad de comentarios introducidos
  • duplicidad del código
  • cobertura del código
  • conformidad respecto a ciertas reglas de codificación
  • violaciones del código

Para ampliar la información, podemos, por ejemplo, acceder a las violaciones tipo major de las reglas de codificación:

Sonar nos muestra información sobre las reglas que se están incumpliendo, y los paquetes y clases en que esto ocurre. Y, si pinchamos sobre una de las clases Sonar muestra cuál es el código que está incumpliendo estas reglas y da indicaciones para corregirlo:

A mí Sonar me ha parecido una maravilla, y no he hecho más que empezar a ver sus posibilidades. Os invito a que utilicéis esta herramienta y exploréis su interfaz en busca de toda la información que ofrece sobre el código del proyecto.

Referencias:
Página web del proyecto Sonar
Métricas en Java: Sonar
Analizando la calidad del código Java con Sonar

8 comentarios:

  1. Este tipo de herramientas son unos juguetes muy chulos, la verdad, jeje... Bueno, en serio, son herramientas también muy útiles... pero tienen más peligro que una piraña en un bidé, porque hay gente que se toma estas cosas como dogmas de fé. Y un informe de ésos en manos de uno "que no sabe que no sabe" (cliente, consultorcillo del 3 al 4º, o cualquier otro ignorante atrevido) puede tirarte al traste un proyecto porque ha encontrado 56 "deficiencias" en el código... (que lo sé de buena tinta, que lo he visto). Si ese tipo de información queda "entre nosotros" (que sabemos interpretar que un método puede tener 3 returns sin que sea nada grave), son herramientas bastante útiles. Eso de que se integre con Maven me gusta... A ver cuańdo puedo probarlo.

    Gracias por compartir cosas tan interesantes!.

    ResponderEliminar
  2. Voy a echarle un tiento, ya estuve trasteando con los reports de maven y con hudson un poquillo y ahora esto. Para cuando una aplicación que escriba programas a medida que los imagino? los programadores pasarían a ser imaginadores. pinta muy bien :-)

    Un saludo

    ResponderEliminar
  3. Samuel, la verdad es que tu comentario da qué pensar y creo que tienes mucha razón, que en manos equivocadas puede ser desastroso.

    Sin embargo, yo lo veo más enfocado a ser usado por el propio equipo de desarrollo. El equipo puede visualizar en Sonar qué partes de su proyecto pueden ser mejorables o son potencialmente problemáticas y tratar de disminuir el riesgo.

    Además, por comentarios que he leído de gente que usa Sonar, esto favorece la competencia sana. Como se hace visible la comparación entre las métricas de distintos proyectos, parece que la gente intenta que su proyecto no se quede atrás y se esfuerza en mejorarlo.

    Aunque es cierto que alcanzar la perfección en las métricas que ofrece Sonar no garantiza el éxito de un proyecto, si puede ayudar a hacer código mejor, más claro y fácilmente mantenible, bienvenido sea.

    ResponderEliminar
  4. Pues sí, también estoy de acuerdo (al menos en parte) con lo que comenta Samuel. Un ejemplo: Coje un proyecto Spring que funcione y a un desarrollador tipo consultora (te ponemos en este proyecto por que una vez viste Java en la universidad), enseñale el informe del "checkstyle", seguramente después de aplicar todas las correcciones el proyecto deje de funcionar (por aquello de los proxys y la norma de checkstyle que indica que los métodos getter y setter deben ser métodos finales).

    Quizá poner esto en manos de una persona que no sepa interpretar los resultados puede tener consecuencias desastrosas para el proyecto pero no podía ser de otra forma. Cuando algo, puesto en manos equivocadas salió bien?

    A mi me parece una herramienta bastante chula para engordar tu servidor de integración continua y tener una visión al día de cómo va evolucionando la calidad de un proyecto.

    Ya lo pude "probar" ayer mismo gracias a las instrucciones de Jorge y a la "magia" de Maven :-)

    Un saludo

    ResponderEliminar
  5. hola queria saber que metricas especificas ejecuta sonar? ejecuta NOC, DIT, LCOM, WMC, CBO??? cual ejecuta, recalco que estas son metricas especificas de POO

    ResponderEliminar
  6. Hola,

    En esta página de la documentación de Sonar se listan las métricas que usa:

    http://docs.codehaus.org/display/SONAR/Metric+definitions

    Espero que te sirva.

    Un saludo.

    ResponderEliminar
  7. Alguien tiene un manual completo de instalación para windows?

    ResponderEliminar
  8. Cómo se hace desde bitbucket ahí esta es com maven

    ResponderEliminar