Executando verificação de segurança...
4
flyrio
2 min de leitura ·

Qual a opinião de vocês sobre TDD?

A dúvida

Desde quando comecei a estudar ouvia as pessoas falando sobre testes e principalmente sobre o Test-Driven Development (Desenvolvimento Orientado por Testes).
Agora que comecei a estudar e escrever meus primeiros testes, fiquei me perguntando o quão eficiente é isso e qual a experiência de vocês com essa abordagem de desenvolvimento.

O que é TDD

Também vou fazer uma breve explicação para quem ainda não sabe o que é TDD e caiu de paraquedas nesse tópico.

Como essa abordagem funciona

O TDD é dividido em três etapas, são elas:
Red -> Green -> Refactor

Red

Você escreve um teste feito para falhar, ele vai definir o comportamento desejado do código que vai ser desenvolvido.

Green

Nessa etapa é onde você vai escrever o código MÍNIMO para o teste passar, não precisa ser um código "perfeito", apenas o necessário.

Refactor

Aqui você melhora o código existente, tornando-o mais legível, eficiente e sustentável. Você pode adicionar funcionalidades adicionais ou otimizar o código existente, desde que mantenha os testes passando.

Qual o benefício disso? feat. ChatGPT

O TDD ajuda os desenvolvedores a escreverem um código mais confiável, reduzindo a probabilidade de erros e facilitando a manutenção do software. Além disso, ele fornece uma documentação viva do comportamento esperado do código, pois os testes descrevem as funcionalidades desejadas.

Conclusão

Espero que eu tenha deixado minha dívida clara e também facilitado o entendimento para àqueles que não sabiam o que é TDD.

Carregando publicação patrocinada...
4

Já leu isto? https://dhh.dk/2014/tdd-is-dead-long-live-testing.html.

Não é qualquer um falando. É um dos que mais defenderam o uso. E ele admite que foi como religião. Como acontece com muita coisa em toda a sociedade hoje em dia. E tem muito em tecnologia. A pessoa adota porque as outras estão falando que é bom, e aí qualquer um que falar contra é um herege. Isso não é saudável, para qualquer coisa. Algumas pessoas que são consideradas muito boas na nossa área tentaram e não viram vantagem. Complemento de leitura.

Muitas pessoas adotam TDD sem saber bem se ele é tudo o que falam. Isso é normal, é o jeito de saber mais sobre ele. O problema é que se não for tão bom, mas der algum resultado, mesmo que traga junto alguns malefícios, a pessoa se dá por satisfeita e não consegue se livrar se for o mais adequado.

Obviamente muita gente usa e deve achar que tem benefícios. Muita gente não usa porque não consegue ver os tais benefícios. Talvez seja porque eles não existem. Pelo menos em certos cenários. Ou tem a pessoa também viu malefícios, que mesmo tendo benefícios tem efeitos colaterais, que para alguns pode ser ruim. Para outros pode ser aceitável.

Eu sou dos que nunca vi tanto benefício e vi malefício. Fazer teste é bom, fazer TDD não é. Até porque TDD nem é sobre testes, de verdade, e muita gente já usa errado por isso. O teste é usado como ferramenta e não o fim. A função do TDD não é testar software, é documentar o'que deve ser feito.

Pra mim é feito de tal forma que, ou dá muito trabalho ou engessa o desenvolvimento e inibe a criatividade. Frequentemente vejo projetos que usam TDD muito inferiores ao que poderiam ser. E muitas vezes anda mais lento do que deveria. Algumas pessoas até mais especializadas nisso do que eu, e defensores do TDD, não recomendam em lugares que exigem inovação, e que é preferível em locais mais burocráticos. Nem todo mundo concorda com isso. E onde tem muita discordância algo tem de errado.

TDD pode e tenho visto acontecer de criar danos para o projeto, que é o que importa.

Inclusive é complicado porque ele é meio que tudo ou nada. Não adianta selecionar o que fará TDD e o que não fará, porque isso diminui muito o valor. Testes sem metodologia tão restritiva podem ser usados conforme a necessidade e benefícios que cada parte pode ter.

