TDD é eficaz?

Durante uma discussão interessante, uma pessoa muito respeitada "superou" o argumento "indestrutível":
Existem muitos estudos demonstrando a eficácia do TDD.

Realmente. Se você for ao Google Scholar, marque as palavras-chave “TDD” e “Eficiência” - haverá muitos artigos científicos , mas é simples assim? Embora eu seja um grande fã do TDD, também me considero cético e decidi verificar se foi cientificamente provado que o TDD é tão legal.

Acho sua falta de ceticismo perturbadora

O desenvolvimento orientado a testes (TDD) está conosco há muito tempo e, durante todo esse tempo, foi objeto de intenso debate. A essência do TDD é que você precisa iniciar o desenvolvimento escrevendo um teste de unidade decrescente, após o qual é escrito o código que tornará esse teste "verde" e assim por diante. Para aqueles que não estão atualizados, você pode ver o guia TDD na IDE IDE .

Alguns desenvolvedores estão confiantes de que o TDD melhora a eficiência e a qualidade em pelo menos 146%. Alguns desenvolvedores sabem com certeza que o TDD é um absurdo completo, e escrever testes antes de escrever código é como esquiar no asfalto. Um compromisso entre esses grupos de desenvolvimento não vale a pena esperar.

Mas voltando à ciência. Por uma coincidência de sorte, aconteceu que eu estava estudando no programa de mestrado da Universidade Wrexham Glyndŵr em Ciência da Computação com Big Data Analytics (a propósito - recomendo a todos, e vou escrever sobre isso separadamente) e agora estou passando pelo módulo de Pesquisa Crítica, onde eles ensinam você a ler artigos científicos e analise sua validade.
Qual é a nossa evidência?

De fato, existem muitas pesquisas sobre a eficácia e utilidade do TDD. No entanto, se você ler os estudos, perceberá que eles chegam a conclusões conflitantes .

Por exemplo, no relatório “Uma avaliação experimental da efetividade e eficiência do desenvolvimento orientado a testes”, publicado em 2007, concluiu-se que o TDD melhora a produtividade dos desenvolvedores sem afetar a qualidade [1].

Em outro relatório, que examinou as conclusões de vários outros estudos e conduziu seu próprio estudo, “Avaliando a eficácia do desenvolvimento orientado a testes: vantagens e armadilhas”, 2017 concluiu que o TDD pode melhorar a qualidade do produto, mas leva a uma menor produtividade. Além disso, foi observado que a maioria dos desenvolvedores considera o TDD não natural [2].

De acordo com outro estudo, “Uma experiência replicada sobre a eficácia do desenvolvimento do primeiro teste”, 2013, os pesquisadores não foram capazes de encontrar um efeito convincente e significativo das abordagens do primeiro e do último teste sobre a produtividade do desenvolvedor ou a qualidade do produto [3].

Para martelar uma unha no caixão da "evidência" da eficácia e utilidade do TDD, você pode ler o relatório geral "Visão geral dos projetos e experiências de pesquisa em desenvolvimento orientado a testes", 2012 [4], em que, com base em um grande número de estudos disponíveis, eles tentaram chegar a uma conclusão sobre a evidência eficiência e efeito positivo do TDD. Os autores concluíram que não há evidências convincentes dos efeitos benéficos do TDD. Diferenças nos resultados de estudos anteriores, os autores substanciaram viés de confirmação - os estudos que mostraram a eficácia do TDD foram originalmente baseados na hipótese de que o TDD é eficaz.
Então, por que as pessoas (inclusive eu) consideram o TDD uma ótima prática?
Depois de ler a pesquisa, tenho apenas uma resposta lógica - a eficácia e a aplicabilidade do TDD dependem principalmente do desenvolvedor em particular. Estudos sobre a eficácia do TDD, aparentemente, não levaram suficientemente em conta que os desenvolvedores não são robôs, e o TDD não é um programa. Para alguns desenvolvedores, o TDD trará bons resultados, para alguns - não haverá diferença significativa entre o TDD e os testes unitários de escrita simples, para alguns - o TDD levará a uma queda na qualidade, produtividade e motivação.

Programar é atividade social. O problema das interações sociais é que não é uma ciência exata. Resta descobrir como conduzir um experimento mais ou menos científico para confirmar / refutar essa hipótese. Para começar, ofereço uma pesquisa.

Se você deseja repentinamente compartilhar esta publicação com seus colegas que falam inglês, existe uma versão em inglês um pouco mais formal: medium.com/@alexspush/is-tdd-effective-2474c0471ac4

Lista de fontes

[1] A. Gupta, P. Jalote “Uma avaliação experimental do Efetividade e eficiência do desenvolvimento orientado a testes ”apresentado no Primeiro Simpósio Internacional de Engenharia e Medição Empírica de Software, Madri, Espanha, 2007
[2] Z. Khanam, M. Ahsan,“ Avaliando a eficácia do desenvolvimento orientado a testes: vantagens e armadilhas ” International Journal of Applied Engineering Research vol. 12, n. 18, p. 7705, 2017. Disponível: www.ripublication.com/ijaer17/ijaerv12n18_81.pdf . [Acessado em 13 de maio de 2020].
[3] D. Fucci, B. Turhan, “Um experimento replicado sobre a eficácia do desenvolvimento do primeiro teste” apresentado no Simpósio Internacional ACM / IEEE sobre Engenharia e Medição Empírica de Software, Baltimore, MD, EUA, 2013
[4] A. Bulajic, S. Sambasivam e R. Stojic “Visão geral dos projetos e experiências de pesquisa em desenvolvimento orientado a testes” apresentados em Proceedings of Informing Science & IT Education Conference (InSITE), 2012. Disponível em: pdfs.semanticscholar.org/3278/971bb53a25822171df127d47a57243dd3bbd.pdf . [Acessado em 13 de maio de 2020].

All Articles