Pruebas Ágiles o Agile testing. Equipo feliz, clientes contentos

¿Qué es ágil?

Antes que nada, recordemos el significado de Ágil.

Ágil es la capacidad de crear y responder al cambio en un ambiente incierto y turbulento.

Aceptamos que los requisitos cambien, incluso en etapas tardías del desarrollo. Los procesos Ágiles aprovechan el cambio para proporcionar ventaja competitiva al cliente.

Uno de los 12 principios de “Agile Manifiesto”

Con este enfoque, un producto que se crea usando metodologías ágiles debe ser adaptable, es decir, responder al cambio en un ambiente turbulento. Esta respuesta al cambio nos permite crear productos que sean sustentables. Más abajo se describe a que nos referimos como sustentable.

Una de las mejores prácticas para implementar el principio anterior son las pruebas ágiles.

La atención continua a la excelencia técnica y al buen diseño mejora la Agilidad.

Uno de los 12 principios del “Agile Manifiesto”

Pruebas ágiles o agile testing son técnicas esenciales en el desarrollo de software que implementan los principios y prácticas de las metodologías ágiles.

Las pruebas ágiles mejoran la agilidad porque nos permite crear un producto de calidad, esta calidad promueve la adaptabilidad al cambio en una ambiente súper cambiante.

Cuando hablamos de pruebas ágiles hablamos de varias técnicas y de diferentes tipos de pruebas, como pueden ser TDD, BDD, las pruebas unitarias, funcionales, de integración, de rendimiento, de usabilidad, etc.

¿Qué significa sustentable o sostenible?

Se refiere a algo que está en condiciones de conservarse o reproducirse por sus propias características, sin necesidad de intervención o apoyo externo.

Los procesos Ágiles promueven el desarrollo sostenible. Los promotores, desarrolladores y usuarios debemos ser capaces de mantener un ritmo constante de forma indefinida.

Uno de los 12 principios de “Agile Manifiesto”

Siempre deberíamos preguntarnos a nosotros mismos si estamos creando productos sustentables, o sea, que se adapten al cambio fácilmente. Las pruebas ágiles contribuyen en gran medida a la creación de un producto sustentable, además las pruebas ágiles apoyan este principio pues teniendo pruebas ágiles los individuos que desarrollan los productos están a gusto, sin trabajar demasiado, no los sobrecargamos de trabajo porque queremos resolver muchos defectos en poco tiempo o por el simple hecho de que pensamos que así vamos a obtener resultados más rápidos, esto no funciona a mediano y largo plazo.

Características de las pruebas ágiles

Como ya hemos descrito hasta este punto, existen muchos principios que se relacionan muchísimo con el uso de pruebas ágiles. Hago hincapié, las pruebas ágiles se basan en principios ágiles.

Nuestra mayor prioridad es satisfacer al cliente mediante la entrega temprana y continua de software con valor.

Uno de los 12 principios del “Agile Manifiesto”

Es una ilusión, nos engañamos a nosotros mismos, cumplir con la fecha de entrega dejando de lado la calidad, tirando las buenas prácticas como Desarrollo guiado por pruebas (TDD )o Desarrollo guiado por comportamiento (BDD), y creando código en el último minuto, eso no es desarrollo ágil, aunque se pudiera obtener velocidad a corto plazo, el costo a mediano y largo plazo es muy grande para el negocio y/o stakeholders. ¿Eso es la descripción de un software con verdadero valor para nuestros clientes?

Entregamos software funcional frecuentemente, entre dos semanas y dos meses, con preferencia al periodo de tiempo más corto posible.

Uno de los 12 principios del “Agile Manifiesto”

El software funcionando es la medida principal de progreso.

Uno de los 12 principios del “Agile Manifiesto”

TDD (Desarrollo guiado por pruebas) y BDD (Desarrollo guiado por comportamiento), son técnicas de pruebas ágiles, pero si nos fijamos en sus definiciones, la frase principal es “Desarrollo guiado por“, así es, no se trata de pruebas, se trata del desarrollo y las pruebas son una parte que integra al todo, las pruebas forman parte del desarrollo. Existe un hecho importante y que se nos olvida a la hora de indicar que una funcionalidad esta terminada, si las pruebas no esta terminadas y si las pruebas son parte del desarrollo, entonces la funcionalidad tampoco puede estar terminada.

¿Cómo podemos entregar software funcional y como podemos decir que estamos progresando si en realidad no estamos entregando ninguna funcionalidad “Terminada” a nuestros clientes?

De hecho creo que TDD es una mala definición, no debería tener la palabra prueba (Test) y debería llamarse BDD, solo que con un enfoque más a la parte técnica a diferencia del actual BDD que tiene un enfoqué más centrado al cliente y al negocio.

