Test Driven Development (TDD)

No primeiro momento, parece que criamos testes para sistemas com código de produção já implementado e executando e que precisam ter sua qualidade verificada. Porém, uma desvantagem dessa abordagem é que isso faz com que percamos o "feedback de design" que nossos testes podem nos dar. Por feedback de design, queremos dizer as impressões de que nosso projeto está correto (modelagem de classes e comunicação entre elas).

O Test-Driven Development (TDD) propõe o contrário: escrever os testes antes do código de produção.

Além disso, o TDD prega que nenhum código funcional deve ser escrito se não for ajudar a fazer passar um teste que está falhando. Dessa maneira, nos guiamos apenas para implementar o que é necessário, sem adicionar complexidade e reduzindo o escopo das possíveis falhas que o software venha a ter.

Basicamente o TDD se baseia em pequenos ciclos de repetições

  • Ciclo/Fase Vermelha

  • Ciclo/Fase Verde

  • Ciclo/Fase Refatoração

Ciclo de repetições do TDD

Ciclo/Fase vermelha

Nessa fase, você vai escrever código para testar funcionalidades como se elas já estivessem implementadas (mesmo não estando). Você NÃO deve pensar em como fará a implementação. Ao invés disso, o foco deve ser o que o código vai realizar, se focando apenas no que está escrito no requisito.

Neste momento, você está projetando o seu código. Perguntas frequentes dessa fase são:

  • "Eu preciso deste método?"

  • "Ao invés de retornar um objeto do tipo X, que tal um do tipo Y?"

Não crie testes para funções que você talvez necessite. Concentre-se em cumprir o que a funcionalidade pede, assim o risco de inserir bugs é menor

Ciclo/Fase Verde

Nesta fase, você irá escrever o código de produção, que irá fazer com que o teste seja bem sucedido, lembrando de escrever apenas o código que faça o teste passar! Não escrevemos todo o código da implementação porque uma simples tarefa é menos propensa a erros.

Uma vez que estamos nessa fase e os testes passam, nós temos:

  • Código de teste para um cenário dessa funcionalidade

  • Código que executa essa funcionalidade

O teste vai nos dar a garantia de que qualquer alteração que gere um bug no código executável vai ser apontado pelo teste que escrevemos. Sendo assim, podemos passar para a última fase

Ciclo/Fase Refatoração

Nesta fase, você irá refatorar o código, o que significa: remover duplicações (a parte mais importante), melhorar o código em termos de desempenho, melhorar o código em termos de legibilidade e outras atividades relacionadas a melhoria do seu código.

Importante reforçar que, agora que já passamos das fases vermelha e verde, essa fase não pode fazer os testes falharem novamente. Na prática, todo código que já passou pelas fases vermelha e verde, está na fase de refatoração, fazendo com que sempre tenhamos segurança em mudar um código sem a preocupação de gerar bugs, pois estes serão identificados prontamente pelos testes já escritos.

Realizar a fase vermelha e verde segue a idéia de programar para interfaces e não para implementações

Pense no teste mais simples possível para começar e vá incrementando e desenvolvendo novos testes a medida que as fases vão avançando ou que você se sente mais a vontade com o requisito que está implementando e testando.

Last updated

Was this helpful?