leanmind logo leanmind text logo

Blog

Código Sostenible

Cómo escribir código fácil de mantener mediante valores, principios y técnicas.

Más allá del TDD

Por Kevin Hierro Carrasco

📖Introducción

Hoy vamos a hablar sobre algo que muchos de nosotros, como desarrolladores, hemos incorporado en nuestras rutinas diarias: el Desarrollo Guiado por Pruebas o TDD (Test-Driven Development). TDD es una técnica maravillosa que nos ha ayudado a mejorar la calidad de nuestro código, a pensar en nuestras funcionalidades desde una perspectiva de prueba y a reducir errores desde las primeras etapas del desarrollo. Sin embargo, ¿alguna vez han sentido que, a pesar de usar TDD, algo falta? ¿Que no es la panacea que soluciona todos los problemas de calidad en el software?

Permítanme ilustrar con un ejemplo: Imaginen que están construyendo una casa. TDD sería como asegurarse de que cada ladrillo está perfectamente formado y sea resistente. Pero, ¿qué pasa si, aunque cada ladrillo es perfecto, no se colocan en el lugar correcto o no se alinean correctamente con otros elementos estructurales? Podríamos terminar con una casa inestable o con problemas de diseño. Es ahí donde TDD por sí solo no basta.

En el mundo del software, TDD garantiza que cada función o método haga exactamente lo que se espera que haga. Pero, ¿qué pasa si no interactúa correctamente con otras funciones? ¿O si, aunque funciona a la perfección, no satisface realmente las necesidades del usuario o del negocio?

Aquí es donde entra en juego el Agile Testing. Complementa el TDD al abordar estas cuestiones más amplias, garantizando que el software, en su conjunto, no solo funcione correctamente, sino que también cumpla con las expectativas y necesidades del usuario y del negocio.

Hoy, en “Más allá del TDD”, exploraremos estas lagunas y veremos cómo Agile Testing puede ayudarnos a construir software que, no sólo es técnicamente sólido, sino también valioso y relevante para aquellos que lo utilizan.

🥊 TDD vs Agile Testing

¿Por qué,sabiendo TDD, deberíamos adentrarnos en Agile Testing?

El TDD perfecciona cada función de nuestro software, pero el Agile Testing nos prepara para que todo el software se ejecute en armonía. Es la diferencia entre tocar notas perfectas en un piano, y ejecutar una melodía completa que fluye y resuena.

El TDD no puede testear lo que no sabemos, o un entendimiento erróneo de las reglas de negocio, ya que haremos los tests pensando que realmente eso es lo correcto.

Si dominamos el TDD, ¿qué más podemos ofrecer al conocer el Agile Testing?

Los clientes buscan soluciones que se alineen con sus objetivos y se adapten rápidamente a los cambios. Con el Agile Testing, podemos garantizar que no sólo entregamos código de calidad, sino soluciones de negocio efectivas y alineadas con sus necesidades.

Veámoslo con un ejemplo un poco más real:

Imaginemos por un momento que estamos desarrollando una funcionalidad que transforma un valor basado en otro; piensen en un sistema de cambio de moneda. A nivel unitario, podemos comprobar que la conversión se realiza correctamente. Sin embargo, surge una pregunta crucial: ¿Cómo garantizamos que estamos aplicando la conversión adecuada en cada situación? Es en este contexto donde la importancia de las pruebas se manifiesta. Necesitamos un test que asegure, por ejemplo, que la conversión de EUR a USD se efectúa correctamente y que no hay un error inadvertido que aplique una conversión distinta. Estas son las capas de seguridad que buscamos en el proceso de desarrollo.

A veces, surge la duda de si realmente la validación a alto nivel está bien hecha, y nos podemos apoyar en test unitarios para que esa validación cumpla todos los casos que se nos ocurran.

🧠Mejorando el pensamiento crítico

Pasemos ahora a explorar una dimensión menos tangible pero igualmente poderosa de Agile Testing: su capacidad para afinar y mejorar nuestro pensamiento crítico. En el corazón de Agile Testing, no sólo encontramos técnicas y herramientas, sino también una mentalidad, una forma de abordar problemas y situaciones.

Al adoptar Agile Testing, nos vemos inmersos en escenarios cambiantes y a menudo, ambiguos. Esta constante evolución, nos reta a cuestionar nuestras suposiciones y a estar atentos a las variables que podrían no haber sido consideradas inicialmente. Es una invitación continua a hacerse preguntas: “¿Estamos realmente probando lo correcto?”, “¿Hay alguna otra forma en que el usuario podría interactuar con esta función?” o “¿Cómo impacta este módulo en el resto del sistema?”.

