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?
-
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.
-
As unidades de código concebidas para serem testadas no início são mais limpas e menos acopladas.
-
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.
-
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.
-
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.
-
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.
-
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.
|