SonarQube: calidad desde el principio

SonarQube es una herramienta que te ayuda a detectar errores en el código antes de que lleguen a los usuarios, así que es imprescindible para programar.

Cada vez que alguien habla de calidad de software, aseguramiento de la calidad, testing, etc… en lo que se suele coincidir es que la calidad debe empezar a inspeccionarse lo antes posible.

El motivo es sencillo, los errores son mucho más fáciles de detectar y de solucionar al inicio de un proyecto que cuando ya está implantado.

Sin embargo, en la práctica, y pesar de la mayor concienciación sobre la importancia de la calidad de software, seguimos dejando la inspección de calidad para el final.

SonarQube

Para evitarlo, existen herramientas de inspección de código como SonarQube.

Desde que trabajo con ella, solo puedo decir cosas buenas: tanto por su sencillez y efectividad, como por su función formadora de cómo se debe programar.

Así que, si nunca has trabajado con SonarQube, hoy te cuento sus características más básicas y que ventajas te aporta para programar.

¿Qué es SonarQube?

SonarQube es una herramienta open-source para la inspección continua del código.

Las primeras versiones aparecieron entre 2006 y 2007, y a día de hoy ya va por su versión 7.9.1, que es la última LTS (Long Term Support)

Se distribuye bajo licencia GNU Lesser General Public License, en su versión Community, aunque también dispone de licencias superiores (principalmente para lenguajes más antiguos)

Su función principal es la de realizar análisis estático del código con el objetivo de detectar los errores lo antes posible.

Está desarrollado por SonarSource, compañía alojada en Suiza.

Como funciona SonarQube

El uso de SonarQube es muy sencillo. Tiene 4 componentes fundamentales: parámetros, escáneres, reglas y servidor web.

Parámetros

Son los valores que podrás establecer para indicarle a SonarQube, elementos como, por ejemplo: el nombre del proyecto, su ID, qué lenguajes o archivos quieres analizar o excluir, etc…

Además, depende de cómo ejecutes el análisis también deberás indicarle en qué instancia deberá mostrar los resultados.

Todos estos parámetros puedes indicarlos, en el comando del análisis, o bien en un fichero llamado sonar.properties, dependiendo del procedimiento que utilices para analizar el código.

Escáneres

SonarQube dispone de varios tipos de escáneres para poder analizar el código en función de la tecnología que estemos usando.

Actualmente, los escáneres con los que cuenta son:

  • Gradle – SonarScanner for Gradle
  • MSBuild – SonarScanner for MSBuild
  • Maven – use the SonarScanner for Maven
  • Jenkins – SonarScanner for Jenkins
  • Azure DevOps – SonarQube Extension for Azure DevOps
  • Ant – SonarScanner for Ant
  • Para el resto de tecnologías (CLI) – SonarScanner

El SonarScanner se puede ejecutar de forma muy sencilla desde una terminal de comandos. Es un script disponible tanto para Windows, como para Mac y para Linux.

También puede analizar el código de tu repositorio, si por ejemplo haces uso de Jenkins o Azure Devops para descargar el código y automatizar la inspección.

Los escáneres hacen uso de las reglas de SonarQube para indicar donde están los errores.

Reglas

Las reglas en SonarQube se organizan en distintas categorías según los lenguajes o frameworks.

Existen por ejemplo reglas para analizar código en PHP, y además, existe un conjunto de reglas concretas para analizar código de Drupal

Las reglas, están basadas en estándares de programación y buenas prácticas.

Es un buen punto de partida para empezar a analizar código, pues podría surgir la duda de ¿porqué programar como diga SonarSource o el jefe de proyecto. Al fin y al cabo, un estándar es un acuerdo global de como realizar algo, después de haber realizado varios estudios y pruebas.

Las reglas de SonarQube muestran básicamente 3 tipos de evidencias(issues): Bugs (errores en el código) Vulnerabilidades (errores que afectan a la seguridad) Code Smells (malas prácticas que dificultan que el código pueda mantenerse)

Además, dentro de cada tipo de evidencia , cuenta con distintos grados de severidad: bloqueante, crítica, mayor, menor o info.

Servidor web

SonarQube, después de analizar el código y compararlo con las reglas activas, muestra los resultados a través de una aplicación web.

