¿En algún momento de tu carrera profesional has tenido que trabajar con código legado, sin ningún tipo de testing implementado y al abrir cualquier clase del proyecto te has horrorizado? Se te han pasado por la cabeza frases como: “Es muy difícil incluir nueva funcionalidad en este proyecto”, “Ha pasado tanto desarrollador por ese proyecto que no se entiende nada” o “¿Cuánto me va a costar hacer cambios en este software?”. Bienvenido, este es tu artículo y vamos a descubrir cómo invertir en mejorar la deuda técnica y usar una de las herramientas de Análisis Estático más conocidas: SonarQube.
Actualmente, estoy en una empresa en la que trabajamos con muchos proyectos internos que debemos de mantener el propio equipo de desarrollo. Algunos de los proyectos se han externalizado a otras empresas y otros los han implementado desarrolladores que han pasado fugazmente por el equipo, sin ningún tipo de control de la calidad sobre el proyecto.
Por ello, hemos comenzado a invertir en el control de la calidad de los proyectos, en analizar el código para detectar grandes problemas, code smells, e incluir en nuestro procesos code reviews para mantener una calidad aceptable; un standard de codificación que nos permita que cualquier miembro del equipo pueda trabajar en el resto de proyectos sin dificultad.
Entre ciertas acciones que hemos implementado se encuentran incluir en nuestro workflow un analizador estático de código, en nuestro caso, hemos decidido usar SonarQube principalmente por recomendación de un compañero.
¿Que és SonarQube?
SonarQube es una herramienta de análisis estático que evalúa nuestro código fuente. Se trata de software libre que empleo diversos plugins de análisis estático de código fuente como Checkstyle, PMD o FindBugs para obtener métricas que pueden ayudar a mejorar la calidad del código de un desarrollo software y entender que problemas tenemos en nuestro código fuente.
Entre sus funciones están la de dar métricas acerca de código duplicado, pruebas unitarias, cobertura del código, potenciales errores o estándares. Inicialmente, la herramienta estaba pensada para Java pero acepta extensiones para otros lenguajes. En nuestro caso, lo estamos usando para analizar proyectos desarrollados en Symfony. Además, se integra correctamente con herramientas de integración continua como Jenkins, por lo que podemos automatizar este análisis cada vez que un desarrollador sube código.
Análisis Estático de Código
El análisis estático del código es el proceso de evaluar el software sin ejecutarlo. La idea de este análisis es que teniendo como entrada nuestro código fuente, podamos obtener información y métricas que nos permita mejorar la base de código detectando errores típicos de programación, bugs, code smells, etc. Esta herramienta nos hará sugerencias sobre que partes del código son mejorables.
¿Qué tipo de problemas podemos resolver?
Un análisis estático del código no es suficiente, necesitamos también otro tipo de herramientas como los tests unitarios para verificar el correcto uso y calidad de nuestro software, pero haciendo un análisis del código sin estar en ejecución podemos detectar elementos como:
- Problemas de Diseño: Podemos detectar problemas en el diseño y arquitectura del software analizando las dependencias entre las clases del proyecto. Esto nos permite actuar a tiempo frente a crear un enmarañado de clases totalmente acopladas y difícilmente reutilizables.
- Duplicidad de Código: Sonarqube nos proporciona métricas de código duplicado, pudiendo detectar partes de nuestro software se asemejan, pudiendo así tomar decisiones como desacoplar componentes o aplicar técnicas de refactoring utilizando el poliformismo, la herencia y la reutilización de componentes. Recuerda Don’t Repeat Yourself!
- Detección de Vulnerabilidades: Sonarqube cuenta con una base de datos de codesmells y errores típicos de programación que detectan si alguna línea de código puede estar cometiendo algún problema que pueda vulnerar la seguridad. Por ejemplo, a la hora de cómo recoger los parámetros o cómo usarlos en nuestras consultas para evitar SQL Injection.
- Standard de codificación: Avisándonos de partes del código que no cumplan con el PSR o incluyan malas prácticas a la hora de definir constantes, variables, llamadas a métodos estáticos.
- Monitorización de Cobertura: En nuestro caso también lo usamos para poder monitorizar si la cobertura de los tests es aceptable y de esta manera tener una visión global del estado de la cobertura de todos los proyectos e invertir en incrementar el volumen de tests del proyecto.
Conclusión
Hemos podido observar la potencia de la herramienta y de que con muy poquito esfuerzo podemos obtener grandes beneficios controlando el nivel de calidad de los proyectos para un futuro mantenimiento. Creo, personalmente, que es muy importante hacer este tipo de análisis cuando estás a cargo de mantener distintos proyectos software. Este tipo de técnicas es muy sencilla de implementar, y podemos obtener mucha información y resultados a cambio de nada.
Enlaces Interesantes
Os dejo varios enlaces que me han resultado muy interesantes acerca de este tema:
- http://raulexposito.com/documentos/analisis-estatico-codigo/
- http://enmilocalfunciona.io/automatizando-un-ciclo-de-control-de-la-deuda-tecnica/
- https://www.infobip.com/es/desarrollador/mejora-de-la-calidad-del-codigo-con-sonarqube
Extra Bonus:
Tras probarlo en nuestros proyectos recomiendo encarecidamente el uso del plugin SonarLint para los IDE de IntelliJ que proporciona en tiempo real feedback al programador de codesmells y bugs en el código.
Descargar Aquí: https://plugins.jetbrains.com/plugin/7973-sonarlint