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
CONCEPTO | VALOR MÁXIMO ACEPTABLE |
Complejidad Ciclomática a nivel de archivo | El 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 archivos | Má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ón | IP | Usuario | Pass |
Acceso a la consola del servidor La contraseña la administra la Dirección de Infraestructura | 172.17.1.1 | root | rrr |
Postgress Para levantar los servicios se require la contraseña de root, o habilitar el sudo | 172.17.1.1 | postgres | ppp |
Sonarqube Cuenta a la que están vinculados los servicios de SonarQube, una vez que se configure, no es necesario ingresar con este usuario. | sonar | sss | |
Usuario para enviar a analizar código | 172.17.1.1 | usertest | utut |
Acceso Admin a la consola Web de SonarQube Acceso con perfil de Admin, vía web | http://172.17.3.30:9000/sonarqube/ | admin | sonar |
Acceso como desarrollador, para consulta de los resultados de análisis | http://172.17.3.30:9000/sonarqube/ | developer | dev |
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: