El desarrollo impulsado por pruebas es similar al diseño por contrato, donde tiene condiciones previas, invariantes y condiciones posteriores.
El término fue acuñado por Bertrand Meyer en relación con su diseño del lenguaje de programación Eiffel y se describió por primera vez en varios artículos a partir de 1986 [Wikipedia]
Los métodos formales datan de al menos 1983, y se han utilizado para sistemas críticos de seguridad como el metro de París sin conductor utilizando el método B:
En la primera y la versión más abstracta, que se llama Máquina abstracta, el diseñador debe especificar el objetivo del diseño. [Wikipedia]
Estas podrían ser algunas de las cosas de las que Kent Beck "ayudó a ser pionero ... el redescubrimiento de la programación de prueba primero".
Más concretamente: al parecer, el Proyecto Mercury de principios de la década de 1960 de la NASA fue el primer proyecto de software que utilizó desarrollo basado en pruebas y otras prácticas ágiles. No pude encontrar ninguna documentación temprana, pero aquí hay un informe de 2003 que cita la comunicación de los miembros del proyecto:
El Proyecto Mercurio se ejecutó con iteraciones muy cortas (medio día) que estaban encuadradas en el tiempo. El equipo de desarrollo realizó una revisión técnica de todos los cambios y, curiosamente, aplicó la práctica de Programación Extrema de pruebas de desarrollo, planificación y redacción primero de prueba antes de cada microincremento.
El resto del informe también es interesante, continúa diciendo:
La primera referencia que encontramos que se centró específicamente en describir y recomendar el desarrollo iterativo fue un informe de 1968 de Brian Randell y FW Zurcher en IBM TJ Watson Research.
Además de las pruebas automatizadas, el informe de 1968 aboga por la codificación y las pruebas paralelas, si no la prueba primero:
sol. Diseño detallado, codificación y documentación de cada bloque de programa.
h. Diseño y documentación de métodos de prueba para cada bloque de programa en paralelo con el paso (g).