Controla la calidad del código con SonarQube

El software SonarQube, anteriormente llamado Sonar es la plataforma abierta más popular para gestionar la calidad del software.

Todos los implicados en el desarrollo de software estamos concienciados en que es indispensable construir buen código, aunque estarás de acuerdo conmigo en que no siempre se consigue. Errores en el software han provocado graves problemas, pérdidas millonarias, e incluso muerte de personas. Podéis leer los siguientes ejemplos: List of software bugs y Top 8 de errores informáticos más costosos de la historia.

Sonarqube nos ayuda en nuestra tarea. Es software libre y evalúa el código fuente usando diversas herramientas de análisis cómo Checkstyle, PMD o FindBugs. Este análisis se consolida en métricas que nos ayudarán a medir y mejorar la calidad de nuestro software. La plataforma cubre 7 ejes para realizar el análisis:

  • Reglas de codificación
  • Diseño y Arquitectura
  • Código duplicado
  • Complejidad del código
  • Pruebas unitarias
  • Errores potenciales
  • Comentarios en el código

sonar1

SonarQube es extensible mediante plugins, de manera que es posible analizar más de 20 lenguajes de programación, incluidos Java, C#, C/C++, PL/SQL, Cobol… Estos plugins permiten de igual manera añadir nuevos lenguajes e incorporar nuevas reglas o métricas avanzadas.

SonarQube es una aplicación basada en web, por lo que las reglas, alertas, configuraciones y demás se pueden configurar online. Además, su base de datos embebida puede ampliarse y configurar una externa como MySQL, Oracle, PostgreSQL, etc. No sólo permite combinar métricas, sino también comparar con las medidas históricas. Otra característica primordial es que puede integrarse en servidores de integración continua.

Instalación

La plataforma está compuesta de tres elementos:

  • Una base de datos para almacenar la configuración de la instancia y los resultados del análisis de proyectos, vistas, etc.
  • Un servidor web para visualizar los análisis y configurar la instancia.
  • Uno o más analizadores para analizar proyectos.

Como hemos dicho SonarQube se distribuye con una base de datos embebida, así que para comenzar a trabajar tan solo tenemos que descargar la última versión del servidor y descomprimirla en un directorio.

Una vez completada, ejecutamos el proceso del servidor ejecutando:

  • Linux / Mac: <directorio_instalación>/bin/<tu_sistema_operativo>/sonar.sh
  • Windows: <directorio_instalación>/bin/windows-x86-XX/StartSonar.bat

Por defecto está configurado en el puerto 9000 (http://localhost:9000), pero es posible modificarlo en el fichero de configuración sonar.properties que se encuentra en el directorio conf del directorio de instalación.

Analizadores

Están disponibles los siguientes analizadores:

  • SonarQube runner: recomendado para proyectos sin Maven
  • Maven: recomendado para proyectos “mavenizados
  • SonarQube Ant Task: Para integrar proyectos con Ant
  • Gradle: Para integrar proyectos construidos con Gradle
  • Continuous integration: Plugins para Jenkins, Hudson, Bamboo o AnthillPro.

SonarQube runner es un analizador manual, de manera que ejecutaremos el programa cada vez que queramos realizar un análisis de código. Mediante un fichero de configuración indicaremos tanto la carpeta dónde se encuentra el código fuente como la versión de análisis. Los demás analizadores son programados, por lo que el analizador se ejecutará cuando sea necesario, bien sea una vez al día, cada vez que se construye el proyecto, cada vez que se sube al control de fuentes, todo a la vez, etc.

Métricas

El cuadro de mando de SonarQube es una interfaz web donde podemos ver los resultados del análisis con los puntos débiles a mejorar. Puedes ver un cuadro de mando SonarQube en nemo.sonarqube.org. Las métricas que puedes consultar las configuramos según nuestras necesidades pero por defecto se muestran las siguientes:

  1. Complejidad. Complejidad ciclomática. Cada vez que sonarqube encuentra una sentencia“if”,”for”,”while”,”case”,”catch”, “throw”,”return” (sin ser la última sentencia de un método), “&&”, “||”, “?”, “else”, se aumenta el contador global de complejidad ciclomática en 1. También se aumenta en 1 el contador por la cabecera del método. Otros valores para la complejidad son:
    • Complejidad/método. Media de la complejidad por cada método. debería sobrepasar el valor de 30.
    • Complejidad/clase. Media de la complejidad de todas las clases. Un valor muy elevado de complejidad ciclomática por clase, nos indica síntomas de un mal diseño.
    • Complejidad/fichero. Media de la complejidad por fichero.
  2. Código duplicado. Cuanto mayor sea la complejidad ciclomática y la duplicidad de código, más difícil será mantener el software, por tanto se trata de una métrica básica. Por defecto se considera una duplicidad de código cuando 10 líneas sucesivas de código se encuentran duplicadas. Sonarqube nos muestra las siguientes métricas para esta categoría.
    • Líneas duplicadas.
    • Bloques duplicados.
    • Archivos duplicados.
    • Número de líneas duplicadas (%). (Número de líneas duplicadas/Número total de líneas) *100
  3. Comentarios. La información mostrada para esta categoría:
    • Líneas comentadas. Número de líneas con comentario.
    • Comentarios (%). Si el valor es un 50% indica que la mitad del fichero es código y la mitad comentarios, si es un 100% indica que son todo comentarios.
  4. Test. Muestra el tanto por ciento de cobertura de pruebas unitarias del proyecto, y en caso de que las haya, cuántas de ellas ha pasado nuestro software. Si bien para otras métricas únicamente es necesario analizar el código fuente, para obtener resultados en esta categoría es necesario compilar el código para la ejecución de las pruebas.
  5. Violaciones.
    • “Issues”. Número de violaciones o malas prácticas en el código
    • Cumplimiento de reglas (%): Se calcula con la siguiente fórmula:

100 -((Violaciones ponderadas / Líneas de código) * 100)

Las violaciones ponderadas son la suma de todas las violaciones multiplicadas por su severidad (10 para las violaciones bloqueantes, 5 para las críticas, 3 para las mayores y 1 para las menores). Estos valores pueden ser modificados cuando accedemos como administradores.

 Deuda Técnica

Una de las medidas que no podemos obviar de Sonarqube es la deuda técnica. Es un valor en días que vendría a ser el tiempo aproximado que nos llevaría subsanar todos los problemas encontrados en nuestro software. Según la entrada de wikipedia, es un eufemismo tecnológico que hace referencia a las consecuencias de un desarrollo apresurado de software o un despliegue descuidado de hardware.

sonar2

El origen del término fue propuesto por Ward Cunningham en 1992. En el siguiente vídeo habla sobre este término.

En definitiva, Sonarqube nos va a ayudar a mantener una buena calidad del software construido, comparando las diferentes versiones y almacenando un histórico de las métricas informadas. Hoy en día es una herramienta clave, de uso casi obligado para evaluar el código entregado y liberado a nuestros clientes.