Las metodologías ágiles permiten realizar proyectos con un alto nivel de calidad. Y cuando se habla de calidad de construcción de un producto no sólo nos referimos a construirlo con los procedimientos correctos, sino a construir el producto correcto.
La calidad, cuando se trabaja en ágil, nunca es negociable. Hay otros factores como el coste o el tiempo de elaboración que pueden variarse, pero nunca la calidad. Y esto, por supuesto, requiere una férrea disciplina por parte del equipo de trabajo. Partiendo de que hablamos de un grupo que controla el ciclo clásico de Scrum, en esta primera entrega vamos a recopilar las herramientas y técnicas disponibles y a nuestro alcance que nos permitirán mejorar los procesos de calidad de nuestro software.
Pero antes vamos a establecer los dos principales roles, bien diferenciados, que trabajan simultáneamente en la integración continua del producto: los miembros del equipo de desarrollo (Devs), en el que están los desarrolladores "más creativos" del producto; y los del equipo de calidad (QA), que velan por que el código funcione correctamente.
Para montar entornos de integración continua en el equipo de desarrollo se pueden emplear las siguientes herramientas:
- GitHub: Es mucho más que un control de versiones, es una plataforma basado en Git que convierte el desarrollo en algo social, con una potencia y una inteligencia muy superior a CVS o Subversión.
- Jenkins/GoCD: Herramientas open source que gobiernan todo el ciclo de continuos delivery.
- Gradle/Maven: Software que gestiona las dependencias y automatiza los deployments o implantaciones.
- Docker: Nueva generación de virtualización, que te permite tratar la infraestructura como si fuera código fuente dentro de tu proyecto.
Los pasos que deberían dar los miembros del equipo de desarrollo para conseguir los niveles adecuados de calidad del producto son:
- Unit testing o pruebas unitarias: Éstas son responsabilidad de los desarrolladores y tienen que estar automatizadas. Para hablar de una calidad ágil, al menos el 80% del software debería estar cubierto. Para ello se pueden emplear como metodología el Test Driven Development.
- Pair programming o programación en pareja: Es una técnica de Extreme Programming (XP) muy importante en la que una persona desarrolla y otra se sienta a su lado para revisar el código en tiempo de escritura (es habitual que uno no vea sus propios errores). Cada periodos cortos, se intercambian. Con esta técnica se consigue un código más sencillo, fácil de mantener y, gracias al hecho de que lo revise otra persona, con menos posibilidades de errores.
- Refactoring o refactorizar: Refactorizar es un proceso fundamental para limpiar y simplificar. En ágil es mejor hacer al principio unos prototipos rápidos para mostrar al cliente la funcionalidad, verificar que se comprendió bien lo solicitado y que está bien implementado. Luego se refactoriza para tener un código mejor y más limpio y es en ese momento cuando se introducen las correcciones de calidad. Esto hace el desarrollo del software iterativo e incremental, sin esas dos cualidades o características no sería agilismo.
- Metrics o métricas: La calidad viene de la medición. Sonar (integrado con reglas) o PEP8 (la guía de estilo específica para Python) son algunas de las herramientas más utilizadas para medir.
- Requirement Management o gestión de requisitos y trazabilidad: Son herramientas de ticketing que permiten gestionar o dar de alta incidencias y su resolución, y por otro lado gestionar requerimientos funcionales, entre otras cosas.
- Code reviews y Code merges: Es una práctica obligatoria y exhaustiva, en la que parte del equipo revisa el código realizado por otros compañeros. Además, sirve de coaching.
El objetivo del equipo de calidad o Quality Assurance (QA) en metodologías ágiles es evitar que se produzcan errores más que encontrarlos, por eso es tan importante la integración entre este equipo y el de desarrollo. El equipo de calidad también colabora en la mejora de los procesos de trabajo para que sean más productivos.
Estos son los tests que debe hacer el QA team:
- Test de integración y de aceptación: Si se pueden hacer de manera automática mucho mejor, con programas como el Selenium, que permite introducir valores, rangos de datos, generar automáticamente pruebas…
- Test de performance: Las pruebas de estrés es mejor hacerlas con frecuencia, en cada sprint. Cada vez que se haga una funcionalidad, estresar. Un ejemplo de herramienta sería JMeter.
Con este repaso hemos pretendido poner ordenadamente el conjunto de herramientas (stack) de las que podemos valernos en el diseño de nuestros prototipos y artefactos antes de ser entregados al cliente. En la siguiente entrega abundaremos en el aspecto temporal: TTM (time to market), ciclos de vida del producto, mantenimiento y actualizaciones.
Óscar Méndez
Oscar Méndez is co-founder and CEO of Paradigma Digital and Stratio. Paradigma is an Internet solutions company with clients, mostly IBEX 35 companies, in Spain and in 14 other countries.
Stratio is a product company developing Big Data technologies on top of open source software to cater for clients world-wide. Stratio is based in Campbell, CA.
Ver más contenido de Óscar.
Más contenido sobre esto.
Leer más.
Cuéntanos qué te parece.