Eu trabalho em uma grande empresa, mas em uma equipe de apenas dois homens, desenvolvendo aplicativos LOB para desktop. Estou pesquisando o TDD há um bom tempo e, embora seja fácil perceber seus benefícios para aplicativos maiores, estou tendo dificuldades para justificar o tempo para começar a usar o TDD na escala de nossos aplicativos.
Entendo suas vantagens em automatizar testes, melhorar a capacidade de manutenção etc., mas, em nossa escala, escrever testes de unidade básicos para todos os nossos componentes pode facilmente dobrar o tempo de desenvolvimento. Como já estamos com falta de prazos extremos, não tenho certeza de que direção tomar. Embora outras práticas, como o desenvolvimento iterativo ágil, sejam perfeitas desde então, estou meio que dividida com as compensações de produtividade do TDD em uma equipe pequena.
As vantagens do TDD valem o tempo extra de desenvolvimento em equipes pequenas com cronogramas muito apertados?
Respostas:
A verdade feia é que, inicialmente, isso o atrasará . Qualquer novo processo ou prática leva algum tempo para acelerar. Na minha experiência, o TDD não paga com a implementação inicial tanto quanto com manutenção, correção de erros e extensão. Sei que para outros existe um pagamento imediato, portanto, isso dependerá do estilo de codificação atual de cada pessoa.
Enquanto eu sou um grande defensor do TDD (eu o trouxe para o meu trabalho atual) , acho que você precisa ter um pouco de espaço para respirar (prazos / prazos) para explorar e entender a prática.
Quanto menor sua equipe, mais imediatamente você poderá se beneficiar do TDD. Vi esse pagamento em tamanho de equipe de 6 a 3.
fonte
O tempo extra de desenvolvimento do qual você está falando pode ser uma ilusão .
O que diferencia o TDD do teste de unidade padrão é que ele não é usado apenas para fazer testes.
TDD is a new way of developing software
. É uma das melhores maneiras que eu conheço.Portanto, não está relacionado ao tamanho do seu projeto. Você extrairá os benefícios da primeira linha de código .
fonte
equívoco comum, deixe-me gritar:
OS TESTES NO TDD SÃO PARA RECURSOS
EOM.
Edit: deixe-me elaborar: "escrever ... testes de unidade para todos ou nossos componentes" é teste de unidade , não TDD. Uso rotineiramente o TDD em equipes individuais com grande sucesso; o pagamento é extraordinário.
fonte
Existe um ótimo livro sobre TDD, A arte do teste de unidade ( site oficial ), com exemplos em .net com uma versão java em andamento. A parte boa é que há capítulos inteiros considerando questões como "Integrando o teste de unidade à organização" - Capítulo 8 e "Trabalhando com código legado" - Capítulo 9. Embora eu ainda não seja um especialista neste campo (ainda :-)) , com base na minha experiência, acredito que este seja um bom ponto de partida.
fonte
Você precisa de algumas perguntas para obter as respostas:
Quanto tempo você gasta após o lançamento da correção de bug no código? Se você puder quantificar isso, poderá achar que é igual ou mesmo excede o tempo "extra" que levaria para você escrever o teste que ajudaria a impedir que esses erros acontecessem.
Com que frequência uma edição aparentemente simples para refatorar o código ou adicionar um novo recurso interrompe algo aparentemente não relacionado? Novamente, com boa cobertura de teste, eles podem ser reduzidos.
Mesmo que você não consiga colocar números exatos, você deve demonstrar que está gastando esse tempo de qualquer maneira, para que possa gastá-lo "na frente" e (espero) acabar com um produto muito mais estável.
fonte
Quando as pessoas me falam sobre começar a adotar testes em sua equipe, eu sempre verifico como os testes serão executados. Muitas vezes, as equipes não têm uma construção contínua em vigor. Se você tiver recursos limitados, sugiro que a configuração de um servidor de IC seja um pré-requisito para iniciar qualquer incursão séria nos testes.
Depois de obter essa configuração, comece a praticar TDD. Lembre-se de que, se o sistema não tiver sido desenvolvido com o teste em mente, você poderá ter dificuldades para tornar o código existente testável e será caro reestruturá-lo.
Comece procurando lugares fáceis para começar com o TDD - novas classes ou módulos, com poucas dependências. Classes de utilidade e estruturas de dados geralmente são boas coisas para começar.
Experimente como ele muda a maneira como você pensa sobre o seu código, observe quanto melhor o código que você produz é e quanto mais confiante você está sobre esse código.
Sei que realmente não respondi à pergunta, mas acho que meu argumento é que você deve ser capaz de fazer tudo isso sem um custo adicional enorme. Ao trabalhar com seus primeiros exemplos, você entenderá melhor as vantagens do seu projeto.
Conclusão - desenvolvimento mais lento, mas poucos defeitos, muito menos tempo corrigindo bugs.
fonte
Aqui é onde eu acho que o Desenvolvimento Orientado a Comportamento mostra ganhos imediatos, mas não tenho certeza de que o desenvolvimento orientado a teste o faça.
No desenvolvimento orientado por comportamento, você aborda seus tickets de uma maneira diferente: senta-se com a pessoa de negócios e trabalha com ela para definir os comportamentos que esse pedaço de funcionalidade deve ter. Eu descrevo isso em uma entrada no meu blog (o título do post: Comportamentos de escrita ).
Sentar-se com a pessoa de negócios ou com quem ajudará você e eles a entender melhor o que o sistema precisa fazer para que todos fiquem felizes com essa parte da funcionalidade. O que é preciso fazer para poder ser aceito pelo processo de controle de qualidade que você possui.
Definir critérios de teste e, em seguida, gravá-los em seu conjunto de testes automatizado, deve reduzir a quantidade de vaivém que você recebe: alguém alegando que a funcionalidade está quebrada, porque você perdeu alguma coisa (porque você perdeu alguma coisa legitimamente ou porque nunca disse a ela você sobre isso).
Isso também pode ajudar a percepção dos outros sobre sua equipe: se você se sentar e definir o que precisa ser feito no sistema, poderá passar de "idiotas que superengenham tudo e gastam tempo com coisas que não pedimos", para, "pessoas inteligentes que estão apresentando recursos úteis".
TL; DR: o desenvolvimento orientado a comportamento pode mostrar melhorias rapidamente porque é focado no "cliente". O Desenvolvimento Orientado a Testes, para mim, parece ser sobre o teste interno da base de código com a qual "ninguém" se importa e oferece benefícios comerciais menos óbvios. (O Behavior Driven Development tem uma mudança imediata: na sua frente, os engenheiros estão repentinamente passando muito mais tempo com o "cliente" ou o analista de negócios para tentar acertar isso - o que deve ser visto como uma coisa boa. " , eles estão tendo uma reunião sobre o recurso X, o que significa que há progresso nessa frente! ")
fonte