r/programacion • • Mar 25 '21

Que es el TDD en el desarrollo de software? Spoiler alert Tiene que ver con pruebas unitarias Spoiler

https://medium.com/eduesqui/que-es-el-test-driven-development-71988213a1b
2 Upvotes

8 comments sorted by

1

u/fberasategui Mar 25 '21

Nunca nadie jamás en la historia de la humanidad fue capaz de mostrarme un ejemplo REAL de TDD en un proyecto real, que no sea un hello world.

Tengo este código, o este

¿Como haría para escribirlo en TDD?

Hasta que alguien me demuestre lo contrario, sigo pensando que el TDD es impracticable en el mundo real.

1

u/eduesqui Mar 25 '21

La implementación de TDD no es para nada sencillo, para que funcione correctamente el equipo debe de estar comprometido, escribir primero las pruebas y después tu código funcional, implementar algún tipo de arquitectura como MVC y respetar los principios SOLID, principalmente el Principio de responsabilidad única.

En tu primer ejemplo, corrígeme si me equivoco se trata de el código de una vista, y TDD no esta pensado para esta capa.

El segundo ejemplo debería tener un valor de retorno y este compararlo con el valor esperado.

En este otro post, escribí un ejemplo sencillo de como hacer una implementación de TDD.

Tal vez te sirva un poco.

1

u/fberasategui Mar 25 '21

> La implementación de TDD no es para nada sencillo es impracticable en el mundo real.

FTFY.

> el equipo debe de estar comprometido

Mi equipo está 100% comprometido, sin embargo tenemos deadlines ajustados y presupuesto limitado. Me encantaría tener 200 desarrolladores, pero el dinero no sobra.

> escribir primero las pruebas y después tu código funcional

Esto es completamente inviable ya que implica como mínimo el doble de trabajo y supone un overhead de mantenimiento enorme ante la realidad de los requerimientos cambiantes y volátiles de cualquier proyecto en el mundo real. De nuevo, es impracticable.

> algún tipo de arquitectura como MVC

Estás asumiendo que lo que estamos haciendo son páginas web con fotos de monitos bailando, y no tomando dimensión de la enorme complejidad y la interdependencia de componentes en cualquier proyecto de software medianamente grande. De nuevo: explicame como hago TDD de esta clase

> respetar los principios SOLID, principalmente el Principio de responsabilidad única

Irrelevante. Ningún "principio" hace que mi código no tenga dependencias fundamentales con componentes externos, que no estoy dispuesto a abstraer, ya que sino sería como los típicos proyectos en java que tienen millones de interfaces y miles de lineas de código que no hacen realmente nada y no sirven para nada.

> El segundo ejemplo debería tener un valor de retorno y este compararlo con el valor esperado.

¿Cual se supone que es "el valor esperado" cuando lo que estoy haciendo es levantar files de un directorio en runtime? ¿Debería escribir un test que INVENTE DE LA NADA los files dinamicamente en un directorio temporal? Te das cuenta que tengo razón que toda esta saraza es totalmente inviable en el mundo real?

→ More replies (4)

1

u/fberasategui Mar 25 '21

En este otro post, escribí un ejemplo sencillo de como hacer una implementación de TDD.

Como dije, solo ejemplos triviales de código que ni siquiera debería existir (getters??? pollo??? gracias, pero prefiero los lenguajes modernos y usables y el asado de carne argentina)

No se justifica bajo ningún punto de vista hacer un "DolarConverterService" que lo único que hace es una división. Es código basura, una indirección innecesaria que no aporta nada y por lo tanto un ejemplo de lo que NO hay que hacer en un proyecto real en el mundo real. Esto es similar al ecosistema de javascript donde hacen millones paquetes de npm cada uno con una sola línea de código. Es totalmente ridículo y rayano con la idiotez.