Code Review o "Las Revisiones de Código", el arte que debes de aprender

Code Review o "Las Revisiones de Código", el arte que debes de aprender

Las revisiones de código son una parte fundamental del desarrollo de software moderno, permitiendo no solo identificar errores sino también mantener la calidad, transferir conocimiento y reforzar la cohesión del equipo. No obstante, el proceso no está exento de desafíos. Exploraremos los principios clave detrás de revisiones exitosas desde perspectivas técnicas y humanas.

¿Qué son las revisiones de código y por qué importan?

Las revisiones de código:

  • Detectan errores que, en el ajetreo del desarrollo, el autor pudo haber pasado por alto.

  • Comparten conocimiento sobre las particularidades y cambios en el código. Por ejemplo, si un miembro introduce una nueva función, todos deben entender su propósito y funcionamiento.

  • Mantienen consistencia y calidad, asegurando que el código cumpla con los estándares del equipo y las mejores prácticas de la industria.

  • Refuerzan la cohesión y colaboración del equipo, permitiendo que todos tengan una voz en la evolución del código.

Los peligros de las malas revisiones

Una revisión de código deficiente puede ser tanto un síntoma como una causa de problemas en el equipo. Algunos malos hábitos a tener en cuenta incluyen:

  • Enfocarse en detalles insignificantes: Como obsesionarse con la elección de nombres de variables en lugar de la lógica detrás del código.

  • Ser demasiado autoritario: Por ejemplo, exigir cambios sin explicación o rechazar soluciones basándose únicamente en preferencias personales.

  • Dar retroalimentación vaga o ambigua: Comentarios como "Esto no parece bien" sin especificar por qué.

  • No fomentar preguntas y diálogo: Cuando un revisor no está dispuesto a aclarar dudas o explicar sus observaciones.

La ciencia de comunicar efectivamente en una revisiones técnica

Un revisor eficaz necesita experiencia técnica. Esto no significa solo conocer un lenguaje de programación, sino también:

  • Entender el contexto: ¿Qué problema está tratando de resolver este código? ¿Se alinea con los objetivos del proyecto?

  • Revisar el rendimiento: ¿El código introducirá algún cuello de botella o ineficiencia?

  • Considerar la seguridad: Es vital revisar si el código puede exponer datos sensibles o introducir vulnerabilidades.

  • Evaluar modularidad y claridad: El código debe ser limpio y estructurado de manera que futuros desarrolladores puedan entenderlo y mantenerlo.

En mi caso particular, todos los Pull Requests que se generan en los proyectos en que actualmente estoy trabajando siguen esta nomenclatura:

## PR Description
Please include relevant context and motivation about this issue/feature.

## Describe your solution
Describe in simple words how your solution work.

## Ticket ID (URL)
Please provide the ticket url related this PR (if exist).

## Type of change
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Docs change / refactoring / dependency upgrade

## Checklist:
- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream modules
- [ ] I have checked my code and corrected any misspellings
- [ ] Naming of methods, variables and classes is proper
- [ ] Errors are handled

## Did you test this fix/feature on all browsers?
Yes, ensured with all the following browsers:

- [ ] Chrome
- [ ] Firefox
- [ ] Edge
- [ ] Internet Explorer
- [ ] Brave
- [ ] Safari

Adicionalmente, puedes utilizar algunas de las herramientas de revisión de código, que entra las más populares funcionan de forma automática al momento de crear los Pull Requests.

  • Code Climate: Code Climate es una herramienta de revisión de código basada en la nube que proporciona análisis de calidad del código, comentarios automatizados y seguimiento del progreso.

  • SonarQube: SonarQube es una herramienta de revisión de código de código abierto que proporciona análisis de calidad del código, informes y seguimiento del progreso.

  • Codecov: Codecov es una herramienta de cobertura de código que puede ayudar a los equipos a garantizar que su código esté bien probado. Codecov proporciona informes de cobertura detallados que pueden ayudar a los desarrolladores a identificar las áreas del código que no están cubiertas por pruebas.

  • Codacy: Codacy es una herramienta de revisión de código automatizada que puede ayudar a los equipos a identificar problemas en su código, como errores sintácticos, problemas de estilo y posibles vulnerabilidades de seguridad. Codacy proporciona comentarios detallados que pueden ayudar a los desarrolladores a corregir los problemas rápidamente.

  • CodeFactor: CodeFactor es una herramienta de revisión de código automatizada que utiliza inteligencia artificial para ayudar a los equipos a encontrar problemas en su código. CodeFactor proporciona comentarios detallados que pueden ayudar a los desarrolladores a corregir los problemas rápidamente.

