En este taller vamos a configurar la tarea de Hudson BuildProyectoEjemplo para que envíe su código fuente a Sonar y poder realizarle un análisis a las métricas arrojadas.
1. Vaya a la página principal de Hudson y seleccione el proyecto BuildProyectoEjemplo.
2. Seleccione la opción configurar y vaya hasta el final de la página a la sección llamada Sonar y seleccione las opciones Sonar y Comprobar si este proyecto no usa Maven2.
3. En la sección Builder de Sonar ingrese los datos solicitados como se indica a continuación:
Identificador de Organización: com.ejemplo
Identificador del proyecto: ProyectoEjemplo
Nombre del proyecto: Proyecto de Ejemplo
Directorios de origen: src
4. Guarde la nueva configuración.
5. Ejecute la tarea y vaya a la página principal del proyecto. Verá que ahora aparecen dos links a Sonar, uno en bajo el link Tendencia de Cobertura y el otro bajo el nombre del proyecto.
5.1. Si tuvo problemas con la ejecución de la tarea verifique:
- Que Maven está bien instalado y el comando mvn funciona desde cualquier directorio, es decir, está en el path de tu sistema operativo.
- Verifique que Maven puede acceder a Internet. Si su conexión es a través de un proxy revise el último paso de la instalación de Maven en este mismo taller.
- Verifique que el plugin de Hudson esté bien instalado.
Si sale un mensaje de error como el siguiente:
The plugin 'org.apache.maven.plugins:maven-sonar-plugin' does not exist or no valid version could be found
Debe eliminar el directorio org/codehaus/mojo que lo encuentra dentro de la carpeta .m2/repository/org/codehaus. En Windows esta carpeta debe estar en C:\Documents and Settings\<usuario>.
Vea las indicaciones de la URL http://docs.codehaus.org/display/SONAR/Install+Sonar.
6. Haga clic en uno de los enlaces para ir a Sonar y ver el resultado del análisis del proyecto.
7. La primera página nos indica que el proyecto tiene un 85.4% de cumplimiento de reglas. Haga clic en el link del proyecto para ver las métricas detalladas.
Las métricas que se ven en esta pantalla arrojan varios datos importantes:
- El número de líneas del proyecto es 13.637.
- Sólo el 52.2% del API público está documentado.
- En promedio de compleijdad ciclomática para los métodos es de 2.2.
- De acuerdo a las reglas por defecto configuradas en Sonar hay un total de 1132 violaciones divididas en 30 críticas, 370 mayores, 729 menores y 3 informativas.
Una guía detallada de las métricas de Sonar las puede encontrar en su sitio web en la URL http://docs.codehaus.org/display/SONAR/Metric+definitions.
Algunas métricas importantes son:
- Líneas de Código: Número de líneas de código del proyecto. Esta métrica sólo tiene en cuenta las líneas que corresponden a código Java, no incluye comentarios, líneas en blanco o nada similar.
- Clases: Número de clases del proyecto incluídas clases internas, interfaces, enumeraciones y anotaciones.
- Métodos: Número de métodos sin incluir getters ni setters. Los constructores se cuentan entre los métodos.
- Violaciones Bloqueantes, Críticas, Mayores, Menores e Informativas: Todas las violaciones parametrizadas en SONAR en orden de prioridad.
- Complejidad Ciclomática: También conocida como la métrica McCabe. Consiste en sumar los 'if', 'for', 'while' y sentencias por el estilo. Cada método tienen un valor mínimo de 1 en el cálculo de la complejidad excepto los getter y setter que no son considerados métodos. Cada una de las siguientes sentencias y palabras clave incrementan en 1 la complejidad:
- if
- for
- while
- case
- catch
- throw
- return (si no es la última sentencia de un método)
- &&
- ||
- ?
- Complejidad Ciclomática por Clase: Complejidad ciclomática promedio calculada para las clases de un proyecto.
- Complejidad Ciclomática por Método: Complejidad ciclomática promedio de todos los métodos de un proyecto.
- API Público Documentado: Número de clases, métodos y atributos públicos con un bloque de Javadoc.
8. Ingresando al detalle de unas de las métricas podrá ver los detalles por paquetes o clases. Ingrese al listado de violaciones para que vea la ubicación exacta y el mensaje de cada hallazgo. Haga clic en el link que muestra el número de violaciones (1132).
9. En esta pantalla verá cuatro secciones: el número de violaciones por prioridad, número de violaciones por regla, violaciones por paquete y violaciones por clase.
Navegar en Sonar es fácil, seleccione por ejemplo la prioridad "Major" y verá las violaciones, paquetes y clases correspondientes a esa proridad; seleccione una clase y verá las líneas exactas con la descripción de la violación.
10. Seleccione la prioridad Critical, la regla Empty If Stmt y la clase ID3v2_4Frame. Esta regla le indica que hay sentencias if sin contenido y en la parte inferior de la página verá que sucede en las líneas 250 y 253.
11. Pueder usar el filtro que está en el encabezado de la sección que muestra el código de la clase para ver violaciones específicas.
12. Seleccione el link Dashboard para volver a la página inicial del proyecto.
13. Ingrese a la sección de comentarios haciendo clic en el link de porcentaje (24.6%) y verá los porcentajes de comentarios por clase y paquete.
14. La pantalla principal de Sonar muestra poca información por defecto pero se puede personalizar para que muestre otras métricas. Para personalizarla debe ingresar como administrador y agregar los datos que desee.
Vaya a la página inicial y seleccione el link Log In.
15. Los valores por defecto de usuario y contraseña en Sonar son admin/admin. Ingréselos para que se autentique como administrador.
16. En la pantalla principal seleccione el link ON que está al frente de Configure.
17. En el campo Add a column seleccione los campos que desea ver en la página principal.
18. Elimine la columna Coverage presionando el ícono de borrado bajo el nombre.
18. Seleccione las métricas Size —> Lines of code, Complexity —> Complexity, Documentation —> Public documented API (%) y Rules —> Violations.
19. Vuelva a la página principal de Sonar y debe mostrar las métricas seleccionadas.
20. Hasta acá vimos los principales usos de Sonar, la navegación a través de algunas métricas. De acuerdo a las necesidades usará otros elementos más específicos, pero por la simplicidad de su navegación, creo que no tendrá problemas cuando los necesite.