Más allá de la técnica, Agile Testing nos empuja hacia un entendimiento profundo y holístico del producto. Nos enseña a no dar nada por sentado y a mantener una curiosidad activa. Esta actitud crítica no sólo garantiza la calidad del software, sino que también nos forma como profesionales capaces de abordar desafíos complejos con una mente abierta y analítica.

Así que, al adoptar esta manera de ver las cosas, no sólo estamos mejorando nuestro software, sino también a nosotros mismos, cultivando un pensamiento crítico que será invaluable en todos los aspectos de nuestro trabajo y carrera.

🧪 El rol del Agile Tester

El Agile Tester no es simplemente alguien que ejecuta pruebas. Es un profesional que vive y respira los valores y principios ágiles, que se centra en la colaboración, el feedback constante y el ajuste basado en las respuestas del mundo real.

Un Agile Tester se sumerge en el proyecto desde el principio. En lugar de esperar a que el desarrollo esté completo, participa activamente desde la fase de ideación, entendiendo las necesidades del cliente, colaborando con desarrolladores, diseñadores y stakeholders. Esta cercanía con el equipo de desarrollo y con el producto en sí, permite una adaptación rápida, una comunicación efectiva y una respuesta ágil a los cambios.

Ahora bien, cuando pensamos en la función de una consultora, vemos que esta alineación es natural. Una consultora busca ofrecer soluciones integrales, estratégicas y adaptadas a las necesidades específicas de cada cliente. El Agile Tester, con su mentalidad y enfoque, se convierte en un activo invaluable. Al incorporar Agile Testers en sus equipos, las consultoras garantizan no sólo la entrega de software de calidad, sino también la capacidad de responder de manera ágil a los desafíos cambiantes del negocio, creando así una verdadera sinergia y ofreciendo un valor añadido que va más allá de la mera implementación técnica.

En esencia, el Agile Tester simboliza el puente entre la técnica y la estrategia, y esa posición es justamente lo que una consultora de vanguardia busca ofrecer en el mercado actual.

🧙‍♂️ No todo lo que brilla es oro

Entender los desafíos de ser un Agile Tester es fundamental para abordar este rol con realismo y eficacia. Ser un Agile Tester, a pesar de sus muchos beneficios, presenta algunas dificultades intrínsecas.

En primer lugar, la naturaleza cambiante y fluida de los proyectos ágiles, puede generar una sensación de inestabilidad. Sin un conjunto claro y fijo de requisitos desde el principio, un Agile Tester debe estar constantemente adaptándose, lo que puede ser mentalmente agotador.

Esta adaptabilidad constante, también significa que las prioridades pueden cambiar rápidamente. Lo que ayer era esencial, hoy puede quedar en segundo plano, y viceversa. Esta dinámica puede generar frustración, especialmente si se ha invertido tiempo y esfuerzo en una función o módulo que luego se descarta o modifica profundamente.

Además, la estrecha colaboración con desarrolladores, stakeholders y otros miembros del equipo requiere habilidades de comunicación excepcionales. Los malentendidos o las tensiones interpersonales pueden surgir, y ser un Agile Tester implica tener la habilidad no solo técnica, sino también emocional, para navegar estos desafíos.

Por último, debido a la rápida retroalimentación y al deseo de entregar valor continuamente, puede haber una percepción de presión constante. A diferencia de los enfoques de desarrollo más tradicionales, donde hay fases claramente definidas, en el entorno ágil el testing es continuo, y esto puede ser percibido como un ritmo de trabajo sin descanso.

Es un papel que no es para todos, pero aquellos que lo abrazan y superan estos desafíos encuentran un valor y una satisfacción inigualables en su trabajo.

👋 Bye Bye

Aunque la ruta del Agile Tester presenta sus baches y curvas, es un camino que promete una comprensión más rica, soluciones más alineadas con las necesidades reales y una colaboración más estrecha con nuestros equipos y stakeholders.

Gracias por acompañarme en esta exploración. Les animo a que abracen los principios del Agile Testing en su trabajo diario, a que enfrenten sus desafíos con valentía y a que celebren las innumerables oportunidades que ofrece para enriquecer nuestro trabajo y el valor que proporcionamos.

¡Hasta la próxima, y les deseo éxito en cada despliegue a producción y en cada prueba que enfrenten!

Publicado el 13/09/2023 por
Kevin image

Kevin Hierro Carrasco

https://wolfremium.dev/

¿Quieres más? te invitamos a suscribirte a nuestro boletín para avisarte cada vez que recopilemos contenido de calidad que compartir.

Si disfrutas leyendo nuestro blog, ¿imaginas lo divertido que sería trabajar con nosotros? ¿te gustaría?

Impulsamos el crecimiento profesional de tu equipo de developers