venho acompanhando à algum tempo a idéia do TDD e todos os seus conceitos.
Acho interessante como o desenvolvimento guiado por testes se comporta e faz
com que o programador/desenvolvedor mude seu pensamento no momento de
construir software. Com certeza é uma mudança de paradigma em relação ao modelo
tradicional de se testar software. Até aí tudo OK.
Certa vez, comentando com colegas, um deles disse que a idéia do TDD era basicamente
a programação por tentativa e erro… Até aquele momento eu não havia pensado nesta questão.
Outras questões como estas eu já havia visto, mas essa de tentativa e erro ainda não…
A partir desse comentário comecei a “mastigar” isso e não consegui vislumbrar uma resposta
para dizer que o TDD não é “tentativa e erro”.
Gostaria que colocassem suas opiniões sobre esta questão…
Tentativa e erro? Isso não faz sentido. O TDD só quer garantir que o resultado do que você fez vai ser realmente o esperado.
Se o que você diz ser “tentativa e erro” é você corrigir o seu código até ele funcionar direito, isso acontece com qualquer metodologia, nem que a correção seja feita depois de 2 meses do seu código em produção… e é justamente isso que o TDD tenta evitar…
A analogia é bem furada, creio. Quando você faz TDD você não está tentando, você está especificando o que o software deve fazer pela ótica de quem usa sua class/objeto/etc.
Pois é Philip, vejo que a “tentativa e erro” em TDD não tem sentido quando fala-se em, por exemplo,
codificar um método, realizar um teste, corrigir tal método, aplicar os testes novamente e repetindo
esta sequencia até ter a funcionalidade desejada e também uma boa cobertura dos testes.
Acho que a “tentativa e erro” tem mais haver com programadores ou com pessoas que estão começando
a programar do que com TDD. Um exemplo disso é quando, codificando o corpo de uma função/método,
o programador tende a criar código aparentemente satisfatório. Após esta codificação ele testa o
método/função e percebe que existem erros. Porém, nesta situação, ele ainda não sabe que tipo de erro
ele tem e vai tentar arrumar seu método em diversas tentativas e erros… Mas isso torna-se diferente em TDD,
pois estamos “amparados” pelos testes previamente criados que nos dão ou nos indicam onde está o erro
do método/função/classe, etc.
Creio que seja mais ou menos essa a diferença… O que vocês pensam?
Tentativa e erro não tem nada a ver com TDD. Na verdade eu diria que, especificamente no meu caso, eu uso tentativa e erro para efetuar “programação exploratória”, ou seja, quando não sei exatamente nem o que deve ser feito, nem quais são exatamente os requisitos - o que é radicalmente diferente do TDD (que se caracteriza por ser usada em casos em que os requisitos e os resultados são bem-definidos - mesmo que sejam bem-definidos na mente do usuário somente).