5 formas automatizadas de garantizar la calidad del código

🇺🇸 English version here 🇺🇸.

Asegurar la calidad del código es esencial, y como QAE o SDET, debes proporcionar herramientas automatizadas a tu equipo para garantizarla. Aunque muchos consideran que esto es un problema estético o de estilo, puede afectar la productividad y conducir a decisiones equivocadas. Esta cuestión es tan importante que numerosos referentes en programación no pierden oportunidad para resaltarlo:

“La proporción de tiempo dedicado a leer y escribir es de más de 10 a 1. Constantemente leemos código antiguo como parte del esfuerzo por escribir código nuevo. Hacer que sea fácil de leer hace que sea más fácil de escribir”.

Robert C. Martin (El tío Bob).

“Cualquier tonto puede escribir código que una computadora pueda entender. Los buenos programadores escriben código que los humanos pueden entender”.

Martin Fowler.

Este artículo le presenta estos conceptos; en artículos futuros, te mostraré cómo implementarlos técnicamente.

1. Gestión de dependencias

Tu proyecto debe utilizar un software de gestión de dependencias actualizado que automatice todo lo necesario para que el proyecto funcione sin intervenciones manuales.

2. Guías de estilo de código

Cada desarrollador tiene su estilo particular de codificación, por lo que es esencial comprometerse con guías de estilo para estandarizar el código. Implementa herramientas que formateen el código mientras lo escribes, como plugins para el IDE, y configúralas para aplicarse automáticamente durante los procesos de pre-commit y pre-push.

Para proyectos legados o proyectos con bases de código extensas, lo mejor es aplicar el análisis de estilo solo al código cambiado recientemente según el sistema de control de versiones (CVS o git). Añade sistemas de linting para lenguajes auxiliares del proyecto como CSS, SQL, XML, JSON, etc.

3. Análisis de código estático – SonarQube

El plugin SonarLint, disponible para casi todos los IDEs, te ayudará a estandarizar el código y prevenir code smells y errores de lógica (no errores de reglas de negocio) mientras lo escribes. Mientras tanto, SonarQube ofrece un análisis más profundo para mejorar la legibilidad, mantenibilidad, seguridad, duplicación de código y cobertura de pruebas, proporcionando soluciones.  

SonarQube no es una herramienta de análisis de seguridad, pero ayuda a reducir la probabilidad de exposición.

4. Prevenir la promoción de código no estandarizado

GitHub actions

Como QAE o SDET, debes implementar la gestión de caché para obtener resultados rápidos. Recuerda, la mejor prueba es la que entrega resultados más rápido. Configura para que la fusión del código se habilite solo después de pasar el linter y las pruebas unitarias.

Revisión por pares

El desarrollador debe incluir una captura de pantalla del Quality Gate de SonarQube en cada PR. Esto ayuda a que los revisores se concentren en proporcionar mejoras reales, no en problemas que las herramientas podrían haber señalado. La revisión debe realizarse por al menos dos personas, incluido el líder técnico. Si el código carece de pruebas unitarias, el segundo revisor debe ser el ‘padrino’ del módulo afectado. Configura para que la fusión se bloquee hasta obtener las aprobaciones requeridas.

5. Jenkins y otros sistemas de integración continua

Como QAE o SDET, es crucial implementar la gestión de caché para optimizar el proceso de integración continua. Asegúrate de que las reglas se apliquen tanto en el CVS como en el sistema de integración continua para evitar su omisión. Aunque pueda parecer repetitivo, el sistema de integración continua ejecutará menos pruebas que el CVS. Por último, habilita la generación de informes del sistema de integración continua para monitorear eficazmente el control de calidad.

Oportunidad para desarrollar habilidades en los equipos de ingeniería

Sugerencias para usar otros estándares

Evalúa las opciones propuestas en equipo, considerando las características de los estándares, como el tamaño de la comunidad y la frecuencia de sus mejoras.

Implementación de reglas específicas

Esta es una oportunidad para que el equipo crezca. El miembro del equipo que sugiera el cambio debe promoverlo dentro del estándar, desarrollando habilidades sociales y técnicas que beneficiarán tanto al equipo como a su futuro.

