Análisis del Código Fuente

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.

Análisis de Código con Sonar

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

Análisis de Código con Sonar

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.

Análisis de Código con Sonar

6. Haga clic en uno de los enlaces para ir a Sonar y ver el resultado del análisis del proyecto.

Análisis de Código con Sonar

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.

Análisis de Código con Sonar

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).

Análisis de Código con Sonar

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.

Análisis de Código con Sonar

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.

Análisis de Código con Sonar

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.

Análisis de Código con Sonar

12. Seleccione el link Dashboard para volver a la página inicial del proyecto.

Análisis de Código con Sonar

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.

Análisis de Código con Sonar

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.

Análisis de Código con Sonar

15. Los valores por defecto de usuario y contraseña en Sonar son admin/admin. Ingréselos para que se autentique como administrador.

Análisis de Código con Sonar

16. En la pantalla principal seleccione el link ON que está al frente de Configure.

Análisis de Código con Sonar

17. En el campo Add a column seleccione los campos que desea ver en la página principal.

Análisis de Código con Sonar

18. Elimine la columna Coverage presionando el ícono de borrado bajo el nombre.

Análisis de Código con Sonar

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.

Análisis de Código con Sonar

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.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License