Configurar Sonarqube 7.0 para métrica de Código

El análisis estático de la calidad del código Fuente, tiene como propósito identificar de manera cualitativa y cuantitativa los defectos de codificación de un Desarrollo de Software, consiste en la aplicación de algoritmos que calculan el rendimiento de la aplicación con base en la complejidad del código de la escritura del código fuente, se determina el grado de mantenibilidad del código, es decir que tan fácil es aplicar actualizaciones y agregar nuevas funcionalidades, entre otras métricas.

Métricas de Calidad del Código

CONCEPTOVALOR MÁXIMO ACEPTABLE
Complejidad Ciclomática a nivel de archivoEl 95% de los archivos debe tener una complejidad máxima de 10
El 5% de los archivos podrá tener una complejidad mayor siempre y cuando se agregue una justificación.
Duplicidad de código a nivel de archivosMáximo 0% de archivos duplicados.
Defectos de programación (issues) Máximo 0 defectos de bloqueo
Máximo 0 defectos de nivel crítico
Máximo 0 defectos mayores
Líneas de código (Tamaño)Máximo 0 líneas de código fuente comentado

Líneas de código (Tamaño)

Es una métrica de tamaño, la cual se refiere a la magnitud del código, ayudan a realizar una estimación de costos, como tecnología, tipos de recursos y complejidad, y plazos realistas, en caso de requerir una actualización, mantenimiento o migración.

Defectos de programación (Issues) y vulnerabilidades

Son los defectos que presenta un código que se traducirán en errores en tiempo de ejecución. Existen 5 tipos de estos problemas.

  • De bloqueo. Un error con una alta probabilidad de impactar en el comportamiento de la aplicación. Es absolutamente necesario arreglar el código.
  • Críticas. Un error que afectará la operación de la aplicación. Es necesario corregir el código.
  • Mayores. Falla de calidad la cual puede impactar en la productividad del desarrollador. Es aconsejable revisar el código.
  • Menores. Falla de calidad que puede impactar ligeramente en la productividad del desarrollo. Es necesario revisar el código gradualmente.
  • Información. No es un error ni un defecto de calidad, es información por ejemplo, cuando se encuentra un lugar marcado donde se requiere algo más de código, pero que el desarrollador no implementó.

Duplicidad de código

El código repetido es una métrica básica de calidad, y junto con la complejidad ciclomática, es el mayor enemigo del mantenimiento, ya que:

  • Aumenta innecesariamente el número de líneas de código.
  • Normalmente esconde un problema de diseño software.
  • Implica que si existe una modificación a dicho código, se tendrá que actualizar en cada bloque duplicado.

Complejidad Ciclomática

La complejidad ciclomática proporciona la medida de la complejidad lógica de un programa, se define como el número de caminos independientes dentro de un fragmento de código que se deben realizar para asegurar que cada una de las sentencias dentro del código, se ejecute al menos una vez. A mayor complejidad, peor el rendimiento de ejecución de una rutina de código.

Configuración de Sonarqube 7.0

Guías de Instalación.

  • Ubuntu https://www.vultr.com/docs/how-to-install-sonarqube-on-ubuntu-16-04
  • CentOS https://www.vultr.com/docs/how-to-install-sonarqube-on-centos-7
  • CentOS, Sonar-Scanner https://www.vultr.com/docs/how-to-install-sonarqube-on-centos-7
  • Plugin SonarWeb https://docs.sonarqube.org/display/SONAR/Installing+a+Plugin

Resolución de problemas

Especificar la ubicación exacta de donde se encuentra instalado Java.

find / -name java
https://stackoverflow.com/questions/27562943/start-sonarqube-server-with-specific-jdk?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
Editar el archive /opt/sonarcube/conf/wrapper.conf

Elasticsearch, no ejecuta como usuario root.

https://michalwegrzyn.wordpress.com/2016/07/14/do-not-run-sonar-as-root/

Cambiar los permisos a la carpeta /opt/sonarqube/temp

Dar permisos de lectura y escritura al propietario de la carpeta: /opt/sonarqube/temp

Levantar los servicios de Postgres y Sonar

- root# systemctl start postgresql-9.6
- root# su – sonar
-bash-4.2-sonar$ systemctl start sonar
-bash-4.2-sonar$ netstat –tulpn    Este commando muestra si ya está levantado el servicio, buscar el Puerto 9000 o abrir un navegador en http://172.17.3.30:9000/sonarqube/

Abrir los puertos del Firewall de CentOS o Ubunto, para recibir peticiones al Puerto 9000

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7

sudo firewall-cmd --zone=public --permanent --add-port=9000/tcp

2.2 Tabla de usuarios y contraseñar

DescripciónIPUsuarioPass
Acceso a la consola del servidor
La contraseña la administra la Dirección de Infraestructura
172.17.1.1rootrrr
Postgress
Para levantar los servicios se require la contraseña de root, o habilitar el sudo
172.17.1.1 postgresppp
Sonarqube
Cuenta a la que están vinculados los servicios de SonarQube, una vez que se configure, no es necesario ingresar con este usuario.
sonarsss
Usuario para enviar a analizar código 172.17.1.1 usertestutut
Acceso Admin a la consola Web de SonarQube
Acceso con perfil de Admin, vía web
http://172.17.3.30:9000/sonarqube/adminsonar
Acceso como desarrollador, para consulta de los resultados de análisishttp://172.17.3.30:9000/sonarqube/developerdev

Guía para crear y analizar las métricas de código fuente.

Configuración del PATH

Agregar al archive .bash_profile, la siguiente línea, para localizar el directorio donde está el scanner:

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/opt/sonar/bin

Configurar y ejecutar un Nuevo proyecto

Acceder al servidor 172.17.1.1, con el usuario: usertest al directorio /home/ usertest/

Login:usertest 

Crear la siguiente estructura de directorio para el Nuevo Proyecto (PROY01):

[usertest @sonarq ~]$ mkdir sonar
[usertest @sonarq ~]$ cd sonar
[usertest @sonarq ~]$ mkdir PROY01
[usertest @sonarq ~]$ cd PROY01
[usertest @sonarq ~]$ mkdir src
[usertest @sonarq ~]$ cd ../

Crear el siguiente archivo en ese directorio:

[usertest @sonarq PROY01]$ nano sonar-project.properties
sonar.projectKey=proy01
sonar.projectName=proy01-web
sonar.projectVersion=web-1.0
sonar.sources=./src/
sonar.sourceEncoding=UTF-8
sonar.java.binaries=./WEB-INF/
Nota, no especificar lenguaje, para que tome ambos, código JSP como .Java. Copiar el archive .WAR compilado en la carpeta WEB-INF

Vía SFTP, subir la carpeta con todo el código Fuente en el directorio src

[usertest @sonarq src]$ pwd
/home/usertest/sonar/PROY01/src

Ejecutar el scanner

[usertest @sonarq PROY01]$ pwd
/home/usertest /sonar/PROY01
[usertest @sonarq PROY01]$ sonar-scanner

Esperar resultados

Una vez que se haya concluido el escaneo del código, deberá mostrar la siguiente salida:

INFO: ------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------
INFO: Total time: 20.175s
INFO: Final Memory: 27M/938M
INFO: ------------------------------------------------------------

Analizar los resultados.

Ingresar a la aplicación Web de SonarQube en http://172.17.1.1:9000/sonarqube/, con el usuario usertest :

Si el código Fuente ya se terminó de analizar, se tiene acceso al dashboard de resultados:

Ver detalles del análisis

El analista debe interpreter los siguientes resultados: