¿Cuál es la primera referencia publicada a la programación de prueba primero?

11

Estoy releyendo Refactoring por Martin Fowler. En el Capítulo 4, Pruebas de construcción, me encontré con el siguiente pasaje.

De hecho, uno de los momentos más útiles para escribir pruebas es antes de comenzar a programar. Cuando necesite agregar una función, comience escribiendo la prueba. Esto no es tan atrasado como parece. Al escribir la prueba, se pregunta qué debe hacerse para agregar la función. Escribir la prueba también se concentra en la interfaz en lugar de la implementación (siempre es algo bueno). También significa que tiene un punto claro en el que ha terminado de codificar, cuando la prueba funciona.

Aunque ahora soy un defensor del desarrollo basado en pruebas, no recordaba haber sido introducido al concepto cuando leí este libro originalmente hace casi 5 años.

Según Amazon.com, este libro se publicó originalmente el 8 de julio de 1999. ¿Es esta la primera referencia publicada a la programación de prueba primero o hay algo aún más temprano?

Eric Weilnau
fuente
No es subjetivo ¿Es relevante? No lo creo. Si tiene un buen motivo para volver a abrir esta pregunta, publique en meta.programmers.stackexchange.com
Maniero
@bigown: No estoy seguro de entender. ¿Estás diciendo que cerraste esta pregunta porque no es subjetiva o que no es relativa?
Eric Weilnau
Es claramente objetivo.
Maniero
2
También está relacionado con la programación e es interesante, y aunque puede haber una respuesta verdadera, demostrar que no es fácil. ¿A dónde más va? ProgrammingHistory.stackexchange?
AShelly
44
Aquí podemos permitir preguntas objetivas: preferimos preguntas subjetivas, pero al igual que Stack Overflow tiene algunas preguntas SUBJETIVAS que sobreviven, este sitio puede tener algunas preguntas OBJETIVAS que sobreviven. (Sin embargo, no esperaría ver aquí ninguna pregunta de "cómo hago para que funcione este código Perl")
Jeff Atwood

Respuestas:

9

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).

Hugo
fuente
4

Jon Bently en Programming Pearls (publicado originalmente en 1986) no menciona específicamente la programación Test-First. Pero en el capítulo "Escribir programas correctos", describe cómo escribir un algoritmo definiendo primero las condiciones previas, invariantes y posteriores, y en el siguiente capítulo describe un marco de prueba automatizado.

No es una prueba, pero definitivamente estaba sentando las bases.

También,

Revista CIO , marzo de 1993, Bug Busters , por Lucie Juneau, página 84 :

Los casos de prueba ... se pueden desarrollar incluso antes de que se haya escrito ningún código. Idealmente, estos casos se basan en los requisitos de una aplicación ... Si los desarrolladores reciben pruebas basadas en requisitos antes de comenzar a escribir código, diseñarán un producto que pueda pasar esas pruebas ... "

AShelly
fuente
La segunda edición se publicó el 7 de octubre de 1999 según Amazon.com. La primera edición se publicó en algún momento de 1986. ¿Fue esta referencia en la primera edición?
Eric Weilnau
Solo he leído la segunda edición. El prefacio parece indicar que el único capítulo de "Escribir programas correctos" fue en la 1ª edición, el capítulo de pruebas automatizadas es más nuevo.
AShelly
3

Ese fue Kent Beck , en su libro Extreme Programming , también publicado en 1999 .

texto alternativo


fuente
Según Amazon.com, este libro se publicó originalmente el 5 de octubre de 1999. Esto es casi 3 meses después de la publicación de Refactoring. He editado mi pregunta para incluir la fecha exacta de publicación de acuerdo con Amazon.com. No he leído el libro de Kent, pero supongo que proporciona mucha más información sobre la programación de prueba primero.
Eric Weilnau
3
Es interesante que la contraportada de ese libro dice que Kent Beck "ayudó a ser pionero ... el redescubrimiento de la programación de prueba primero". ¿De dónde lo redescubrió?
AShelly
Interesante encontrar a AShelly!
1
@AShelly: Hace un par de años, Kent Beck dio una conferencia magistral en RailsConf. En él describió cómo se le ocurrió el TDD y menciona que lo leyó en un viejo artículo de los años 60.
Jörg W Mittag