Hay bastantes, pero las ventajas lejos superan las desventajas.
Hay una curva de aprendizaje empinada.
Muchos desarrolladores parecen esperar que puedan ser eficientes con la programación de primera prueba desde el primer día. Desafortunadamente, se necesita mucho tiempo para ganar experiencia y programar a la misma velocidad que antes. No puedes evitarlo.
Para ser más específico, es muy fácil equivocarse. Puede muy fácilmente (con muy buenas intenciones) terminar escribiendo un montón de pruebas que son difíciles de mantener o probar las cosas incorrectas. Es difícil dar ejemplos aquí: este tipo de problemas simplemente requieren experiencia para resolverlos. Debe tener una buena idea de separar las preocupaciones y diseñar para la comprobabilidad. Mi mejor consejo aquí sería hacer una programación en pareja con alguien que sepa muy bien TDD.
Usted hace más codificación por adelantado.
Test-first significa que no puedes omitir las pruebas (lo cual es bueno) y significa que terminarás escribiendo más código por adelantado. Esto significa más tiempo. Una vez más, no puedes evitarlo. Se le recompensa con un código que es más fácil de mantener, extender y, en general, menos errores, pero lleva tiempo.
Puede ser una venta difícil para los gerentes.
Los administradores de software generalmente solo se preocupan por las líneas de tiempo. Si cambias a la programación de prueba primero y de repente te tardas 2 semanas en completar una función en lugar de una, a ellos no les va a gustar. Esta es definitivamente una batalla que vale la pena pelear y muchos gerentes están lo suficientemente iluminados para obtenerla, pero puede ser una venta difícil.
Puede ser una venta difícil para otros desarrolladores.
Ya que hay una curva de aprendizaje empinada, no a todos los desarrolladores les gusta la programación de prueba. De hecho, supongo que a la mayoría de los desarrolladores la mayoría no les gusta al principio. Puedes hacer cosas como la programación en pares para ayudarlos a ponerse al día, pero puede ser una venta difícil.
Al final, las ventajas superan las desventajas, pero no ayuda si simplemente ignora las desventajas. Saber de qué se trata desde el principio le ayuda a negociar algunas de las desventajas, si no todas.