75

Qué es y cómo funciona TDD: Desarrollo a partir de las pruebas, no al revés

111512Puntos

hace 2 años

Curso Básico de Testing en Java
Curso Básico de Testing en Java

Curso Básico de Testing en Java

Crea funciones que hagan test de cada elemento de código que escribes con ayuda de las librerías de Java. Domina las bases del testing unitario de este lenguaje para crear un código limpio de bugs y prepárate para llegar lejos con un desarrollo impecable.

TDD o Test Driven Development es una metodología donde hacemos todo al revés. Por un momento vamos a dejar de programar para dedicarnos a escribir las pruebas.

Pero, ¿cómo vamos a saber lo que debemos probar si ni siquiera hemos escrito el código? Muy buena pregunta. Eso es exactamente lo que vamos a descubrir a continuación.

Objetivo: Agilizar nuestro desarrollo

Las pruebas son código que escribimos para comprobar que otra parte del código funciona correctamente. Sin embargo, no debemos olvidar que podemos caer en muy malas prácticas al escribir nuestro código sin saber exactamente lo que debe hacer, qué resultados debemos conseguir o cuándo deben saltar las alarmas.

En ocasiones puede parecer que es más demorado. Pero, así como toda buena práctica, esto es solo al principio, solo es un primer “obstáculo” que debemos superar para conseguir muchos beneficios.

A la larga, seguir estas metodologías y buenas prácticas nos ahorra tiempo y esfuerzo en errores que debemos resolver. Será mucho más fácil implementar nuevas características y evitaremos escribir código inútil que vamos a utilizar.

Gracias a TDD podemos agilizar nuestro proceso de creación de código. Nos preocupamos más por el qué y el por qué antes del cómo. Todo el código que necesitamos para implementar eso que planeamos con las pruebas será problema un poco más adelante. Por ahora, lo que importa es asegurarnos que estamos resolviendo los problemas correctos.

Cómo funciona: Ciclo de Vida de las pruebas

TDD y el concepto de Black Box

Nuestra metodología de pruebas funciona muy parecido a un concepto de sistemas y física que conocemos como Black Box: Estudiamos o trabajamos a partir de las entradas (inputs) y las salidas o respuestas que produce o debería producir nuestro sistema (outputs).

Con nuestras pruebas es igual. Definimos los argumentos que le enviamos a “la caja negra” y las posibles respuestas que debemos obtener dependiendo de las combinaciones de argumentos.

El desarrollo de nuestras pruebas es el siguiente:

  1. Definimos los objetivos de nuestra prueba y escribimos su posible implementación. Nuestras pruebas deben fallar al principio porque, claramente, todavía no hemos programado el código que les permita funcionar correctamente. 🤔
  2. Programamos el código necesario para pasar las pruebas. 😎
  3. Redefinimos los objetivos. Podemos añadir nuevos casos de uso y refactorizar nuestro código para mejorar la aplicación. 😏

Herramientas

No hay una herramienta como tal para implementar la metodología de TDD. Más bien, existen herramientas que nos ayudan a escribir y correr nuestras pruebas de forma automatizada.

Aquí algunas de las herramientas y frameworks más populares para diferentes lenguajes:

  • JUnit para Java: Es gratuito y open source. Tiene muy buen soporte, mantenimiento y está en constante mejora con nuevas versiones. Nos permite probar EJBs, servlets y programas multihilo pero no hace pruebas unitarias en interfaces Swing, JSPs o HTML. Nos proporciona muy buena DX o experiencia a los desarrolladores ya que se integra muy bien con IntelliJ. Github.com/Junit-team.
  • Jest para JavaScript: Existen muchas alternativas pero, Jest tiene una comunidad muy grande que ha creado más herramientas para mejorar aún más la experiencia de los desarrolladores. También es open source y tiene muy buen mantenimiento por sus creadores, de Facebook. Además, se integra muy bien con herramientas como React, Vue y Angular; funciona tanto del lado del cliente (frontend) como de lado del servidor (frontend y backend). Github.com/Facebook/Jest.
  • En Python: Como te dije antes, TDD es una metodología y la podemos aplicar con cualquier herramienta. Por supuesto, existen librerías nativas o instalables que facilitan el desarrollo y automatización de pruebas en Python como unittest, pytest o Hypothesis.
  • MiniTest para Ruby: También dispone de algunas herramientas nativas que nos dan algunas ayudas para escribir nuestras pruebas más fácilmente. Además, se integran muy bien con Rails y las gemas más populares de Ruby: MiniTest.

