ConstructiCat Logo
CodeBust.
Browse section ▾

Test-Driven Development.

Also known as — TDD, Red-Green-Refactor

Uma disciplina de desenvolvimento na qual você escreve um teste que falha antes do código que o faz passar e depois refatora — deixando os testes guiarem o design em ciclos curtos e enxutos.

##Intent

Conduza o design e verifique a corretude do código escrevendo um teste que falha para cada pequeno trecho de comportamento antes de escrever o código que o satisfaz, melhorando então o design enquanto os testes mantêm você seguro.

##Problem

Código escrito sem testes é arriscado de mudar: não há uma forma rápida de saber se uma edição quebrou algo. Testes escritos depois tendem a ser superficiais, moldados para se encaixar em um código que já pode ser difícil de testar, e raramente influenciam o design.

Sem uma função forçante, os designs também tendem a ficar emaranhados e difíceis de exercitar isoladamente.

##Solution

Trabalhe em um ciclo curto de Red-Green-Refactor (Vermelho-Verde-Refatorar):

  1. Vermelho — escreva um pequeno teste para o próximo trecho de comportamento e observe-o falhar.
  2. Verde — escreva o código mais simples que faz o teste passar, mesmo que seja feio.
  3. Refatorar — limpe o código (e os testes) agora que estão verdes, com a suíte protegendo contra regressões.

Repita em ciclos de poucos minutos. Como os testes vêm primeiro, o código é testável por construção e a suíte documenta o comportamento pretendido.

##Structure

  • O ciclo — Vermelho → Verde → Refatorar, repetido continuamente.
  • Lista de testes — a lista corrente de comportamentos ainda a cobrir.
  • Arrange–Act–Assert — o formato de um teste de unidade focado.
  • Unidade sob teste — a pequena fatia de comportamento que cada teste fixa.

##Applicability

  • Use para código com lógica e ramificações reais, e para código de vida longa que mudará com frequência.
  • Especialmente valioso onde um ciclo de feedback rápido e a segurança contra regressões importam.
  • Menos adequado para spikes descartáveis ou trabalho exploratório de UI em que o design ainda está em definição.

##How to Implement

  1. Escolha o próximo pequeno comportamento da sua lista de testes.
  2. Escreva um teste que o verifique e execute a suíte para vê-lo falhar (vermelho).
  3. Escreva o código mínimo necessário para passar; execute a suíte (verde).
  4. Refatore o código de produção e de teste mantendo a suíte verde.
  5. Repita, acrescentando comportamentos à lista à medida que os descobre.

##Pros & Cons

Pros
  • Alta cobertura de testes como subproduto, não como algo deixado para depois.
  • O feedback rápido detecta regressões em segundos.
  • Incentiva designs desacoplados e testáveis.
  • A suíte atua como documentação viva e executável.
Cons
  • Ritmo inicial mais lento e uma curva de aprendizado real.
  • Pode enfatizar demais unidades isoladas e deixar passar lacunas de integração.
  • Testes também são código — precisam ser mantidos e refatorados.
  • Não substitui testes exploratórios, de integração ou de ponta a ponta.