Los estándares se encuentran constantemente presentes en nuestra vida cotidiana, son importantes para mantener un cierto orden en las cosas. La Ingeniería de Software no es una excepción a la regla, por lo tanto, los estándares de código son un requisito básico para los sistemas de calidad.
Para las organizaciones de nuestra época, el correcto funcionamiento de sus aplicaciones digitales representa crecimiento, y eso es algo que Linio ha logrado.
¿Qué son los estándares de código?
Los estándares de código son una serie de reglas definidas para un lenguaje de programación, o bien, un estilo de programación específico. El estilo garantiza que todos los ingenieros que contribuyen a un proyecto tengan una forma única de diseñar su código, lo que da como resultado una base de código coherente, lo que asegura que el producto sea fácil de leer y mantener.
El uso de estándares es muy importante en la calidad de software, sin embargo el mantener todos los proyectos cumpliendo a la perfección con los estándares establecidos no es una tarea fácil, requiere un gran esfuerzo y constancia por parte del equipo de desarrollo. Mientras más y más compañías han adoptado estándares, todavía hay aquellas que comienzan el desarrollo de nuevos proyectos sin ellos.
Estándares de código en Linio
En Linio, los primeros días, no teníamos un estándar de código establecido y era el pan de cada día que los desarrolladores escribieran código a su modo, dando como resultado un repositorio difícil de entender y por tanto difícil de mantener, todavía recuerdo las horas que pasamos buscando un problema antes de estar siquiera cerca de donde podría haberse originado, debido a la falta de un código organizado.
“Roma no fue construida en un día.” la migración de Linio a las buenas prácticas ha sido progresiva, no fue de la noche a la mañana, se comenzó a adoptar en los nuevos proyectos y poco a poco se fue exigiendo un nivel adecuado en cada cambio que se enviaba a nuestros repositorios, en un inicio fue difícil adaptarnos, el contraste entre no tener reglas establecidas para la revisión de código antes, y la necesidad de contar con un número de aprobaciones en nuestros pull request ahora, fue un cambio que no todos tomaron de forma natural, a algunos les llevó más tiempo que a otros.
Actualmente, adoptamos estándares oficiales y tambien procesos de integración continua que verifican el estilo del código. Para nuestro código PHP, utilizamos php-cs-fixer para formatear automáticamente nuestro código antes de intentar enviarlo al repositorio, en lugar de que los ingenieros lo hagan a mano. Hay procesos por mejorar pero es un esfuerzo continuo y seguimos trabajando en ello.
Como implementar estándares de código en proyectos existentes
No todas las compañías utilizan las mismas herramientas en sus desarrollos y es muy complicado que se encuentre un estándar ideal que se adapte a nuestras necesidades especificas, por ello, para estar todos en el mismo canal es recomendable establecer un grupo de estándares propios, es decir, crear tu propio repositorio de estándares es un buen comienzo para lograr código de calidad.
Consideraciones:
-
Tomar como base estándares oficialmente publicados de las herramientas que se utilizan en cada proyecto.
-
Para obtener un código de fácil lectura es necesario poner atención al estilo del mismo; segmentos de código, correcto uso de indentación, longitud de lineas y espacios entre ellas.
-
Asignación de nombres en variables, funciones, etc.
-
Establecer límites en complejidad o longitud de funciones.
Y lo más importante, no detenerse en la aplicación de estas reglas, no incrementemos la deuda técnica en nuestros proyectos, quizá al día de hoy tengas un proyecto muy grande en el que jamás se han aplicado estándares y te parece una pérdida de tiempo comenzar a hacerlo, pero es una inversión que vale la pena, para ir construyendo no sólo un producto de calidad, sino también un equipo de ingeniería con calidad. Si la implementación de estos estándares comienza a ser un verdadero dolor de cabeza, es muy recomendable considerar una refactorización completa de tu sistema. “Divide y vencerás” es recomendable iniciar módulo por módulo.
Ventajas de la implementación de estándares:
-
Detección temprana de fallas:
Al buscar cumplir con los estándares que establecimos ha sido más sencillo detectar posibles errores desde la revisión de código, evitando que estos problemas lleguen a producción.
-
Reducción de la complejidad:
El cumplir con las reglas acerca del estilo de código ayuda a construir código más limpio, permitiéndonos detectar fácilmente oportunidades para simplificar nuestras funciones.
-
Código de fácil lectura:
El respetar los estándares en nuestros proyectos le ha permitido a nuevos miembros del equipo acoplarse más fácilmente al ritmo de trabajo y a entender mejor el código en los repositorios.
-
Código reusable:
Contamos con segmentos de código que pueden ser consumidos por más de un servicio, gracias al uso de buenas prácticas, haciendo menos frecuente la repetición de código.
Principios de código limpio recomendados:
Es una buena estrategia buscar que todo el equipo de ingenieros esté familiarizado con principios de código limpio, por ello a continuación se enlistan algunos de los principios que nos inspiraron a crear nuestros estándares y a buscar calidad en nuestros desarrollos.
- DRY - Don’t Repeat Yourself.
- YAGNI - You Aren’t Gonna Need It.
- KISS - Keep it Simple, Stupid.
-
SOLID
S - Single-Responsiblity Principle.
O - Open-Closed Principle.
L - Liskov Substitution Principle.
I - Interface Segregation Principle.
D - Dependency Inversion Principle.
Conclusión:
La implementación de estándares en Linio dio como resultado:
- Una reducción entre el 60 y 80% en incidencias.
- Disminución en el número de despliegues de hotfix.
- Una mejora significativa en la calidad del equipo de desarrollo.
Como podemos ver la definición y el uso de estándares proporciona muchos beneficios, en mi experiencia disfruto más el trabajo desde que tenemos un enfoque hacia el código de calidad que antes cuando no había reglas establecidas y esto se ha dado gracias al trabajo de todos los ingenieros en el equipo, se trata de apuntar todos juntos a un mismo objetivo.