Qual é o efeito da criação de testes de unidade durante o desenvolvimento no prazo de desenvolvimento e no tempo gasto nas atividades de manutenção?

24

Sou consultor e vou apresentar testes de unidade a todos os desenvolvedores no site do meu cliente. Meu objetivo é garantir que todos os novos aplicativos tenham testes de unidade para todas as classes criadas.

O cliente tem um problema com altos custos de manutenção ao corrigir bugs em seus aplicativos existentes. Suas aplicações têm uma vida útil entre 5 e 15 anos, na qual adicionam continuamente novos recursos. Estou bastante confiante de que eles se beneficiarão muito com o início dos testes de unidade.

Estou interessado no efeito dos testes de unidade no tempo e no custo do desenvolvimento:

  • Quanto tempo os testes de unidade de gravação como parte do processo de desenvolvimento aumentam?
  • Quanto tempo será economizado nas atividades de manutenção (teste e depuração) com bons testes de unidade?
jgauffin
fonte

Respostas:

25

Existem estatísticas disponíveis sobre quanto tempo levará para desenvolver aplicativos ao criar teste de unidade durante o desenvolvimento em comparação com apenas a codificação?

Há algumas pesquisas muito interessantes sobre isso. Leia o seguinte white paper:

Percebendo a melhoria da qualidade através do desenvolvimento orientado a testes: resultados e experiências de quatro equipes industriais

O whitepaper e outras pesquisas de um de seus autores, Nachi Nagappan , são discutidos aqui: http://research.microsoft.com/en-us/news/features/nagappan-100609.aspx

O estudo e seus resultados foram publicados em um artigo intitulado Realizando a melhoria da qualidade através do desenvolvimento orientado a testes: resultados e experiências de quatro equipes industriais, por Nagappan e colegas de pesquisa E. Michael Maximilien, do IBM Almaden Research Center; Thirumalesh Bhat, principal líder de desenvolvimento de software da Microsoft; e Laurie Williams, da Universidade Estadual da Carolina do Norte. O que a equipe de pesquisa descobriu foi que as equipes do TDD produziram código 60 a 90% melhor em termos de densidade de defeitos do que as equipes que não são do TDD. Eles também descobriram que as equipes de TDD levaram mais tempo para concluir seus projetos - 15 a 35% mais.

"Em um ciclo de desenvolvimento de 12 meses, 35% são outros quatro meses, o que é enorme", diz Nagappan. “No entanto, a desvantagem é que você reduz significativamente os custos de manutenção após a liberação, pois a qualidade do código é muito melhor. Novamente, essas são decisões que os gerentes precisam tomar - para onde devem levar o golpe? Mas agora, eles realmente têm dados quantificados para tomar essas decisões. ”

Além disso, Jason Gorman foi proposto como um experimento para a conferência de Artesanato de software este ano. Ele está tentando um experimento criando o mesmo aplicativo usando uma abordagem TDD e não TDD e publicou recentemente um blog sobre seus resultados :

Em três iterações, o tempo médio necessário para concluir o kata sem TDD foi de 28m 40s. O tempo médio com TDD foi de 25m 27s. Sem TDD, em média, fiz 5,7 passes (entregando em testes de aceitação). Com o TDD, em média, eu fiz 1,3 passes (em duas tentativas, eles passaram pela primeira vez, em um foram necessários 2 passes).

Agora, este foi um experimento para bebês, é claro. E não exatamente as condições de laboratório. Mas noto algumas coisas interessantes, todas iguais.

Será interessante ver os resultados completos desse experimento quando mais pessoas o realizarem.

Existem estatísticas disponíveis que mostram quantas horas de manutenção diminuem ao se realizar (bons) testes de unidade?

No whitepaper acima:

Os resultados dos estudos de caso indicam que a densidade de defeitos de pré-liberação dos quatro produtos diminuiu entre 40% e 90% em relação a projetos semelhantes que não usavam a prática de TDD.

Paddyslacker
fonte
Eu gosto desta resposta. Eu acrescentaria que a ferramenta Language and Test também pode ter um grande impacto no tempo do TDD. Para um idioma como C #, antes do NCRUNCH, eu não estava tão empolgado com os benefícios do TDD. Depois de ver e usar o NCRUNCH. Na minha opinião, a tendência de fazer testes paralelos é que o código é uma grande mudança na eficácia de tais ferramentas. As pesquisas baseadas em 2008 podem não refletir as ferramentas atuais e sua eficácia.
phil soady