A veces perdemos el enfoque dentro de una metodología ágil, nos centramos mucho en los procesos como los eventos y las herramientas como Jira, por lo que olvidamos el equilibrio de una implementación ágil, nos olvidamos de las prácticas de desarrollo técnico que nos permiten establecer la calidad, la arquitectura y las solucione técnicas que le dan la cualidad sustentable a un producto. Y también a veces esto sucede en sentido contrario, es importante tener un equilibrio en estos dos aspectos.

Otro ejemplo de que las pruebas ágiles se basan en principios ágiles lo podemos ver en el proceso empírico de scrum y sus tres pilares:

  • Transparencia
  • Inspección
  • Adaptación

Los responsables de negocio y los desarrolladores trabajamos juntos de forma cotidiana durante todo el proyecto.

Uno de los 12 principios de “Agile Manifiesto”

Necesitamos la transparencia con todo el equipo a la hora de definir las pruebas, de esa manera todos obtiene un mejor entendimiento sobre la parte lógica del negocio y la parte técnica de la implementación. La inspección nos permite aprender de manera rápida usando las pruebas para definir y fallar tempranamente con la ayuda de todo el equipo, de modo que se obtiene Retroalimentación lo más pronto posible. Luego de que aprendimos de todos y de nuestros errores, se adaptan las pruebas para cumplir con las necesidades del cliente y entregar un producto de calidad probado correctamente, Ahorrándonos mucho esfuerzo y dinero, porque el coste de arreglar bugs en etapas maduras de un producto es muy costoso si no se tiene un sistema de calidad que permita fácilmente mitigarlo desde el principio con pruebas pequeñas.

Los proyectos se desarrollan en torno a individuos motivados. Hay que darles el entorno y el apoyo que necesitan, y confiarles la ejecución del trabajo. 

Uno de los 12 principios de “Agile Manifiesto”

Un equipo de desarrolladores es más productivo si se encuentra creando nuevas funcionalidades en lugar de estar arreglando bugs que pudieron mitigarse antes y que por la complejidad y madurez del sistema es muy difícil de resolver actualmente, si, el estrés del programador es un factor clave.

En scrum, un equipo multidisciplinario es más eficiente que un equipo dividido por habilidades especificas. Una división muy común y que disminuye considerablemente la agilidad de un equipo es la fuerte división de manual testers, programadores y automation testers. Aunque posiblemente cada uno de los integrantes tenga mayor habilidad en una área, es importante que sean flexibles y se adapten a las necesidades del proyecto, es necesario que también la perspectiva del negocio de los integrantes como el Product Owner aporten significativamente a la creación de las pruebas ágiles, por poner un ejemplo, un Product Owner tiene el mayor entendimiento sobre lo que es de mucho valor para el cliente.

Todo el equipo se involucra en las pruebas para fomentar el entendimiento global desde un enfoque centrado en el cliente, y esto genera un aumento en la creatividad de las soluciones.

Al estar todos involucrados en las pruebas, se elimina un cuello de botella significativo porque se acelera la definición y la creación de las mismas. Es más rápido terminar una tarea entre varias personas que si lo hiciera una sola.

Además de las características ya mencionadas, las pruebas ágiles permiten incorporar técnicas de gran productividad en el desarrollo de software como:

  • TDD, Test Driven development
  • BDD, Behavior Driven Development
  • ATDD, Acceptance Test Driven Development

Existen muchas cualidades buenas en las pruebas ágiles, pero listemos las características principales de agile testing:

  • Se basan en principios y prácticas ágiles.
  • Las pruebas forman parte del desarrollo, formando un todo integral, no es algo que este separado.
  • Menos estrés y desarrolladores felices, mayor productividad y mayor calidad.
  • Acelera la retroalimentación para poder realizar las adaptaciones necesarias lo más pronto posible.
  • Se acelera el proceso de definición, creación y terminación de las pruebas.
  • Todo el equipo se involucra en las pruebas para fomentar el entendimiento global desde un enfoque centrado en el cliente, y esto genera un aumento en la creatividad de las soluciones.
  • Ahorran tiempo y dinero.
  • Por último y de suma importancia, permite incorporar técnicas de pruebas para aumentar la agilidad y productividad.

La matriz de pruebas ágiles

Las pruebas ágiles nos proporcionan la certeza de que con el aprendizaje actual estamos resolviendo un determinado problema con la solución correcta y la implementación y/o construcción sé está realizando correctamente.

Las pruebas ágiles maximizan el valor de la solución y minimizan los riesgos, esto se consigue fallando inmediatamente de manera segura para aprender y adaptarse rápidamente.

Con esto último tenemos cuatro aspectos fundamentales a la hora de hacer pruebas:

  • Perspectiva tecnológica
  • Perspectiva de negocio
  • Soporte y guía al desarrollo
  • Crítica del producto