Omití algunas herramientas y lenguajes que también pueden ser muy útiles. Si quieres, puedes decirme tus favoritos en los comentarios 😃.

Conclusiones

Te invito a tomar el Curso de Testing con Java. Incluso si no tienes muchos conocimientos de Java (así como yo 🙈). Vamos a aprender todos los tipos de pruebas que existen, las herramientas que inicialmente parecen no tener muchas relación con las pruebas y cómo integrarlas en diferentes proyectos.

No olvides que hay muchos otros cursos que también nos enseñan sobre las mejores herramientas de testing con tu lenguaje favorito 😉:

#NuncaParesDeAprender 🤓💚

Curso Básico de Testing en Java
Curso Básico de Testing en Java

Curso Básico de Testing en Java

Crea funciones que hagan test de cada elemento de código que escribes con ayuda de las librerías de Java. Domina las bases del testing unitario de este lenguaje para crear un código limpio de bugs y prepárate para llegar lejos con un desarrollo impecable.
Juan David
Juan David
juandc

111512Puntos

hace 2 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
4
4926Puntos

Juan eres un crack!

2
111512Puntos
2 años

¡Tú también! 👏😎

4
6140Puntos

Muy interesante el articulo aunque me gustaría conocer acerca de que tipo de herramientas son usadas y recomendadas para lenguajes como C#?

4
18298Puntos
2 años

NUnit, NBehave, XUnit, MSTest, como runners, TDD es una prácitca, no depende de una herramienta o tecnología.

3

Oye Juan felicitaciones"!! De verdad que manejas bien el tema. Continúa así. Oye habré por ahí alguna pagina que me recomiendes donde puede concer mas sobre el testing?Por favor.Saludios!

3
13512Puntos

PHP ya contiene bastantes funciones para validar los inputs que nos envían los usuarios, el testing valida código en general o simplemente inputs / outputs ? Gran artículo enhorabuena

1
111512Puntos
un año

Puede probar lo que tu quieras. En este caso, el testing del que estamos hablando se refiere a probar que la aplicación funcione correctamente, no tanto a que los usuarios escriban formularios correctos.

Te recomiendo el Curso de Introducción a Laravel, en los últimos proyectos del curso estudiamos sobre testing y TDD. 😉

https://platzi.com/clases/intro-laravel/

2
5253Puntos

Me interesa mucho Javascript, Voy a probar cómo me va aprendiendo la metodología TDD con Jest. 😃 😃

2

Buen articulo, me gusto el aparte de herramientas que ayudan a escribir y correr pruebas de forma automatizada, gracias por compartir!!

2
21765Puntos

¡Gracias por este texto David! Venía buscando buena información sobre el tema.

2
4497Puntos

Muy Bueno 😎

1
2030Puntos

@juandc que herramienta opensource recomendas, para escribir casos de prueba? (para analistas funcioales, que no aplican TDD)

0
5789Puntos

No hay algún curso que te enseñen Pruebas de API o Moviles?

0
7395Puntos

Lo de las pruebas se me hace un tema super interesante, aunque aun no me queda claro lo siguiente: una vez que verifique mi función, en qué momento y cómo hago para poder usar mi función? (in python)
Quizá en algún momento haga un curso sobre eso porque me imagino que en cada lenguaje es un poco distinto.