Y estas son solamente algunas porque en realidad hay muchas herramientas que pueden ayudar en este fin, una simple recomendación es siempre tener en cuenta tu presupuesto, el tamaño del equipo y el tamaño del proyecto, ya que son factores importantes a la hora de implementar las revisiones de código automatizado, obviamente la mayoría de estar herramientas solamente evalúan el código analizando las buenas prácticas, por lo que las revisiones manuales es algo que "siempre" debe de ocurrir.

Promoviendo una cultura colaborativa

Establecer un ambiente positivo para las revisiones de código es crucial. Algunas estrategias para lograrlo son:

  • Crear guías de revisión: Establecer normas claras sobre qué esperar de una revisión ayuda a alinear las expectativas y minimizar conflictos.

  • Sesiones de revisión en persona o virtuales: A veces, discutir el código cara a cara puede ser más eficiente y menos propenso a malentendidos que por escrito.

  • Capacitación en habilidades blandas: Fomentar cursos o talleres sobre comunicación efectiva y retroalimentación constructiva.

  • Rotación de revisores: Esto ayuda a distribuir el conocimiento, reduce el sesgo y evita que una única perspectiva domine.

Ejemplos sobre el código

Ejemplo de mala práctica:

var name = "John"

function greet() {
  console.log("Hello " + name); 
}

greet();

Comentario no constructivo: "No uses var, es obsoleto".

Mejor retroalimentación: "Considera usar const en lugar de var para mejorar el alcance y la claridad. Aprecié cómo mantuviste el código simple y limpio".

Ejemplo de buena práctica:

const name = "John";

function greet() {
  console.log(`Hello ${name}`);
}

greet();

Comentario constructivo: "Excelente elección con const y template strings. Si planeamos utilizar diferentes saludos, quizás podríamos considerar una función que permita variabilidad en el mensaje".

Gestionar desacuerdos en las revisiones de código

Aunque las revisiones de código son una herramienta esencial, es inevitable que surjan desacuerdos. Gestionarlos adecuadamente es clave para mantener un ambiente de trabajo saludable:

  • Busca entender antes de ser entendido: Asegúrate de entender completamente el punto de vista del otro antes de presentar tu argumento.

  • Evita el lenguaje absoluto: Usar palabras como "siempre" o "nunca" puede ser confrontativo.

  • Enfócate en el código, no en la persona: Las revisiones deben centrarse en el trabajo realizado y no en quien lo realizó.

  • Si es necesario, involucra a un tercero: A veces, un punto de vista externo puede ayudar a resolver desacuerdos.

Conclusión

Realizar revisiones de código efectivas no es solo una habilidad, es un arte. Se trata de combinar la maestría técnica con la habilidad interpersonal. Al equilibrar estos aspectos, los equipos no solo producen código de alta calidad sino que también fomentan un ambiente de respeto, aprendizaje y colaboración. A través de la práctica consciente y la retroalimentación constructiva, podemos convertir las revisiones de código en una herramienta poderosa para la excelencia en el desarrollo.

Las revisiones de código deben ser siempre respetuosas, incluso si se identifican problemas. Los autores del código deben sentirse cómodos recibiendo comentarios constructivos, yo sé igual que muchos developers cuán difícil es revisar código o recibir comentarios, pero hay que aprender a hacerlo y hacerlo bien.

Happy coding! :D


Photo by Wolfgang Hasselmann on Unsplash

Jack Fiallos

Jack Fiallos

Te gustó este artículo?