Quería hacer esta misma pregunta, para ver cuántas empresas realmente practicaban TDD.
En los 11 años que he estado programando profesionalmente, solo las dos últimas organizaciones estaban al tanto de TDD (eso abarca casi 5 años, antes de lo cual TDD no era tan popular como lo es hoy). Iré al grano y responderé a tu pregunta antes de pasar a mi argumento de venta para TDD :)
En la última empresa para la que trabajé (editor académico en línea de colecciones de humanidades y ciencias), sabíamos que necesitábamos practicar TDD, pero nunca llegamos allí. En nuestra defensa, teníamos una base de código de 250k, por lo que agregar pruebas a una base de código no comprobable de ese tamaño se sentía insuperable (¡ahora me siento culpable al escribir eso!). Incluso los mejores cometemos errores .
Cualquiera que haya hecho incluso una pequeña cantidad de TDD sabe cuán dolorosas pueden ser las pruebas de adaptación al código no comprobable de campo marrón ... Las causas principales son las dependencias implícitas (no puede tirar de todas las palancas para afirmar los resultados del código; no puede burlarse escenarios) y la violación del principio de responsabilidad única (las pruebas son complicadas, artificiales, requieren demasiada configuración y son difíciles de entender ).
Crecimos temporalmente nuestro equipo de control de calidad (de una, quizás dos personas a media docena o más) para probar la plataforma antes de cualquier lanzamiento. Fue enormemente costoso en cuanto al tiempo y económicamente, algunos lanzamientos tomarían tres meses para completar la 'prueba'. Incluso entonces sabíamos que íbamos a enviar problemas, simplemente no eran 'bloqueadores' o 'críticos', solo 'de alta prioridad'.
Si tiene una experiencia comercial de años, apreciará que todas las empresas afirmen tareas críticas y luego inventen un nivel de prioridad más alto por encima de eso, y muy probablemente uno por encima de eso también, especialmente cuando alguien de arriba está presionando una función / corrección de errores. Me estoy desviando ...
Me complace informar que estoy practicando TDD en mi empresa actual (casa de desarrollo de aplicaciones de telecomunicaciones, web y móviles), junto con Jenkins CI para dar otros informes de análisis estático (la cobertura de código es la más útil después de afirmar los pases de la suite de pruebas) . Los proyectos en los que he utilizado TDD son un sistema de pago y un sistema de computación grid.
El argumento de venta ...
A menudo puede ser una lucha cuesta arriba que justifica las pruebas automatizadas para los miembros del equipo no técnicos. Escribir pruebas agrega más trabajo al proceso de desarrollo, pero ... el tiempo que invierta en las pruebas ahora, ahorrará esfuerzos de mantenimiento más adelante. Realmente solo estás prestando tiempo . Cuanto más tiempo esté en uso el producto, mayor será el ahorro que obtendrá, y lo ayudará a evitar la gran reescritura .
Probar primero significa que está codificando su intención primero, y luego confirmando que su código cumple esa intención. Esto proporciona enfoque y destila su código para hacer solo lo que se pretende y no más (leer sin hinchazón). Es una especificación ejecutable y documentación al mismo tiempo (si su prueba está bien escrita, y las pruebas deberían ser tan legibles / limpias como el código de su sistema, ¡si no más!).
Los no programadores (a menudo) no tendrán esta información y, por lo tanto, TDD no tiene mucho valor para ellos, y se considera un acceso directo desechable a una fecha de lanzamiento anterior.
La programación es nuestro dominio, y en mi opinión esto hace que sea nuestra responsabilidad , como profesionales, asesorar sobre las mejores prácticas como TDD. No es para que los gerentes de proyecto decidan si se hace para reducir el tiempo de desarrollo, está fuera de su jurisdicción . De la misma manera que no le dicen qué marco, solución de almacenamiento en caché o algoritmo de búsqueda usar, no deberían decirle si debe emplear pruebas automatizadas.
En mi opinión, la industria del desarrollo de software (en general) está rota en la actualidad, el hecho de que realizar pruebas para su software NO es la norma.
Imagine esto en otras industrias: médica, aviación, automóvil, cosméticos, peluches, bebidas alcohólicas, etc. ¡Le pedí a mi prometida que nombrara una industria en la que no probaran el producto y ella no pudo!
Tal vez sea injusto decir que no se realizan pruebas porque sí ... pero en empresas sin pruebas automatizadas, es un proceso muy manual / humano (lectura torpe y a menudo propensa a errores).
Un punto que diría en tu pregunta ...
Por lo general, querían que el desarrollo comenzara de inmediato, o después de una breve etapa de diseño. Más parecido a Agile.
Ser "ágil" no prescribe proceder sin pruebas, el primer miembro que aparece en agilemanifesto.org es Kent Beck , el creador de XP y TDD.
Dos libros que recomiendo encarecidamente si estás interesado en TDD, o simplemente si no los has leído y eres un programador entusiasta (¿son todos los que leen esto, verdad?)
Creciente software orientado a objeciones guiado por pruebas
Código limpio - Serie Robert C Martin ("Tío Bob")
Estos dos libros se complementan entre sí y condensan mucho sentido en pocas páginas.
Gracias por hacer esta pregunta :)