O advento do TDD: Um guia para iniciantes

Começando com Test-Driven Development

“Como posso começar a aplicar Test-Driven Development?” Essa pergunta ecoa nas minhas sessões de treinamento como uma chamada de função recursiva. Embora minha resposta padrão sempre tenha sido “Comece corrigindo bugs,” descobri uma abordagem ainda mais envolvente: Advent of Code.

Minha abordagem padrão: corrigindo um bug existente

Vamos examinar um exemplo simples. Imagine que você tem uma função de calculadora:

Quando alguém tenta dividir por zero, nossa aplicação quebra sem cerimônia. Isso apresenta uma oportunidade perfeita para TDD – podemos escrever um teste expressando nosso comportamento desejado:

Código de teste para cenário de divisão por zero

Meu teste vai falhar, é claro, porque meu código falha. Agora posso corrigir meu código e fazer meu teste passar.

A Abordagem Gamificada: Advent of Code

Como um autoproclamado geek com afinidade por puzzles, descobri que o Advent of Code é o terreno de treinamento perfeito para TDD. Cada puzzle fornece:

  • Uma amostra de entrada

  • Uma saída esperada

Essa estrutura naturalmente te guia para a mentalidade de TDD – você escreve seu teste baseado no exemplo antes de implementar sua solução. É como ter uma especificação embutida!

Exemplo do Advent of Code mostrando entrada e saída esperada

Quer dizer, não só é uma boa forma de aprender TDD, mas também é divertido. Você está aprimorando suas habilidades de desenvolvimento, resolvendo um puzzle e praticando uma técnica muito valiosa.

Conforme você avança pelos desafios, pode começar a experimentar mais com TDD e talvez reduzir a granularidade de alguns dos seus testes. Por exemplo, você pode precisar fazer o parse de uma entrada de texto complexa em um Map para resolver o problema, e então isso poderia ser um teste por si só.

Ferramentas Que Melhoram a Experiência

Em Elixir (minha linguagem preferida), o operador pipe (|>) é particularmente poderoso para TDD:

Exemplo de código com operador pipe em Elixir

Aquele pequeno triângulo basicamente diz: pegue a saída da função acima e passe para a função seguinte. Essa sintaxe elegante permite que você esboce o fluxo de alto nível da sua solução antes de mergulhar nos detalhes de implementação.

Combine isso com ferramentas como mix test.watch, que automaticamente executa os testes quando arquivos mudam, e você tem um ciclo de feedback rápido que faz o TDD parecer natural e intuitivo.

Pronto para Começar?

Escolha sua linguagem de programação preferida e mergulhe! Você pode explorar meu repositório do Advent of Code 2024 para inspiração:

https://github.com/mariomelo/advent_of_code24

Lembre-se: O objetivo não é perfeição, mas prática. Cada puzzle é uma oportunidade de fortalecer seus músculos de TDD enquanto se diverte!

Para insights mais profundos sobre TDD, confira o excelente artigo sobre Software Design: Tidy First?

Software Design: Tidy First? - Canon TDD

Bom código!

Os 3 vieses do desenvolvimento de software, parte 3: Modularidade
Empirismo e racionalismo no desenvolvimento de software