tdd

El Test-Driven Development (TDD) fue creado por Kent Beck a finales de los años 90 y se ha extendido como la pólvora. Ya goza de una gran popularidad entre la comunidad de programadores. El TDD mas que una serie de herramientas de software o lenguaje de programación es una técnica que quizá a prioi podría ir en contra del instinto natural de todo programador. Más adelante explicaremos el porqué.

La traducción al español sería “desarrollo guiado por pruebas” pero usaremos las siglas en inglés para aplicar el ejemplo de este post y ser más productivos en todo momento.  El TDD consiste en aplicar iteraciones cortas y rápidas del ciclo “Red Green Refactor”. Aplica el algoritmo clásico de “divide y vencerás” al precepto de calidad en la producción de software, basándose en  los 3 siguientes pasos:

  1. Red: Crea un test que representa una especificación, a sabiendas que va a fallar y tal vez ni siquiera compilar.
  2. GreenImplementa una solución que permita que el test pase, desarrollando el código tan sólo justo para ello. Comprobaremos también que el resto de tests previamente implementados sigan funcionando, evitando así que nuestra nueva funcionalidad cause error en otras implementadas previamente.
  3. RefactorOptimizamos el código del test asegurando se mantenga su funcionalidad.

De esta forma, el desarrollo realmente es dictado por los tests que representan las especificaciones del programa,  logrando así crear software 100% correcto, limpio, divino y en tiempo récord. 

Red Green Refactor

¿Cuál es el propósito del TDD?

1. Minimizar el número de bugs. Corregir bugs supone invertir tiempo, lo que se traduce irremediablemente en dinero que no se despilfarra. El tiempo es dinero y cuantos menos bugs tengamos que corregir más rentable será nuestro proyecto (¡y menos dolores de cabeza y frustración también!).

2. Implementar las funciones justas que se necesitan en ese momento. Todo programador sabe lo bueno que podría ser implementar diferentes funcionalidades que aporten un valor añadido a una aplicación. Pero no nos engañemos, si por ejemplo un cliente nos ha pedido algo concreto, mejor dárselo para optimizar el trabajo invertido. Gracias a este método eliminamos ese tiempo de picar código que el responsable de la app no ha pedido. Eficiencia y rentabilidad como objetivos fundamentales.

3. Producir software modular y altamente reutilizable y preparado para el cambio. Con esta técnica no nos tenemos que preocupar si hay rotaciones de programadores y que usen ese mismo código. No hay riesgo de que rompan el código. Todo lo escrito ha sido testeado previamente, por lo que cualquier cambio que se quiera implantar está cubierto por los test.

Ayuda a partir un problema en porciones más pequeñas y asegurarse que no tiene errores.  Es una forma de medir que se está desarrollando en modo correcto y también el tiempo que inviertes en cada etapa de este proceso. Primero escribir código y luego probarlo, un proceso bastante natural, ¿verdad? Pero podríamos hacerlo a la inversa: empezar con las pruebas y luego escribiendo el código que la prueba desee testear. Aquí reside el kit del asunto y que choca con el instinto del programador.

Ventajas de comenzar a usar TDD si eres programador

1. ProductividadEvitamos escribir más código del que realmente se necesitaUsando TDD, vas solucionando tareas fraccionadas y superando test concretos, lo cual ayuda a optimizar mucho mejor el tiempo invertido.

2.  Tranquilidad. Al seguir el proceso de TDD, todo el código escrito después de realizar los test está totalmente protegido. Esto da como resultado un código fresco, claro y limpio.

3. Escalabilidad. Todo proyecto se hace grande a medida que se va profundizando en él. Esto trae como resultado un incremento en la complejidad del código. TDD permite evaluar en qué punto nos encontramos en cada momento para hacer un chequeo rápido de “¿cómo vamos?”.

4. Refactorización. Después de encontrar un problema, pasamos al proceso de refactorización del mismo, de forma que no tenemos que esperar a tener el código finalizado para poder llevar a cabo esta tarea, sino que el código se va reescribiendo a medida que se detectan errores.

5. Depuración. TDD es la mejor forma para detectar los fallos, si aparece uno y modificamos el código hasta que pase el test, lo vamos depurando paulatinamente y obtenemos un código limpio.

Desventajas del uso de TDD

Hay que tener en cuenta que no todo es perfecto y el TDD tiene algunos ligeros inconvenientes a la hora de implantarlo en un proyecto. Los dos más relevantes a tener en cuenta serían los errores no identificados y la curva de aprendizaje.

1. Los errores no identificados: 

Sólo por el hecho de pasar todas las pruebas en la herramienta que se use, no quiere decir que no se tengan errores, sólo significa que las pruebas que se han ejecutando no han encontrado errores. Esto puede provocar un falso sentimiento de seguridad, por lo que es necesario que las pruebas sean detalladas y cubran todos los hipotéticos escenarios posibles.

2. Curva de aprendizaje: 

TDD es una técnica difícil de adoptar a corto plazo y tiene una curva de aprendizaje elevada, lo que significa que nuestra productividad se verá reducida durante los primeros meses de uso, pero después compensará notablemente el esfuerzo invertido. Conviene realizar una formación especializada para lograr minimizar el impacto de esa caída de productividad al mínimo.

tdd-refactor

Conclusión 

Después de analizar todas las ventajas e inconvenientes que tiene el Test Driven Development, es conveniente recalcar que los beneficios que aporta a día de hoy este sistema compensan con creces las ligeras desventajas de este popular sistema de trabajo.

La productividad y la eficiencia son dos ingredientes básicos que todo programador debe tener en mente en cada momento para lograr sus objetivos de trabajo a largo plazo. Esa confianza traerá consigo nuevas y mejores oportunidades laborales en el sector de la programación.

Conoce nuestros Bootcamps

Bootcamp Aprende a programar desde cero

Full Stack Web Bootcamp

Full Stack Mobile Bootcamp

Full Stack Big Data & Machine Learning Bootcamp

Full Stack DevOps Bootcamp

Full Stack Cybersecurity Bootcamp

Máster en Tecnologías Exponenciales de la Computación

¡Pide más información! Nosotros te llamamos