21

Qué es SonarCloud y cómo mejora la calidad de tu código

8688Puntos

hace 2 años

Todos quisiéramos producir código seguro, mantenible y libre de bugs. Pero esto puede ser difícil de lograr, pues sin darnos cuenta se nos puede escapar una mala práctica porque no verificamos correctamente el input de algún usuario y esto puede ocasionar una vulnerabilidad en nuestra aplicación.

Por esto mismo, podemos aplicar SAST -Static Application Security Testing- o pruebas estáticas de seguridad de aplicaciones. Esto es una práctica que se enfoca en analizar el código fuente de las aplicaciones y no en la ejecución real del código (análisis dinámico).

Al analizar nuestro código contra una serie de reglas predefinidas y buenas prácticas conocidas, podremos lograr una detección temprana de problemas de desarrollo. Todo, antes de mandarlo a un ambiente de pruebas, staging o a producción donde se pueda garantizar que lleguen menos problemas a las etapas posteriores del proceso de desarrollo y el código tenga una mejor calidad.

Qué es SonarCloud

SonarCloud es un servicio de análisis estático de código basado en la nube y que lo ofrece la empresa responsable de SonarQube, uno de los servicios on-premise más conocidos y utilizados para realizar SAST, diseñado para detectar problemas de calidad de código en 25 lenguajes de programación diferentes.

Además de medir la seguridad de nuestras aplicaciones, nos ayuda a mejorar la mantenibilidad y confiabilidad de nuestro código. SonarCloud se integra con los siguientes servicios que manejan repositorios con base en git:

  • GitHub
  • GitLab
  • Bitbucket
  • Azure DevOps

Conceptos sobre SonarCloud

Esta herramienta ejecuta análisis del código de los Pull Request/Merge Request que efectuemos de nuestras ramas hacia la rama master/main o las ramas que definamos como importantes. Después de hacer su análisis, SonarCloud puede dejar un mensaje indicando si encontró algún problema en el código o si no cumple con algún estándar de calidad previamente definido para evitar que se haga merge con la rama objetiva.

Métricas

SonarCloud mide diferentes aspectos del código que van desde buenas prácticas hasta vulnerabilidades de seguridad. Puedes consultar el conjunto completo de definiciones de SonarCloud en la documentación oficial, pero las principales que se muestran en el panel de control de SonarCloud son:

  • Bugs: error que romperá tu código y debe corregirse de inmediato.
  • Code Smells: problema de mantenibilidad que hace que tu código sea confuso y difícil de mantener.
  • Vulnerabilities: punto en su código que está abierto a ataques.
  • Security Hotspot: este es un fragmento de código que puede ser sensible en términos de seguridad y que un desarrollador debe revisar manualmente. Tras la revisión, se puede marcar si es o no una posible amenaza de seguridad.
  • Coverage: esto le indica qué porcentaje de su código está cubierto por sus tests unitarios.
  • Duplications: número de bloques de líneas duplicados.

Quality Gate

Quality Gate es el indicador de que el código cumpla con un conjunto de requisitos de calidad y seguridad (determinados por nosotros) y puede realizarse merge. Esto lo hace determinando los valores de las distintas métricas descritas previamente.

1.png

Ejemplo de cómo la interfaz web de SonarCloud muestra que un Quality Gate falló.

2.png

Ejemplo de cómo SonarCloud muestra que un Quality Gate pasó dentro de un PR en GitHub.

SonarCloud lo describe como:

Una Quality Gate es un conjunto de condiciones booleanas basadas en métricas. Le ayuda a saber inmediatamente si su proyecto está listo para producción. Si su estado actual no es Aprobado, verá qué medidas causaron el problema y los valores necesarios para aprobar.

Código nuevo vs. código general

Cuando configuras un nuevo repositorio en SonarCloud el primer análisis que ejecuta y los resultados de este análisis se catalogan como el estado del “Código General”. Este se utiliza para conocer el estado actual de la calidad de todo el código del repositorio, pero no afecta a los Quality Gates ni puede bloquear el lanzamiento de nuevas funcionalidades hasta que se resuelvan todos los hallazgos.

Después de este primer análisis, SonarCloud escaneará el código agregado en cada nuevo PR y los resultados de estos escaneos se emplearán para calcular si se pasó o no el Quality Gate y ese PR se puede fusionar y eventualmente implementar.

Así es como se ven las pestañas Código general y Código nuevo:

3.png

Pestaña Código general que muestra el estado actual y todos los hallazgos de este repositorio.

4.png

Nueva pestaña Código que muestra solo los resultados del último PR fusionado de este repositorio.

Como ves, en cada pestaña las métricas tienen valores diferentes. Por ejemplo, Quality Gate está fallando porque la métrica de cobertura de tests no se cumple para las nuevas líneas de código agregadas, aunque la cobertura de prueba de código general está por encima de la métrica.

Cómo acceder y utilizar SonarCloud

Ahora que ya entiendes los principales conceptos de SonarCloud que podemos conectarlo con nuestros repositorios y empezar a probarlo.

