El valor del código de alta calidad puede ser difícil de comunicar, ya que algunos gerentes los ven como una perdida de tiempo y dinero, debido a que invertir en calidad del código puede retrasar el desarrollo a corto plazo y no parece cambiar la experiencia de usuario.
Si bien algunas empresas con una mala compresión organizativa de calidad de código pueden lanzarse rápidamente y ver el éxito a corto plazo, incurren en una deuda invisible que crece cada vez que se altera el código. Esta deuda no permanece intangible por mucho tiempo ya que una vez que la aplicación supera un tope muy bajo de complejidad, la deuda vence, consumiendo gradualmente la productividad del equipo de desarrollo y la usabilidad del software. Convirtiéndose en una deuda técnica para la empresa.
Las empresas que desarrollan software se dan cuenta que cualquier cosa que afecte el estado metal de un programador, ya sea una mala comunicación o referente a los incentivos asociados a su trabajo es probablemente que se refleje en su código. De modo que a fin de promover la calidad del código, se debe de mejorar la salud y la competencia dentro de las empresas que desarrollan software. Dentro de este artículo definiré que es la calidad de código y porque afecta a toda la empresa y daré algunos ejemplos de factores más importantes en la calidad del código.
¿Qué es la calidad del código?
El desarrollar una aplicación requiere una fuerte atención al detalle, debido a una serie de factores como: sintaxis, estructura, manejo de excepciones, resultados deseados, cuestiones técnicas y más. Estas necesidades pueden ser complejas que aun lo más experimentados pueden pasar horas, incluso días, buscando errores equivalentes a unos cuantos caracteres de código. Este tipo de tareas en ocasiones son agotadoras por el trabajo que conlleva y en aveces algunos desarrolladores recurren a una métrica simple: ¿hace el trabajo? Dado que el objetivo principal del código es hacer el trabajo, existen momentos en los que no se mira más allá de eso.
Sin embargo este tipo de enfoque no es viable para ninguno, sino para el mas pequeño de los proyectos. Existen muchas formas de escribir cualquier tarea de cálculo, y algunas son más simples que otras. La diferencia aquí se suman con el tiempo. Ya que el código se escribe una vez y se lee infinidad de veces. Los desarrolladores leen código cuando están agregado funcionalidades o corrigiendo errores. Leen código de múltiples maneras, desde recordar cómo funcionan las aplicaciones hasta buscar patrones que puedan ser reutilizados en otras partes. Lo único que se hace para desarrollar más a menudo que leerlo es ejecutarlo. Esta es la razón fundamental por la que nos preocupamos por la calidad del código. La utilidad de un fragmento de código, tiene mucho que ver con su impacto en las personas que lo leerán. Cuando se escribe un buen código, le estamos ahorrando tiempo y esfuerzo a la persona encargada. Estamos facilitando sus trabajos. Estamos haciendo una inversión que pagará dividendos día tras día, año tras año, hasta que la aplicación llegue al final de su vida útil.
Así que no basta con hacer que el código funcione sino también este debe de contar con una buena calidad que ayude acelerar los procesos en un futuro.
¿Cómo verificar la calidad del código?
Para dar una visión general, el código de alta calidad es un código que se puede entender rápidamente. Si un programador puede elegir un método o clase de una base de código al azar y entenderlo completamente en pocos minutos, no solo su funcionalidad y lógica empresarial, sino todo de lo que depende y en todas las formas en que se pueda usar, sin consultar demasiados otros archivos, entonces el código fuente es probablemente de alta calidad. Una vez logrado esto, la cuestión de si el código funciona correctamente es mucho menos preocupante; ya que se puede cambiar, arreglar o eliminar sin mucho riesgo o esfuerzo.
Sí bien sabemos que en una aplicación del mundo real siempre habrá piezas que sean inevitablemente complejas o confusas. No existirá ninguna situación en la que en la que la calidad del código esté completamente fuera de las manos del programador, siempre y cuando cuente con buena calidad.
Algunos de los factores más importantes en la calidad del código son:
- Encapsulación. El código de alta calidad se compone con mayor frecuencia de componentes autónomos: uno no puede cambiar el comportamiento de un componente autónomo modificando algo fuera de él, ni el componente modifica las cosas que son externas a él. Esto ahorra tiempo de desarrollo debido a que cuando un componente necesita ser actualizado, arreglado o eliminado, basta con enfocarse en ese único componente.
- Código idiomatico. Los lenguajes de programación actuales tienen sintaxis y métodos integrados para las tareas comunes, como validar si una colección tiene elementos nulos, convertir diferentes tipos de datos, realizar operaciones, etc. Esas sintaxis y métodos ayudan en la confiabilidad, eficiencia, reducción de código y ademas son rápidamente entendidos por los desarrolladores a comparación de un código con un método personalizado. Un código escrito idiomáticamente utiliza convenciones y características integradas de un idioma tanto como sea posible, beneficiando en la legibilidad y un menor mantenimiento del código.
- Nombres significativos. Los métodos y variables a lo largo una base de código son nombrados por los desarrolladores que los escriben. Los nombres sin sentido como ‘x’ o ‘fn’, requiere que el desarrollador entienda y recuerde el contexto de ese código. Si existen más de estos en un solo lugar, se vuelve difícil y complejo mantener todo en la memoria del trabajo. El código de alta calidad utiliza nombres de variables específicos y descriptivos como ‘obtieneIngresosPorFecha’ o ‘reporteTrimestralClientes’. No obstante aunque es imposible ser demasiado detallado aquí, un desarrollador que lee el código por primera vez le será de gran ayuda leer un nombre que dice demasiado que uno que dice demasiado poco.
- Baja complejidad ciclomática. La «complejidad ciclomática» es una métrica que se refiere al número de decisiones que existen en un proceso. Aunque las desiciones son parte esencial dentro de una aplicación, el código de alta calidad minimiza los puntos de decisión y el código que contienen, y evita anidarlos entre sí tanto como sea posible.
Conclusión
Es de suma importancia tener en cuenta que, si bien la calidad del código incluye algunos factores que se pueden medir, cada medida concreta de la calidad del código es imperfecta y fácil de jugar. No existe ninguna herramienta que pueda calificar de forma automática y definitiva la calidad de una base de código. Sin embargo, hay heurísticas que puede usar para hacerse una idea de la calidad del código y ver dónde pueden estar los problemas.
Pruebas unitarias sirven para probar el comportamiento de una aplicación de manera rápida y repetible, asegurando que la aplicación continúe funcionando correctamente a medida que crece y cambia. Es más probable que las pruebas unitarias acompañen al código de alta calidad que al código de baja calidad. Este tipo de pruebas recompensan y fomentan la calidad, ya que las cosas que hacen que el buen código (encapsulación, concisión, simplicidad, etc.) también facilitan las pruebas. Reduciendo la resistencia de manera significativa para los desarrolladores ya que a veces será más fácil simplificar y reorganizar ese código que probarlo en su forma actual. Y también incentivara a los desarrolladores a escribir un mejor código si las pruebas unitarias son una parte estándar del proceso.