Agile Testing

Importancia del Agile testing en el desarrollo del software

Definición de Agile Testing

Si se separan los dos términos, testing se define como el proceso de validación y verificación de las características desarrolladas para un software que busca entregar un producto de calidad, mientras que agile es una metodología de trabajo que se enfoca en generar entregas de valor de manera incremental de un producto (software) en lapsos de tiempo cortos (1-4 semanas) dentro de un esquema iterativo. Entonces el Agile Testing es una filosofía de trabajo que ofrece la oportunidad de realizar pruebas sobre un software brindando retroalimentación al equipo de desarrollo, de esta manera los defectos encontrados pueden detectarse en fases tempranas del desarrollo y ser solucionados dentro de la misma iteración.

El enfoque tradicional ubica las pruebas en las etapas finales del desarrollo, sin embargo, hoy en día la definición de software implica una metodología preventiva, el testing ha pasado de ser una fase a estar inmerso a lo largo de cada una de las etapas dentro del ciclo de vida del desarrollo del software.

Prácticas y características del Agile Testing

Uno de los pilares del agile testing y del equipo ágil en sí, es el trabajo colaborativo entre los diferentes roles para lograr un objetivo común: un producto de calidad; dicho de otro modo el equipo es responsable de la calidad del producto, para tener éxito se debe realizar un desplazamiento de las pruebas hacia las fases más tempranas del desarrollo, este concepto es conocido como shift left testing.

Aquí se busca detectar posibles cuellos de botella y obstáculos, procurando la prevención de defectos y en caso de encontrarlos tener ese margen que permita implementar acciones correctivas y no en etapas posteriores cercanas a la salida del producto en donde los costos asociados a solventar estos defectos se van incrementando (ver imagen).

En este marco, como testers se debe tener presente que el objetivo principal es la prevención de dichos defectos, de ahí que se tenga claramente definidas las siguientes preguntas sobre el sistema ¿qué hace? ¿para qué lo hace? ¿por qué lo hace? y ¿cómo lo hace?, este conocimiento profundo sobre las necesidades del negocio permitirá asumir un rol proactivo realizando hallazgos de mejora desde la definición de los requerimientos. Adicionalmente, un tester ofrece un punto de vista diferente que contrasta con las preguntas que surgen desde el cliente, por lo que dentro de su gestión gestión también solicita ejemplos y casos de usos para aclarar el entendimiento sobre el valor que generará cada funcionalidad y cómo será utilizada, de esta manera contribuye al aseguramiento de la calidad dentro de los equipos que se refleja en la entrega de valor a través de cada iteración.

TDD – BDD – ATDD

Existen una serie de técnicas dentro del desarrollo que permiten mejorar las prácticas de prueba y ayudan a habilitar las pruebas automatizadas.

  • Test Driven Development (TDD)
  • Acceptance Test Driven Development (ATDD)
  • Behavior Driven Development (BDD)

El TDD – desarrollo guiado por pruebas, es una de las prácticas que permite desarrollar agile testing. En esta técnica donde el primer paso de desarrollo consiste en construir una prueba, la prueba falla porque la funcionalidad aún no ha sido desarrollada, luego se crea/codifica la funcionalidad deseada para que las pruebas pasen, pero si falla se hacen cambios en el código, a medida que se termina la funcionalidad se escriben nuevas pruebas, ver imagen.

Por su parte el desarrollo guiado por comportamiento (BDD – Behavior Driven Development), plantea un desarrollo desde el valor comercial a través de una estructura Dado/Cuando/Entonces viéndose involucrados todos los actores testers, desarrolladores y cliente.

Finalmente, en el desarrollo guiado por pruebas de aceptación o ATDD se identifican los casos de prueba buscando validar que el sistema funcione cómo se esperaba. Las pruebas buscan analizar los criterios de aceptación definidos y previamente conversados por todas las partes del equipo. En este punto se genera la entrada para la automatización de las pruebas de regresión. Particulares que arrojen cambios de estado.

Aunque parezcan similares, la clave está en entender que en TDD se construyen pruebas a niveles modulares (implementación de una funcionalidad – pruebas unitarias), por su parte a través del BDD tiene un enfoque hacia el comportamiento del sistema y finalmente ATDD asegura la alineación para construir la solución que el usuario espera.

Beneficios del Agile Testing
  • Retroalimentación rápida: al estar presentes todas las partes involucradas desde testers, desarrolladores, operaciones y negocio, el tiempo para tener una retroalimentación se ve reducido lo que permite hacer ajustes sobre la marcha.
  • Flexibilidad y adaptabilidad: al ser un modelo incremental permite redefinir las prioridades del backlog de acuerdo a las necesidades del negocio.
  • Código limpio: la detección y corrección de defectos dentro de la misma iteración permite mantener el código limpio reflejándose en ahorros de tiempo y dinero.
  • Acelerar la entrega: a través de la retroalimentación continua se pueden identificar y fácilmente aplicar mejoras de manera inmediata optimizando el ciclo de vida del desarrollo del software.
  • Reducir la documentación: al trabajar en colaboración con los desarrolladores, los testers pueden utilizar su experiencia y conocimiento del producto en lugar de depender de la documentación de los desarrolladores. Aunque necesiten lineamientos sobre lo que deben probar, pueden ser unas pocas líneas en lugar de una documentación completa.
  • Ahorros en tiempo: una vez se vayan estandarizando las mejoras de los procesos, descubrirá que el flujo de trabajo mejora y su equipo puede producir productos de alta calidad con mayor rapidez y confianza.
  • Producir un mejor software: al proporcionar una retroalimentación continua para que se puedan realizar mejoras constantes. De esta manera se reduce el número de errores en producción, ya que se corrigen tan pronto como se introducen en la fase de desarrollo.

Finalmente, el objetivo es que el agile testing esté inmerso en el ciclo de vida del software a tal punto que independientemente del rol que se asuma dentro del equipo, se logren integrar estas prácticas en cada una de las tareas. Cuanto antes sean implementadas y más minuciosamente realizadas, se tendrán resultados beneficiosos para todos que es más rentable si es analizado desde el punto de vista de los costos, esto implica un ahorro para el proyecto; ya que al detectarse los problemas de manera anticipada estos serán más baratos de solucionar y más fáciles de depurar. Por otro lado, se garantiza la entrega de un software con mejor calidad generando la mejor experiencia a ese usuario final, siendo este un factor diferenciador; ya que finalmente lo que está en juego es la reputación del producto.


Conoce más sobre Testing Automatizado

Referencias

Crispin, Lisa & Gregory, Janet. (2009). Agile Testing A Practical Guide for Testers and Agile Teams. Addison Wesley.
Sykutera, J. What poor quality assurance can lead to: The importance of QA testing. Redvike https://redvike.com/what-poor-quality-assurance-can-lead-to/
Sayantini, What is Agile Testing? Know about Methods, Advantages and Principles. Edureka. https://www.edureka.co/blog/what-is-agile-testing/