Crecí sin TDD en absoluto, y solo en los últimos meses tuve que usarlo. Realmente no me gusta, aunque, me apresuro a agregar, veo la necesidad de alguna forma. Estoy de acuerdo con la automatización de pruebas en general: simplemente no me gustan las pruebas que “impulsan” el desarrollo al forzar ciertos patrones de desarrollo, como la inyección de dependencia, que considero pura maldad. Estoy abierto a la educación sobre esto, pero por lo que veo, realmente no me gusta. Entiendo los riesgos del (cierto tipo de) acoplamiento, pero creo que la cura DI es peor que la enfermedad en muchos casos.
Sé lo que es soportar bases de código complejas y grandes durante años a la vez, y el temor progresivo del cambio que ocurre a medida que los proyectos se hacen cada vez más grandes hasta el punto de ser demasiado difíciles de administrar: el cambio se vuelve demasiado arriesgado. Esta es la razón principal para tener una buena automatización de pruebas, de modo que las implementaciones sean “aburridas” y haya poca o ninguna posibilidad de regresión. Pero como digo, me parece que TDD agrega complejidad (en forma de inyección de dependencia) junto con cierto fervor dogmático al respecto. La complejidad y el dogmatismo son el enemigo, en lo que a mí respecta.
El otro gran problema con TDD, en mi opinión, es que es demasiado fácil escribir pruebas que siempre pasan, que realmente no cubren lo que crees que están cubriendo. Cuando pienso en lo que salió mal en mis cosas a lo largo de los años, el 96% del tiempo es directamente “algo que yo (y los BA con los que trabajo) nunca esperé”, algo extraño que un cliente hizo en sus datos. Siendo realistas, nunca podría haber escrito una prueba para anticiparlo. El 3% de las veces, tengo problemas con la fusión y promoción del código fuente entre sucursales. El 1% de las veces realmente me he olvidado de hacer algo, y es un huevo en mi cara. En pocas palabras, cuando miro errores y fallas de la manera más amplia, no veo cómo TDD habría ayudado la mayor parte del tiempo.
- ¿Qué campo de ingeniería es mejor para alguien que quiere desarrollar software o construir productos electrónicos como ventiladores eléctricos, auriculares, ratones y teclados?
- ¿Qué puedo usar para almacenar información del producto?
- ¿Más personas piensan que GWT (anteriormente Google Web Toolkit) está diseñado por ingenieros en el vacío?
- Tengo una aplicación que está a punto de comenzar las pruebas de usuarios externos antes de un lanzamiento público. ¿Cuáles son las mejores soluciones gratuitas o de bajo costo para recopilar comentarios de los usuarios?
- ¿Hasta qué punto en el proceso de aprendizaje de ruby un codificador principiante comenzará a trabajar con cosas que se parecen a la web moderna (usuarios, perfiles, mensajes, publicaciones), en oposición a las variables y cadenas iniciales en las ventanas de terminal negras?
Lo que me gustaría ver en el mundo de la automatización de pruebas es más ayuda de los IDE que generan código de prueba, por ejemplo, inspección automática o aislamiento de SQL en línea. Me gustaría ver modelos económicos o abreviados de las interacciones del navegador del usuario final (es decir, Selenium). En otras palabras, proporcione una manera fácil de simular la interacción del usuario con páginas web en vivo. Hay herramientas para esto, por supuesto, pero no son convencionales (en mi experiencia), y aún requieren una gran inversión. No me gusta ver pruebas para las pruebas de sake que simplemente agregan “cobertura” sin modelar un escenario de falla realista.