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

Transcripción

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

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 qué ventajas e inconvenientes tienen

Programar primero y añadir a posteriori tests automatizados

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 más 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 más 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 más complicado añadirlos y vamos a necesitar más tiempo para pensar como poder incluirlos dentro del proyecto. Asimismo, es muy probable que se tenga que tocar mucho código ya desarrollado.

Programar funcionalidades y añadir a posteriori los tests

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 más 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 tenías 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 de que 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.

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 nuevo, lo mismo: el test que ejecuto al principio, no va a funcionar, por lo que escribo el código hasta que esto se cumpla. Así, 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 más 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.

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.

¡Suscríbete

a la newsletter!

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!