Lo más sencillo, si se trata de una instancia local, es acceder a ella a través del puerto 9000 de tu localhost.

La pantalla principal, muestra un resumen de todos los proyectos analizados.

Proyectos SonarQube

Además, dentro de cada proyecto puedes ver información más detallada.

Por ejemplo, aquí tienes un vistazo de un proyecto:

Analisis SonarQube

Otro de los detalles que me gusta destacar de SonarQube, es la cantidad de las métricas que muestra relacionadas con la calidad: además de los tipos de evidencias que te he contado antes, puedes ver otros elementos como la complejidad ciclomática, la cobertura de pruebas unitarias, la deuda técnica, % de comentarios, % de código duplicado, etc…

¿Qué puedes analizar con SonarQube?

La versión Community (opensource y gratuita) cuenta con reglas para los lenguajes más populares y recientes.

Con esta versión, puedes analizar código en:

  • Java
  • JavaScript
  • C#
  • TypeScript
  • Kotlin
  • Ruby
  • Go
  • Scala
  • Flex
  • Python
  • PHP
  • HTML
  • CSS
  • XML
  • VB.NET

Para lenguajes más antiguos, se requiere de una licencia superior, de pago. Pero con ella puedes analizar por ejemplo: Cobol, RPG, C/C++ o ABAP

Probar SonarQube fácil

La mejor forma de entender como funciona SonarQube, es realizar un prueba, y puedes ejecutarlo de forma muy sencilla en tu equipo.

Ten en cuenta que para ejecutar la versión 7.9.1 (última LTS) necesitas disponer del JDK 11, si no quieres actualizarlo, puedes usar la versión 6.7.7 (anterior LTS) que puedes ejecutar con el JDK 8.

Para ello, simplemente tienes que seguir estos pasos:

  1. Descarga la versión SonarQube Community Edition
  2. Descomprímela, por ejemplo en C:\sonarqube si usas Windows, o bien en /opt/sonarqube si usas Linux
  3. Inicia el servidor de SonarQube:
    1. En Windows ejecuta

      C:\sonarqube\bin\windows-x86-xx\StartSonar.bat

    2. En Linux ejecuta

      /opt/sonarqube/bin/[OS]/sonar.sh console

  4. Accede a http://localhost:9000 (De forma predeterminada puedes loguearte con usuario admin y pass admin)

Ahora ya puedes navegar por la instancia de SonarQube, aunque no tendrás ningún proyecto.

Para analizar un proyecto, de forma fácil, deberás:

  1. Descarga el escáner adecuado para tu sistema operativo.
  2. Descomprímela, por ejemplo en C:\sonarqube\scanner si usas Windows, o bien en /opt/sonarqube/scanner si usas Linux
  3. Realiza un análisis:
    1. Según tu sistema operativo, el comando será
      • En Windows el comando es:

        C:\sonarqube\scanner\sonar-scanner.bat

      • En Linux

        /opt/sonarqube/scanner/sonar-scanner

    2. Indica los parámetros necesarios:
      • -Dsonar.projectKey=[ClaveDelProyecto]
      • -Dsonar.projectName=[NombreDelProyecto]
      • -Dsonar.sources=[DirectorioConCodigoFuente]
      • -Dsonar.host.url=[HostURL] à Necesario si la instancia no estuviera en localhost:9000
      • -Dsonar.login=[UsuarioSonarQube]
      • -Dsonar.password=[PasswordSonarQube]

Es decir, el siguiente comando realizaría un análisis en una instancia local de Windows configurada con acceso limitado.

C:\sonarqube\scanner> sonar-scanner.bat -Dsonar.projectKey=MyProject -Dsonar.projectName=My First Project -Dsonar.sources=C:\Users\developer\workspace\MyProject -Dsonar.login=admin -Dsonar.password=admin

¡Y listo! Ya puedes acceder a la instancia de SonarQube y ver los resultados del análisis


¿Qué te parece SonarQube?¿Utilizas alguna otra herramienta para inspeccionar el código?

Lectura recomendada

Cómo disponer de más tiempo para acabar todo el trabajo Tener más tiempo disponible es un sueño (y a veces una utopía) para quienes no logran hacer todo lo que se proponen en una jornada. ¿Te ocurre a...ti también? Pues mira que sencillo es conseguir ese tiempo extra que necesitas.

Deja un comentario