Nota: este servicio es gratuito solo para repositorios públicos, si deseas usarlo en un repositorio privado debes adquirir uno de sus planes.

  1. Para conectar SonarCloud con un repositorio en GitHub, puedes ir a entrar e iniciar sesión con la cuenta de GitHub. Después, brinda los permisos necesarios a SonarCloud desde tu cuenta de GitHub y serás redirigido a esta vista
5.png
  1. Importa una nueva organización (puede ser tu misma cuenta de GitHub con tus repositorios personales) y ahora podrás traer los repositorios de la organización -llamados proyectos por SonarCloud- y consultar los resultados de los escaneos de cada uno haciendo clic en ellos.
6.png
  1. Si haces clic en un proyecto, verás un resumen del estado actual y los resultados de los últimos escaneos realizados en este repositorio. Por ejemplo, esta es la vista de un repositorio de mi cuenta personal:
7.png
  1. Puedes obtener más detalles haciendo clic en See Full Analysis (ver análisis completo), desde allí puede ver cada uno de los hallazgos
7.5.png
  1. El último PR parece que estuvo perfecto, no se encontró ningún problema. Pero, si vamos a la pestaña para ver el estado general del código, podemos ver que existen algunos problemas de bugs y code smells.
8.png
  1. Si haces clic en Code Smells puedes ver qué problemas ha encontrado SonarCloud. Cada problema viene con una explicación detallada de por qué es un problema y, a veces, cómo resolverlo; el nivel de gravedad del problema.
9.png

En este caso, el marco como un code smell dice que la complejidad cognitiva de una función es muy alta y puede dificultar que otro desarrollador lo entienda fácilmente.

A su vez, existe una funcionalidad que es fácil de ignorar, pero es realmente importante. Hay opciones para agregar comentarios y marcar algún problema encontrado como “confirmado”, “solucionado”, “falso positivo” o “no se arreglará”.

Esta las puede usar el desarrollador quien tiene más contexto sobre el código y ayudaría a tener unas métricas más acertadas sobre el estado de nuestro código.

10.png

Sigue aprendiendo sobre seguridad de código junto a Platzi

Hemos aprendido sobre cómo mejorar la seguridad de nuestras aplicaciones con lo siguiente:

  • ¿Qué es SAST?
  • ¿Qué es SonarCloud?
  • Cómo escanear nuestros repos e implementar SAST configurarndo SonarCloud en GitHub

Si quieres seguir aprendiendo sobre otros tipos de pruebas que puedes implementar para mejorar la calidad de tu código, puedes ver nuestro Curso de Fundamentos de Pruebas de Software.

De igual forma, te habrás dado cuenta de que esto se integra con nuestro flujo de desarrollo y automatiza la realización de ciertas pruebas, esto hace parte de una práctica más extensa llamada DevOps, de la cual puedes aprender en nuestro Curso Profesional de DevOps.

Por último, como te puedes imaginar, existen otras herramientas que pueden realizar SAST, una de estas las integra directamente GitLab y la puedes explorar en nuestro Curso de DevOps con GitLab.

También puedes visitar la documentación oficial de SonarCloud donde puedes explorar a mayor profundidad el funcionamiento de SonarCloud.

Juan José
Juan José
Juanjo

8688Puntos

hace 2 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
4

Yo no recomendaría esto, ya que Sonarqube es una herramienta abierta, porque deberías pagar por ello?
Mejor les recomiendo instalar Sonarqube desde su lado.
Bajan una imagen de docker, la ponen a correr y listo.
Tan fácil como ponerla en un EC2 ó tu propio servidor, 100% gratis y sin pagar a SonarCloud.

1
19774Puntos
2 años

Estoy de acuerdo, así es como siempre lo he utilizado.

1
8688Puntos
2 años

Solo se brindan más opciones, algunos prefieren un servicio managed a uno que tengan que mantener por sí mismos. Igual para repositorios privados, SonarQube casi que te forza a pagar también por las limitantes que pone y ahí tiene mejor ROI SonarCloud ya que los precios son más baratos y no tienes que administrar un servidor adicional por tu cuenta.

1
9183Puntos
2 años

A mi me encanta SonarQube, pero las limitaciones en sus ediciones gratuitas son demasiado grandes ¿¿Que no se puedan analizar ramas…?? y las versiones de pago no son precisamente baratas…

Una pena, un software super bueno que vale la pena pagarlo, pero no con esas imposiciones…

2
50950Puntos

Interesante artículo, recién me entero de SonarCloud y me pareció una herramienta que vale la pena poner a prueba. También me impulsó a continuar con el Curso de Fundamentos de Pruebas de Software. Gracias @Juanjo.

1
8Puntos

SonarCloud allows you to analyze your code through an appropriate SonarScan agent and easily record the results in a centralized location. Your team can then access a quick and simple interface to evaluate their code and take informed decisions on how to proceed.

1
44432Puntos

yo tampoco conocia de SonarCloud 😳

1
3572Puntos

Interesante la pagina, no la conocía y ahora pienso que puede ser algo necesario de hacer con un código, bastante útil la información