Esos cuatro aspectos se representan en los siguientes cuadrantes:

Matriz de agile testing

¿Cuales son las actividades que hacemos diariamente para contestar las siguientes preguntas?

  • ¿Estamos construyendo el producto correcto?, Perspectiva de negocio.
  • ¿Estamos construyendo el producto correctamente?, Perspectiva tecnológica.
  • ¿Cómo guiamos el desarrollo para asegurarnos que el producto es correcto y que se está construyendo correctamente?, Soporte y guía al desarrollo.
  • ¿Cómo obtenemos critica del cliente que nos ayude a construir el producto correcto de manera correcta?, Critica del producto.

El cuadrante 1 proporciona una guía y soporte al programador desde la perspectiva tecnológica, se crean pruebas unitarias y de componentes, estas pruebas se construyen antes y después de escribir código, nos indica que las partes más pequeñas funcionan como deberían, aquí se utiliza mucho TDD (Test Driven Development).

El cuadrante 2 proporciona igual una guía y soporte al programador pero desde la perspectiva del negocio, se utilizan pruebas funcionales para User stories y features de tal forma que se validan como el Product Owner las definió y como el usuario final las necesita. Aquí se utiliza mucho BDD (Behavior driven development) para automatizar las pruebas y si no existe otra opción, se pueden hacer pruebas manuales.

El cuadrante 3 proporciona critica del cliente desde la perspectiva de negocio, son pruebas a nivel del sistema completo, se valida que el sistema cumple con las expectativas de funcionalidad y usabilidad. Se realizan en su mayoría manualmente porque involucran al usuario y a los testers dentro de un ambiente real o simulado. Aquí predominan las UAT (User Acceptance Test) a nivel sistema.

El cuadrante 4 proporciona critica del cliente desde la perspectiva tecnológica, son pruebas para asegurar la calidad del sistema completo en términos de velocidad de carga, rendimiento, seguridad y escalabilidad. En general pruebas no funcionales que se realizan mediante herramientas y automatización.

Divide y vencerás. Pruebas pequeñas y automatizadas

Las pruebas ágiles generan un producto de alta calidad, para que esto sea posible es necesario tener una filosofía de prevención debugs en lugar de buscarlos, es obvio que no somos dioses y no somos perfectos, siempre existirán bugs, pero la pregunta principal es ¿Pudimos haber evitado este bug? Las técnicas como TDD y BDD son muy útiles porque su filosofía es “test-first”, es decir, antes de escribir cualquier línea de código primero crea tus pruebas para entender con mayor claridad el negocio, el cliente y por consiguiente los requerimientos. De esta manera se reduce el tiempo en que se recibe la retroalimentación por las dudas que surgen al momento de escribir las pruebas y se puede refactorizar las funcionalidades rápidamente, eliminando futuros bugs, esto puede suceder varias veces en un mismo día.

Obtener retroalimentación diaria y adaptarse todos los días es menos costoso y más ágil que hacerlo cada mes o cada semana con pruebas mucho más grandes. Es por eso que las pruebas que nos dan retroalimentación más rápida, son en las que más se deben invertir, normalmente estos tipos de pruebas son las pruebas relativamente pequeñas como unitarias, funcionales y de integración que se pueden automatizar. Es importante disminuir el uso de pruebas manuales porque son mucho más lentas que las pruebas automatizadas. No estoy diciendo que las pruebas manuales deben desaparecer, porque al final son necesarias, pero podemos ahorrarles mucho tiempo a los testers manuales para que reporten bugs que solo se puedan identificar realizando una prueba manual, así podemos disminuir las pruebas manuales en la medida de lo posible porque representan un costo mayor que las pruebas automatizadas.

Conclusión

Pasamos mucho tiempo trabajando, tal vez demasiado, creo que más de la mitad de nuestra vida adulta, pero me he dado cuenta de algo importante, lo he percibido en mi mismo y también en mis compañeros de trabajo de diferentes empresas en las que he participado. Todos, llegado a cierto punto nos las pasamos mal y no estamos contentos con nuestro trabajo, tenemos estrés y nuestra productividad individual empieza a disminuir, lo que sé traduce en disminución de la productividad de todo el equipo. Las pruebas ágiles y el desarrollo ágil en general son una excelente manera de mitigar este problema. Creo firmemente que soy más productivo y hago mejor mi trabajo cuando estoy feliz haciéndolo, aún más si estoy consciente de entregar productos de alto valor para los clientes.

Tampoco estoy diciendo que todo es negro, pero sin duda las pruebas ágiles son soluciones grandiosas a este problema porque contribuyen en gran medida a tener un equipo contento, clientes felices y negocios sustentables, ahorrando tiempo, dinero y esfuerzo en el camino.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.