¿Es efectivo el TDD?

Durante una discusión interesante, una persona muy respetada "superó" el argumento "indestructible":
Hay muchos estudios que demuestran la efectividad de TDD.

De Verdad. Si va a Google Scholar, escriba las palabras clave "TDD" y "Eficiencia": habrá muchos artículos científicos , pero ¿es así de simple? Aunque yo mismo soy un gran admirador de TDD, también me considero un escéptico y decidí comprobar si se ha demostrado científicamente que TDD es tan genial.

Encuentro su falta de escepticismo inquietante

El desarrollo basado en pruebas (TDD) ha estado con nosotros durante mucho tiempo, y todo este tiempo ha sido un tema de acalorado debate. La esencia de TDD es que necesita comenzar el desarrollo escribiendo una prueba de unidad descendente, después de lo cual se escribe el código que hará que esta prueba sea "verde", y así sucesivamente. Para aquellos que no están actualizados, puede ver la guía TDD en IDE Idea .

Algunos desarrolladores confían en que TDD mejora la eficiencia y la calidad en al menos un 146%. Algunos desarrolladores saben con certeza que TDD no tiene sentido, y escribir pruebas antes de escribir código es como esquiar en el asfalto. No vale la pena esperar un compromiso entre estos grupos de desarrollo.

Pero volvamos a la ciencia. Por una coincidencia afortunada, sucedió que estaba estudiando en el programa de maestría de la Universidad de Wrexham Glyndŵr en Ciencias de la Computación con Big Data Analytics (por cierto, lo recomiendo a todos, y escribiré sobre esto por separado) y ahora estoy pasando por el módulo de Investigación Crítica, que te enseña a leer artículos científicos y analizar su validez.
¿Cuál es nuestra evidencia?

De hecho, hay mucha investigación sobre la efectividad y la utilidad de TDD. Sin embargo, si lee los estudios en sí, notará que llegan a conclusiones contradictorias .

Por ejemplo, en el informe "Una evaluación experimental de la efectividad y eficiencia del desarrollo impulsado por pruebas", publicado en 2007, se concluyó que TDD mejora la productividad de los desarrolladores sin afectar la calidad [1].

En otro informe, que examinó los hallazgos de varios otros estudios y realizó su propio estudio, "Evaluación de la efectividad del desarrollo impulsado por pruebas: ventajas y dificultades", 2017 concluyó que TDD puede mejorar la calidad del producto, pero conduce a una menor productividad. Además, se ha observado que la mayoría de los desarrolladores consideran que TDD no es natural [2].

Según otro estudio, "Un experimento replicado sobre la efectividad del desarrollo de Test-First", 2013, los investigadores no pudieron encontrar un efecto convincente y significativo de los enfoques Test-First o Test-Last sobre la productividad del desarrollador o la calidad del producto [3].

Para clavar un clavo en el ataúd de "evidencia" de la efectividad y utilidad de TDD, puede leer el informe general "Descripción general de los proyectos y experimentos de investigación de desarrollo impulsados ​​por pruebas", 2012 [4], en el que, en base a una gran cantidad de estudios disponibles, trataron de llegar a una conclusión sobre la evidencia eficiencia y efecto positivo de TDD. Los autores concluyeron que no hay evidencia convincente de los efectos beneficiosos de la TDD. Las diferencias en los resultados de estudios anteriores, los autores corroboraron el sesgo de confirmación: los estudios que mostraron la efectividad de la TDD se basaron originalmente en la hipótesis de que la TDD es efectiva.
Entonces, ¿por qué la gente (incluyéndome a mí) considera que TDD es una gran práctica?
Después de leer la investigación, solo tengo una respuesta lógica: la efectividad y la aplicabilidad de TDD dependen principalmente del desarrollador en particular. Aparentemente, los estudios sobre la efectividad de TDD no han tenido suficientemente en cuenta que los desarrolladores no son robots y que TDD no es un programa. Para algunos desarrolladores, TDD traerá buenos resultados, para algunos, no habrá una diferencia significativa entre TDD y las pruebas de unidades de escritura simples, para algunos, TDD conducirá a una caída en la calidad, la productividad y la motivación.

La programación es actividad social. El problema con las interacciones sociales es que no es una ciencia exacta. Queda por descubrir cómo llevar a cabo un experimento más o menos científico para confirmar / refutar esta hipótesis. Para comenzar, ofrezco una encuesta.

Si de repente quiere compartir esta publicación con sus colegas de habla inglesa, hay una versión en inglés un poco más formal: medium.com/@alexspush/is-tdd-effective-2474c0471ac4

Lista de fuentes

[1] A. Gupta, P. Jalote “Una evaluación experimental de la Eficacia y eficiencia del desarrollo basado en pruebas ”presentado en el Primer Simposio Internacional sobre Ingeniería y Medición de Software Empírico, Madrid, España, 2007
[2] Z. Khanam, M. Ahsan,“ Evaluación de la efectividad del desarrollo basado en pruebas: ventajas y dificultades ” Revista Internacional de Investigación de Ingeniería Aplicada vol. 12, no 18, p. 7705, 2017. Disponible: www.ripublication.com/ijaer17/ijaerv12n18_81.pdf . [Consultado el 13 de mayo de 2020].
[3] D. Fucci, B. Turhan, "Un experimento replicado sobre la efectividad del primer desarrollo de prueba" presentado en el Simposio internacional ACM / IEEE sobre ingeniería y medición de software empírico, Baltimore, MD, EE. UU., 2013
[4] A. Bulajic, S. Sambasivam y R. Stojic "Descripción general de los proyectos y experimentos de investigación de desarrollo impulsados ​​por pruebas" presentados en la Conferencia de Educación de Ciencias de la Información y TI (InSITE), 2012. Disponible: pdfs.semanticscholar.org/3278/971bb53a25822171df127d47a57243dd3bbd.pdf . [Consultado el 13 de mayo de 2020].

All Articles