Conceito: Design Teste-primeiro
Este conceito descreve uma técnica para manter o design de teste cronologicamente alinhado com o design de software.
Relacionamentos
Descrição Principal

O design teste-primeiro é uma prática de criação concorrente de testes de desenvolvedor e de código de implementação, com alto nível de detalhamento.

No design teste-primeiro, o desenvolvedor escreve primeiro uma pequena parte de um teste de desenvolvedor e, em seguida, escreve código suficiente apenas para fazer esse teste de desenvolvedor compilar e executar. Então ele escrever um pouco mais do teste e acrescenta código suficiente para fazer com que esse novo teste compile e execute com sucesso. Este ciclo pode durar de 30 segundos a cinco minutos. Raramente alcança dez minutos. Em cada ciclo, os testes vêm em primeiro lugar. Uma vez que um teste de unidade seja feito, o desenvolvedor vai para o próximo teste até que não haja mais testes a serem escritos para a implementação do item de trabalho que está atualmente em desenvolvimento.

A prática do design teste-primeiro altera a forma como o desenvolvedor pensa. Os testes não são escritos como uma conseqüência. Ao invés, os testes de desenvolvedor são escritos como parte da forma de construção de software diária e instantânea.

Quais são as vantagens do design teste-primeiro?

  1. Os pressupostos no design são analisados antes da implementação de código. Para escrever os testes de desenvolvedor, um exame deve ser feito no comportamento de cada pedaço de código a ser escrito, comportamentos corretos e incorretos devem ser definidos. De certa forma, escrever os testes antes do código pode ser considerado como uma versão de design detalhado.
  2. As unidades de código concebidas para serem testadas no início são mais limpas e menos acopladas.
  3. Os erros são encontrados cedo. Os erros ou brechas nos requisitos e no design são identificados antes da codificação começar quando poderia ser mais tentador avançar baseado em suposições.
  4. Uma clara estratégia de colaboração entre o desenvolvedor e as pessoas responsáveis pelos requisitos, pela arquitetura e pelo design é posta em prática. Durante a criação dos testes, deverá haver uma reunião a respeito do que foi especificado. Depois disso, a implementação pode continuar com a confiança de que existe uma visão compartilhada do que o código deve fazer.
  5. Existem critérios inequívocos para a conclusão do código. Quando os testes executam com sucesso, o código está funcionando, conforme especificado. As dimensões de qualidade não-funcionais podem ser tratadas separadamente, mas existe um momento bem definido em que o código se comporta corretamente.
  6. A técnica direciona o desenvolvedor para trabalhar em pequenos incrementos com retorno rápido e de qualidade. A qualquer momento, o desenvolvedor estará apenas a um teste de ter o código livre de erro.
  7. Existe uma separação das preocupações e esforços entre obter código funcional e melhorar a qualidade do código que já está funcionando corretamente. A separação destas duas áreas de preocupação fornece foco e suporte de gestão de tempo para um desenvolvedor que em um passo faça a implementação passar no teste o mais simples possível e, em um passo posterior, busque por áreas para melhoria.