Análisis de Código con SonarQube

La calidad de código suele decirse que es un atributo interno de calidad, dado que no se hace visible al usuario. Pero llega un momento en el cual este atributo de calidad pasa de ser interno a externo, y esto se da cuando el hecho de tener modificar el código para hacer un cambio lleva mucho más tiempo del que debería. Con el fin de verificar la calidad interna de un sistema se suelen hacer análisis de código con SonarQube o herramientas similares. En este post te comparto parte de una investigación hecha por Matías Fornara en Abstracta al respecto, donde básicamente te cuenta cómo hacer una prueba de concepto rápidamente usando una imagen Docker de SonarQube, y ejecutando el análisis desde SonarQube Scanner.


SonarQube, como tantas otras herramientas similares, permite realizar análisis estático de código fuente de manera automática, buscando patrones con errores, malas prácticas o incidentes. Además, realiza un cálculo de la deuda técnica. Dentro de las verificaciones que hacen herramientas como SonarQube, se encuentran las siguientes:

  • Detección de código duplicado.
  • Falta de pruebas unitarias, falta de comentarios.
  • Código spaghetti, complejidad ciclomática, alto acoplamiento.
  • Tamaño de archivos de código.
  • Tamaño de métodos.
  • No adecuación a estándares y convenciones de código.
  • Vulnerabilidades conocidas de seguridad.

A través de definir “Quality Gates” es posible marcar los umbrales aceptables en el proceso de desarrollo, y estos pueden ser definidos en base a distintas métricas. Esto es muy útil si se integra SonarQube en el pipeline de CI/CD.

Un Quality Gate puede ser definido para responder preguntas como:

  • No hay issues nuevos que sean críticos o bloqueantes.
  • El code coverage de las pruebas unitarias del nuevo código es mayor a 80%.

Para poder utilizar SonarQube se necesita instalar un componente servidor, donde se encuentra el engine que realiza el análisis y almacena los resultados, y se debe invocar de alguna manera el análisis, lo cual puede realizarse con un cliente llamado SonarQube Scanner o con un plugin de Maven. También se puede integrar el análisis al IDE que se esté utilizando, con un plugin llamado SonarLint. En este post veremos cómo instalar el servidor (usando una imagen Docker) y cómo invocar el análisis usando SonarQube Scanner. En un próximo post veremos otras alternativas que se pueden usar.

Servidor SonarQube con Docker

Precisamos tener un servidor SonarQube corriendo. Para esta tarea usaremos una imagen Docker para así agilizar este proceso. Partimos de que ya tenemos Docker instalado, de no ser así el proceso es bastante simple y se puede ver aquí.

Entonces, podemos proceder a descargar el contenedor SonarQube haciendo un pull contra el repositorio de Docker:

Una vez descargado debemos iniciarlo para dejarlo disponible en un determinado puerto. Para lograr esto ejecutamos:

docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube

En esta línea le estamos especificando el nombre del contenedor que queremos correr y el mapeo de puertos entre el contenedor y nuestra red.

Para verificar la instalación podemos intentar acceder a http://ip-de-docker:puerto. En nuestro caso el puerto es 9000 y para saber la IP de nuestro contenedor podemos usar el comando “docker-machine ip default“.

Si todo salió bien, deberíamos ver algo como esta imagen:

Crear Proyecto en el servidor SonarQube

Primero se debe estar logueado en SonarQube y desde ahí nos dirigimos al menú de “Administration”. Luego, “Projects->Management” y ahí seleccionamos “Create Project”.

En este formulario definimos el nombre que el proyecto va a tener en el servidor, la versión y la project key (que puede contener letras, números, ‘-‘, ‘_’, ‘.’ y ‘:’,y  al menos un dígito).

Ejecutar SonarQube Scanner

Para poder ejecutar un análisis con SonarQube sobre un proyecto debemos descargar SonarQube Scanner aquí. Una vez descargado, se debe descomprimir y luego agregar al path la carpeta /bin que se encuentra dentro del directorio donde descomprimimos, para poder ejecutarlo desde línea de comandos fácilmente.

Para saber si la instalación fue exitosa, ejecutar:

sonar-scanner -h

Se debería ver una salida como esta:

Una vez culminado el paso anterior, se debe configurar la ubicación del servidor SonarQube. Para esto hay que editar el archivo de propiedades <directorioSonarScanner>/conf/sonar-scanner.properties como se muestra debajo.

(Quitar comentario para que tome la configuración)

Para proceder con el análisis en cuestión, se necesita de la creación de un archivo de properties que es particular para cada proyecto, llamado sonar-project.properties (situado en la raíz del mismo):

En este indicamos los parámetros correspondientes al proyecto creado en el servidor SonarQube.

Habiendo configurado los 2 archivos, es momento de ejecutar el análisis. Para esto hay que situarse  en el directorio del proyecto y ejecutar el comando:

sonar-scanner

Una vez finalizado el análisis, se desplegará en pantalla la URL para acceder al reporte del mismo.

 

Me encantaría saber cómo te va con tus pruebas, o si tienes experiencias para compartir relacionadas al uso de SonarQube en un entorno de Continuous Delivery.

 

Leave a Reply

Your email address will not be published. Required fields are marked *