ANEXO: Tabla de tecnologías recomendadas

La siguiente tabla presenta una lista de tecnologías que te permitirá ampliar tu conocimiento mientras publico los próximos artículos detallando cada paso de la implementación.

TipoLenguajeSolución
Gestión de DependenciasJavaMaven o Gradle
 JavaScriptNpm o Yarn
 PythonPoetry
Estilo / LinterTodosAplicar básicos en el editorconfig. La mayoría de los IDEs pueden leer este archivo de forma natural
 JavaEstilo Guava aplicado con diffplug.spotless
 JavaScriptEstilo Airbnb aplicado con Eslint junto con Prettier
 PythonPyLint + Black
Plugins para el IDEJavaSonarLint
 JavaScriptEslint, SonarLint
 PythonPyLint, SonarLint
Pre-CommitJavaGitbuildhook
 JavaScriptHusky
 Pythonpre-commit

Fuente

Fuente propia.

Author: Alex Andrade

Magister Ingeniería de Software, MBA y Especialista en Gerencia de Proyectos Tel: +57-317-241-5118

5 comentarios en «5 formas automatizadas de garantizar la calidad del código»

  1. Gestión de dependencias: Es fundamental contar con un sistema de gestión de dependencias que facilite la actualización y el control de las librerías utilizadas en el proyecto. Esto no solo ahorra tiempo sino que también minimiza los errores derivados de dependencias incompatibles o desactualizadas.

    Guías de estilo de código: La adopción de guías de estilo solidifica la base del código, favoreciendo la legibilidad y la mantenibilidad. Automatizar el formateo del código durante las etapas de desarrollo es una práctica excelente que ayuda a establecer estándares desde el principio y evita conflictos de estilo entre los desarrolladores.

    Análisis de código estático – SonarQube: Integrar herramientas como SonarLint y SonarQube es una estrategia inteligente para detectar problemas en el código antes de que lleguen a producción. No solo ayudan a mejorar la calidad, sino que también educan a los desarrolladores sobre las buenas prácticas de codificación y refuerzan la importancia de la seguridad en el desarrollo.

    Prevención de la promoción de código no estandarizado: Usar GitHub Actions para automatizar la verificación del código antes de su fusión es clave para mantener altos estándares de calidad. Además, la revisión por pares, con un enfoque estructurado, no solo mejora la calidad del código, sino que también fomenta el aprendizaje entre los miembros del equipo.

    Jenkins y otros sistemas de integración continua: La implementación de CI/CD permite a los equipos realizar pruebas y despliegues más frecuentes y seguros. La gestión de caché, así como la generación de informes, son prácticas que optimizan el proceso y aseguran que los estándares se mantengan a lo largo del tiempo.

    Oportunidad para desarrollar habilidades en los equipos de ingeniería: Promover la revisión y adaptación de estándares permite que los equipos no solo mejoren su técnica, sino que también desarrollen habilidades interpersonales. Fomentar un ambiente de propuesta y evaluación entre pares es crucial para el crecimiento profesional.

    Responder
  2. ¡Gracias, Alex, por compartir estas estrategias tan útiles para garantizar la calidad del código! Explicación clara y herramientas prácticas

    Responder
  3. Me pareció muy acertado cómo el artículo destaca la importancia de asegurar la calidad del código desde el rol del QAE o SDET. A veces uno cree que todo se trata solo de que funcione, pero cuando el código no está bien estructurado o es difícil de leer, a la larga termina afectando al equipo completo. Me gustó mucho la frase de Martin Fowler sobre escribir código para que lo entiendan los humanos, porque eso es lo que marca la diferencia cuando se trabaja en equipo. En mi experiencia, tener herramientas como linters, SonarQube o hasta algo tan básico como una buena guía de estilo realmente mejora el flujo de trabajo y evita muchos errores tontos. Siento que este enfoque no solo ayuda con la calidad técnica, sino también con la colaboración y el aprendizaje entre desarrolladores.

    Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.