Le TDD est-il efficace?

Au cours d'une discussion intéressante, une personne très respectée a «éclipsé» l'argument «indestructible»:
Il existe de nombreuses études démontrant l'efficacité du TDD.

Vraiment. Si vous allez sur Google Scholar, saisissez les mots clés "TDD" et "Efficacité" - il y aura de nombreux articles scientifiques , mais est-ce aussi simple? Bien que je sois moi-même un grand fan du TDD, je me considère également comme un sceptique et j'ai décidé de vérifier s'il a été scientifiquement prouvé que le TDD est si cool.

Je trouve ton manque de scepticisme inquiétant

Le développement piloté par les tests (TDD) est avec nous depuis longtemps, et pendant tout ce temps, il a fait l'objet d'un débat animé. L'essence de TDD est que vous devez commencer le développement en écrivant un test unitaire en baisse, après quoi un code est écrit qui rendra ce test «vert», et ainsi de suite en boucle. Pour ceux qui ne sont pas à jour, vous pouvez voir le guide TDD dans IDE Idea .

Certains développeurs sont convaincus que TDD améliore l'efficacité et la qualité d'au moins 146%. Certains développeurs savent avec certitude que TDD est un non-sens complet, et écrire des tests avant d'écrire du code, c'est comme skier sur de l'asphalte. Un compromis entre ces groupes de développement ne vaut pas la peine d'attendre.

Mais revenons à la science. Par une heureuse coïncidence, il se trouve que j'étudiais au programme de maîtrise en informatique de l'Université Wrexham Glyndŵr avec Big Data Analytics (en passant - je le recommande à tout le monde, et j'écrirai à ce sujet séparément) et en ce moment je passe par le module de recherche critique, où ils vous apprennent à lire des articles scientifiques et analyser leur validité.
Quelle est notre preuve?

Il y a en effet beaucoup de recherches sur l'efficacité et l'utilité du TDD. Cependant, si vous lisez les études elles-mêmes, vous remarquerez qu'elles aboutissent à des conclusions contradictoires .

Par exemple, dans le rapport «Une évaluation expérimentale de l'efficacité et de l'efficience du développement piloté par les tests», publié en 2007, il a été conclu que TDD améliore la productivité des développeurs sans affecter la qualité [1].

Dans un autre rapport, qui a examiné les résultats de plusieurs autres études et a mené sa propre étude, «Évaluer l'efficacité du développement piloté par les tests: avantages et pièges», 2017 a conclu que le TDD peut améliorer la qualité du produit, mais conduit à une baisse de la productivité. De plus, il a été observé que la plupart des développeurs trouvent TDD contre nature [2].

Selon une autre étude, «A Replicated Experiment on the Efficiency of Test-First Development», 2013, les chercheurs n'ont pas pu trouver un effet convaincant et significatif des approches Test-First ou Test-Last sur la productivité du développeur ou la qualité du produit [3].

Pour enfoncer un clou dans le cercueil des «preuves» de l'efficacité et de l'utilité du TDD, vous pouvez lire le rapport de synthèse «Aperçu des projets de recherche et des expériences de développement piloté par les tests», 2012 [4], dans lequel, sur la base d'un grand nombre d'études disponibles, ils ont tenté de conclure sur les preuves efficacité et effet positif du TDD. Les auteurs ont conclu qu'il n'y a aucune preuve convaincante des effets bénéfiques du TDD. Différences dans les résultats des études précédentes, les auteurs ont corroboré le biais de confirmation - les études qui ont montré l'efficacité du TDD étaient à l'origine basées sur l'hypothèse que le TDD est efficace.
Alors pourquoi les gens (y compris moi) considèrent-ils le TDD comme une excellente pratique?
Après avoir lu la recherche, je n'ai qu'une seule réponse logique - l'efficacité et l'applicabilité de TDD dépend principalement du développeur particulier. Les études sur l'efficacité de TDD, apparemment, n'ont pas suffisamment pris en compte le fait que les développeurs ne sont pas des robots, et TDD n'est pas un programme. Pour certains développeurs, TDD apportera de bons résultats, pour certains il n'y aura pas de différence significative entre TDD et les tests unitaires d'écriture simples, pour certains TDD conduira à une baisse de qualité, de productivité et de motivation.

La programmation est une activité sociale. Le problème des interactions sociales est qu'il ne s'agit pas d'une science exacte. Reste à savoir comment mener une expérience plus ou moins scientifique pour confirmer / réfuter cette hypothèse. Pour commencer, je vous propose une enquête.

Si vous souhaitez soudainement partager cette publication avec vos collègues anglophones, il existe une version anglaise un peu plus formelle: medium.com/@alexspush/is-tdd-effective-2474c0471ac4

Liste des sources

[1] A. Gupta, P. Jalote «An Experimental Evaluation of the Efficacité et efficience du développement piloté par les tests »présenté au premier Symposium international sur l'ingénierie et la mesure des logiciels empiriques, Madrid, Espagne, 2007
[2] Z. Khanam, M. Ahsan,« Évaluation de l'efficacité du développement piloté par les tests: avantages et pièges » Journal international de recherche appliquée en ingénierie vol. 12, no 18, p. 7705, 2017. Disponible: www.ripublication.com/ijaer17/ijaerv12n18_81.pdf . [Consulté le 13 mai 2020].
[3] D. Fucci, B. Turhan, «A Replicated Experiment on the Efficiency of Test-first Development» présenté au Symposium international ACM / IEEE sur l'ingénierie et la mesure des logiciels empiriques, Baltimore, MD, États-Unis, 2013
[4] A. Bulajic, S. Sambasivam et R. Stojic «Overview of the Test Driven Development Research Projects and Experiments» présenté à Proceedings of Informing Science & IT Education Conference (InSITE), 2012. Disponible: pdfs.semanticscholar.org/3278/971bb53a25822171df127d47a57243dd3bbd.pdf . [Consulté le 13 mai 2020].

All Articles