01. Introducción
"La agilidad básicamente facilita la competitividad. Para competir en el entorno actual, debes actuar y reaccionar rápido, de lo contrario tu competencia simplemente te ganará. Hoy, la brecha para competir es mínima, y la única forma de defender la posición es innovando en iteraciones cortas y básicamente significa adoptar Agile".
Alon Girmonsky, Fundador y ex-CEO de BlazeMeter
Cuando realizas Shift Left Testing, entre muchos otros beneficios, puedes lograr pruebas continuas, ejecutando validaciones automatizadas como parte del ciclo de vida del software, para obtener feedback inmediato sobre los riesgos comerciales asociados con una versión de prueba. El testing continuo también implica pruebas anticipadamente y periódicas, una gestión adecuada del código y el ajuste de las diversas tareas relacionadas con la calidad a lo largo del tiempo, para maximizar la eficiencia de todo el proceso.
Algunos de los beneficios clave de las pruebas continuas son:
- Reducir los costos de desarrollo.
- Disminuir gastos asociados.
- Minimizar los riesgos tras el release.
- Aumentar la confiabilidad del sistema.
- Desplegar a producción más rápidamente.
- Ser más competitivo en el mercado.
Muchos equipos hoy en día están tratando de desarrollar o refinar su máquina de pruebas continuas. Creemos que para mejorar los resultados de la producción de software, es necesario considerar tres pilares fundamentales que están estrechamente relacionados entre sí: los procesos, las herramientas y las personas. Los equipos pueden mejorar optimizando sus procesos, pero las herramientas y los miembros del equipo también deben adaptarse para que los procesos nuevos y mejorados se mantengan.
Por ejemplo, dentro de Agile, los equipos pueden encontrarse en frameworks como Scrum que crean un proceso, por lo que utilizarán varios tipos de herramientas para todo: desde la comunicación hasta la gestión de tareas y, por lo general, habrá un gran enfoque en la motivación y el compromiso del equipo.
Todos los aspectos de los enfoques ágiles están bien diseñados para adaptarse al cambio, que es su objetivo principal. La idea es asumir que lo que el cliente necesita no está fijado ni establecido en un contrato. Por lo tanto, es fundamental trabajar en constantes adaptaciones de manera que los costos del proyecto no se eleven desbocadamente o se vuelvan inmanejables.
¿Qué se necesita para adaptarse al cambio y, sin embargo, mantener un alto nivel de calidad?
Para cualquier equipo, el problema más típico que surge al introducir cambios en un sistema es el miedo: miedo a romper algo que ya estaba funcionando antes y no darse cuenta hasta que se expone al cliente. Cuando a un usuario se le entrega una nueva versión de la aplicación, no hay nada peor que encontrarse con que lo que antes funcionaba ya no responde.
Para abordar este problema, los equipos deben poder detectar cualquier error de cualquier tipo lo antes posible. Cuando hablamos de errores, nos referimos a cualquier tipo de falla o incidente: un error de cálculo, problemas de rendimiento, vulnerabilidad de la seguridad, aspectos de usabilidad, problemas de mantenimiento (por ejemplo, factores de calidad del código) o cualquier aspecto que pueda afectar la experiencia del usuario. Y lo que queremos decir con “lo antes posible” es tan pronto como sea posible después de que se detectó el error en el sistema.
Así, prácticas importantes como el testing continuo, que se relaciona con la integración continua (CI), emergen y cobran una mayor importancia para los equipos Agile.
Básicamente, la integración continua propone desarrollar y probar la solución periódicamente, construyendo un producto potencialmente entregable al cliente con una frecuencia que depende de cada equipo, variando desde una nueva versión después de cada commit, diaria o semanal. Las herramientas de integración continua permiten definir una secuencia de tareas a realizar de forma automatizada, entre las que se suelen incluir:
- Actualización del código a la última versión.
- Construcción de la solución.
- Validaciones automatizadas.
- Checks de calidad del código.
- Revisiones de seguridad.
Y la lista puede continuar con cientos de integraciones y pruebas que deseemos agregar.
Hay docenas de herramientas para respaldar estos sistemas automatizados, algunas tan antiguas como Ant, Maven y MSbuild, herramientas de gestión de configuración como Chef, Puppet o Ansible, hasta herramientas populares de integración como Jenkins, CruiseControl, Bamboo y TeamCity. Asimismo, también existen soluciones en la nube como Amazon Pipeline Code, TravisCI, CircleCI, Codeship y Visual Studio Team Services de Microsoft (por nombrar algunas).
Entonces, todo lo que tenemos que hacer para tener testing continuo e integración continua es simplemente implementar una de estas herramientas de CI y luego la calidad se integrará en todo, ¿verdad?
Equivocado.
El problema es que muchos equipos caen en este mismo engaño y pasan por alto muchas condiciones previas para las pruebas continuas y CI que deben cumplirse con anticipación, lo que resulta en fallas. Algunas de las condiciones previas incluyen el manejo adecuado de la gestión de versiones de código, gestión de incidentes, gestión de datos y ambientes validaciones automatizadas en diferentes niveles de prueba (unitarias, pruebas de verificación de compilación, API, UI), pruebas de performance, calidad del código interno, etc.
Afortunadamente, esta guía te ayudará a avanzar a través de los diversos desafíos que tu equipo de testing debe superar en el camino hacia el testing continuo (el nivel más alto de madurez de testing según nuestro modelo de madurez), para iniciar la transición del proceso tradicional de aseguramiento de calidad a la ingeniería de calidad.