E nem vou levantar a bandeira de quem muita gente já não faz testes bem, imagina testar o que nem está feito ainda. Eu admito que um dos motivos que eu não faço é ter dificuldade em testar bem. Claro que sei escrever testes, mas testar errado é mais fácil do que muita gente vê. E os testes acabam sendo feitos burocraticamente, não para aumentar o valor do projeto. É fácil achar que está testando bem, mas eu vejo muitos testes ruins em códigos mais low profile que vejo por aí. Não são péssimos, mas testes o'que não precisa, deixam de testar muita coisa que é necessária. Em TDD essas falhas importam mais.

E muitas vezes há até corrupção, porque para conseguir atender os objetivos a pessoa pode desvirtuar o teste ou até o código principal, que sempre deve ser o mais importante.

O teste ajuda a ter mais confiança no código, o TDD não diretamente. Claro que ele pode fazer isso, mas não é o objetivo principal, e mesmo pegando essa melhoria que acontece, é por causa do teste e não porque fez TDD.

Eu falei mais em https://pt.stackoverflow.com/q/199885/101.

Faz sentido para você?

Espero ter ajudado.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

2

Eu nunca vi vantagem nisso mesmo antes de entender o que era exatamente. Via as pessoas falando sobre escreverem o teste antes da funcionalidade, mas nunca explicavam o motivo disso. Sempre citam as vantagens, mas nunca falam das desvantagens.

Sua resposta me ajudou bastante a entender mais sobre o assunto e mesmo não sendo mais algo tão popular é bom saber qual era o proposito e o porquê das pessoas terem usado.

Obrigado!

2
1

Em todas as equipes em que trabalhei, em todas empresas pelas quais passei, TDD sempre foi um assunto presente, mas ninguém aplicava. Todo mundo gosta quando é explicado, quando veem algum tutorial, acham genial. Mas na prática, ninguém aplica.
O que entendo é que todo mundo está acostumado a trabalhar de uma forma e não querem se dar ao trabalho de mudar.

1

TDD pra mim é como se fosse uma ferramenta a ser utilizada no meu arsenal. A principal questão é: quando?

Pra mim o maior benefício ao utilizar o TDD (em determinados momentos) é quando uma tarefa é um tanto quanto complicada e complexa. Nesses casos, é interessante desenvolver orientado a testes por que geralmente você vai ter mais controle sobre aquilo que você está fazendo, e serve também como documentação para você ou outras pessoas verem o rumo que está sendo tomado.

1

TDD é uma ferramenta muito linda de se ver quando alguém explica ou demonstra como é feito. Porém, é muito complexo adequá-la ao contexto de maior parte das situações das empresas.

A função do TDD está mais para uma metodologia de documentação do que inteiramente de teste. Como já disseram nesta thread, é superestimado.

O importante no fim é existirem testes consistentes e que garantem confiança e segurança. Em conjunto a isso, é ter um código bem feito de forma a ser autoexplicativo, escalável e sustentável.

1

Depende como é implementado, vejo o TDD diminuindo a critiavidade na hora das soluções, primeiro, faça um teste e depois codifique o que precisa eu acho esse fluxo danoso. Eu acho que a premissa de tentar aumentar sempre o test coverge ruim também, visto que na engenharia de software é necessário achar balanço entre custo, tempo e qualidade, tdd é código ou seja, consome tempo.
Acho que o BDD é melhor do que o TDD em alguns aspectos, já que tu não precisa escrever um teste pra todo pedaço de função e sim um teste pensando no comportamento da aplicação.

1

ja usei desde quando era hype. nao gostei, engessa, atrasa o andamento. o que importa é entenderea ideia e aplicar o que faz sentido no momento certo

1

Na minha opinião, TDD é muito superestimado. Tem seus benefícios? Claro que sim, mas no mundo real precisa ter equilíbrio. O que a maioria prega sobre o TDD, na prática, sacrifica muito tempo de desenvolvimento em prol dos testes, acaba ficando uma situação utópica de 100% de cobertura de tudo e demora muito para agregar valor ao negócio.

Particularmente vejo que testar o essencial (core business) é mais importante do que ter tudo testado seguindo TDD a risca.