Quelle est la première référence publiée à la programmation test-first?

11

Je relis Refactoring par Martin Fowler. Dans le chapitre 4, Building Tests, je suis tombé sur le passage suivant.

En fait, l'un des moments les plus utiles pour écrire des tests est avant de commencer la programmation. Lorsque vous devez ajouter une fonctionnalité, commencez par écrire le test. Ce n'est pas aussi arriéré qu'il y paraît. En écrivant le test, vous vous demandez ce qui doit être fait pour ajouter la fonction. L'écriture du test se concentre également sur l'interface plutôt que sur l'implémentation (toujours une bonne chose). Cela signifie également que vous avez un point clair auquel vous avez fini de coder - lorsque le test fonctionne.

Bien que je sois maintenant un partisan du développement piloté par les tests, je ne me souvenais pas d'avoir été initié au concept lorsque j'ai lu ce livre il y a près de 5 ans.

Selon Amazon.com, ce livre a été initialement publié le 8 juillet 1999. Est-ce la première référence publiée à la programmation test-first ou y a-t-il quelque chose encore plus tôt?

Eric Weilnau
la source
Ce n'est pas subjectif. Est-ce pertinent? Je ne pense pas. Si vous avez un bon motif pour rouvrir cette question, postez sur meta.programmers.stackexchange.com
Maniero
@bigown: Je ne suis pas sûr de comprendre. Voulez-vous dire que vous avez clos cette question parce qu'elle n'est pas subjective ou qu'elle n'est pas relative?
Eric Weilnau
C'est clairement objectif.
Maniero
2
C'est aussi lié à la programmation et intéressant, et bien qu'il puisse y avoir une vraie réponse, prouver que ce n'est pas facile. Où cela va-t-il? ProgrammingHistory.stackexchange?
AShelly
4
nous pouvons autoriser des questions objectives ici - nous préférons des questions subjectives mais tout comme Stack Overflow a des questions SUBJECTIVES qui survivent, ce site peut avoir des questions OBJECTIVES qui survivent. (Je ne m'attendrais pas à voir ici des questions "comment puis-je faire fonctionner ce code Perl")
Jeff Atwood

Réponses:

9

Le développement piloté par les tests est similaire à la conception par contrat, où vous avez des conditions préalables, des invariants et des post-conditions.

Le terme a été inventé par Bertrand Meyer dans le cadre de sa conception du langage de programmation Eiffel et décrit pour la première fois dans divers articles à partir de 1986 [Wikipedia]

Les méthodes formelles datent d'au moins 1983 et ont été utilisées pour des systèmes critiques pour la sécurité tels que le métro parisien sans conducteur utilisant la méthode B:

Dans la première version, la plus abstraite, appelée Abstract Machine, le concepteur doit spécifier l'objectif de la conception. [Wikipédia]

Celles-ci pourraient être certaines des choses à partir desquelles Kent Beck "a aidé à lancer ... la redécouverte de la programmation test-first".

Plus précisément: Apparemment, le projet Mercury de la Nasa au début des années 1960 était le premier projet logiciel utilisant un développement piloté par les tests et d'autres pratiques agiles. Je n'ai trouvé aucune documentation préliminaire, mais voici un rapport de 2003 qui cite la communication des membres du projet:

Le projet Mercury s'est déroulé avec des itérations très courtes (une demi-journée) qui étaient encadrées dans le temps. L'équipe de développement a procédé à un examen technique de tous les changements et, fait intéressant, a appliqué la pratique de programmation extrême du test d'abord, de la planification et de l'écriture des tests avant chaque micro-incrément.

Le reste du rapport est également intéressant, il poursuit:

La première référence que nous avons trouvée qui se concentrait spécifiquement sur la description et la recommandation du développement itératif était un rapport de 1968 de Brian Randell et FW Zurcher de l'IBM TJ Watson Research.

En plus des tests automatisés, le rapport de 1968 préconise le codage et les tests parallèles, sinon les tests en premier:

g. Conception détaillée, codage et documentation de chaque bloc de programme.
h. Conception et documentation des méthodes de test pour chaque bloc de programme en parallèle avec l'étape (g).

Hugo
la source
4

Jon Bently dans Programming Pearls (publié à l'origine en 1986) ne mentionne pas spécifiquement la programmation Test-First. Mais dans le chapitre "Writing Correct Programs", il décrit l'écriture d'un algorithme en définissant d'abord les conditions préalables, les invariants et les post-conditions, et dans le chapitre suivant décrit un cadre de test automatisé.

Ce n'est pas tout à fait un test d'abord, mais il préparait définitivement une partie du terrain.

Également,

CIO Magazine, mars 1993, Bug Busters , par Lucie Juneau, p. 84 :

Les cas de test ... peuvent être développés avant même qu'un code n'ait été écrit. Idéalement, ces cas sont basés sur les exigences d'une application ... Si les développeurs reçoivent des tests basés sur les exigences avant de commencer à écrire du code, ils vont concevoir un produit qui peut passer ces tests ... "

AShelly
la source
La 2e édition a été publiée le 7 octobre 1999 selon Amazon.com. La 1ère édition a été publiée en 1986. Cette référence était-elle dans la 1ère édition?
Eric Weilnau
Je n'ai lu que la 2ème édition. La préface semble indiquer que le seul chapitre "Écriture de programmes corrects" était dans la 1ère édition, le chapitre des tests automatisés est plus récent.
AShelly
3

C'était Kent Beck , dans son livre Extreme Programming , également publié en 1999 .

texte alternatif


la source
Selon Amazon.com, ce livre a été initialement publié le 5 octobre 1999. C'est près de 3 mois après la publication de Refactoring. J'ai modifié ma question pour inclure la date exacte de publication selon Amazon.com. Je n'ai pas lu le livre de Kent, mais je suppose qu'il fournit beaucoup plus d'informations sur la programmation test-first.
Eric Weilnau
3
Il est intéressant de noter que la quatrième de couverture de ce livre dit que Kent Beck "a aidé à pionnier ... la redécouverte de la programmation test-first". D'où l'a-t-il retrouvé?
AShelly
Recherche intéressante AShelly!
1
@AShelly: Il y a quelques années, Kent Beck a prononcé une allocution à RailsConf. Dans ce document, il a décrit comment il est venu avec TDD et il mentionne qu'il a lu à ce sujet dans un vieil article des années 60.
Jörg W Mittag