93. ¿En qué consiste la metodología TDD?

Transcripción

¿Qué es TDD?

Primero, hay que definir TDD. Son las siglas de Test Driven Development y básicamente consiste en programar que consiste en escribir tests automatizados antes incluso, de programar una nueva funcionalidad.

3 formas de añadir tests automatizados

Volveremos a esta definición, pero antes, vamos a situarnos. Generalmente, hay varias formas de añadir tests automatizados. cuando decidimos que los vamos a incluir en nuestro proyecto, hay varias formas de añadirlas. La primera, es programar una aplicación y ya después, una vez que tenga varias funcionalidades y quizás haber estado publica para su descarga, se decide añadir estos test automatizados a posteriori -es decir, una vez la app está desarrollada-.

La segunda opción es ir programando funcionalidades e inmediatamente después añadir estos tests. Finalmente, la tercera, es programar primero los tests y después programar la funcionalidad. Esta última en concreto, es la metodología TDD. Vayamos una por una y viendo que ventajas e inconvenientes tienen

Ventajas y desventajas de la opción 1

En primer lugar, la opción de programar primero y después añadir estos tests automatizados (opción 1), tienen la ventaja de que puedes ir mas rápido inicialmente, lo cual ya comentamos en el episodio anterior. Si no tienes que programar estos tests automatizados, vas a necesitar menos tiempo para programar la aplicación, ya que es menos código el que tienes que escribir. Esto, también supone que el coste de desarrollo va a ser menor, por lo menos inicialmente.

Entre las desventajas, está el coste que comentamos en todo el episodio anterior. Generalmente, se deciden añadir cuando se ve el problema, cuando se ve que el testing manual no es suficiente, que salen errores por todos lados y que hay que hacer algo.

El problema aquí, es que puede ser muy complicado añadir tests, una vez que la aplicación está en una fase avanzada de desarrollo. La razón, es que para tener estos tests, se tienen que programar todas las funcionalidades de manera tal que sea testeable; y, esto, no es algo sencillo muchas veces.

Es decir, tienes que programar teniendo en cuenta que luego tienes que escribir test automatizados fiables y que se puedan ejecutar bien. Si no programas con esto en la cabeza, es muy fácil que sigas avanzando y luego sea muy complicado añadir los tests.

Otra desventaja clara, es que como añadirlos a posteriori va a ser mas complicado, va a llevar más tiempo y, en consecuencia, más costoso. No solo por añadir tests automatizados, sino por el hecho de que va a ser mas complicado añadirlos y vamos a necesitar mas tiempo para pensar como poder incluirlos dentro del proyecto. Asimismo, es muy probable que se tenga que tocar mucho código ya desarrollado.

Ventajas y desventajas de la opción 2

La opción de programar funcionalidades e inmediatamente después añadir los tests, se observa con el siguiente ejemplo: cuando estés programando y decidas añadir un nuevo botón que muestra una imagen, lo que haces, es programar esa pequeña funcionalidad y luego inmediatamente añades un tests que compruebe que lo que has hecho, está bien.

La ventaja de esto, es que tenemos tests, lo que significa estar seguro de que las funcionalidades que hemos programado funcionan y podemos demostrarlo rápidamente sin necesidad de recurrir a tests manuales que nos llevarían mucho tiempo.

La primera desventaja, es que tardaremos un poco mas programar, lo cual ya habíamos comentado. Si añades tests automatizados, tardas más en programar una funcionalidad porque tienes que escribir un poco más de código.

Una segunda desventaja sería, por ejemplo, cuando empiezas a programar una funcionalidad y luego decides añadir unos tests, es muy fácil de que olvides de algunos casos de uso. Programas muchas cosas, y luego, no te acuerdas de que hay cierta situación en donde tenias que añadir un test automatizado, y simplemente añades unos pocos. Por lo tanto, no cubres todos esos casos de uso que comentamos.

Finalmente, puede darse el inconveniente que de tienes que cambiar la forma en la que has programado algo porque quizás te des cuentas que no es testeable o compatible con los tests automatizados que quieres escribir y, esto te llevaría más tiempo.

Ventajas y desventajas de la metodología TDD

Por último, tenemos el método TDD que consiste en programar primero los tests, y luego las funcionalidades. ¿En qué consistiría esto exactamente? Imaginemos una pantalla en donde al darle clic a un botón, aparece una imagen que viene de un servidor. Lo que haríamos con TDD, sería dividir en “micro tareas” esta gran tarea.

Primero, añadiríamos un test automatizado que, obviamente, al principio va a fallar porque no hay código escrito aún, y escribiríamos el código de programación hasta que este test funcionara. Luego, seguiríamos con la siguiente micro tarea, haciendo exactamente lo mismo.
Por ejemplo, creo un test que me “comprueba que la imagen sale cuando doy clic a este botón”. En un principio, dado que el test va a fallar, lo que hago es programar esta funcionalidad hasta que sirva.

Posteriormente, voy a la siguiente micro tarea que por ejemplo sería, crear un test que “muestra un mensaje de error, si el servidor que arroja esta imagen, no responde”. De nueva cuenta, lo mismo: el test que ejecuto al principio, no va a funcionar, por lo que escribo el código hasta que esto se cumpla. Asi, sucesivamente, hasta terminar con todos los casos de uso.

La ventaja de esto, es la misma que en la metodología anterior: tenemos tests y, por lo tanto, su beneficio que consiste en saber que estamos haciendo las cosas de forma segura y podemos demostrarlo.

La desventaja, es que tardamos mas en programarlo. En este punto, ya es evidente que siempre que queramos añadir tests automatizados, vamos a tener esta desventaja que, en realidad, no lo es, si recordamos todo lo que vimos en el episodio anterior.

Conclusiones

En resumen, la metodología TDD consiste básicamente en programar tests automatizados antes de programar cualquier funcionalidad dentro de la app; de tal forma, que nos permita cubrir todo o la gran mayoría del código que estamos escribiendo. Esto, básicamente se traduce en menos errores en general.

El gran beneficio ya lo hemos comentado: son los propios tests que nos permiten asegurarnos que nuestra app o proyecto, funciona como debería, sin tener que invertir mucho tiempo después, en tests manuales.

Además, la metodología TDD está considerada como una buena practica en programación, así que podríamos decir que es una señal de programador profesional, el aplicarle en tu metodología de trabajo.

Si te ha resultado útil este artículo puedes hacer que también lo sea para otras personas compartiéndolo en , LinkedIn o .

Como siempre para cualquier duda o sugerencia puedes contactar conmigo y estaré encantado de poder ayudarte.

¿Quieres estar al día

con mi web?

Simple y llanamente te mantendré al día una vez al mes a través de un email con artículos o noticias de interés relacionadas con el mundo de las aplicaciones móviles. ¡Nada de spam!