É realmente bem estranho testar algo sem que ele exista. Mas é exatamente isso que esta metodologia ágil descreve. A filosofia do método é:
- Escreva um pequeno teste (em alguns casos ele não vai compliar).
- Rode este teste e veja quais foram os erros encontrados.
- Faça uma pequena alteração para que o teste passe com sucesso
- Efetue todos os testes e veja se o teste foi bem sucedido
- Refatore e remova as duplicatas que foram feitas para que o teste passe
Além de escrever o teste antes da criação do código, o design incremental do seu código é outro item fundamental no TDD.Mas qual é o ganho em utilizar esta metodologia?
Código limpo, aumento da qualidade e da produtividade são os objetos da aplicação do TDD.
Nesta pequena introdução de desenvolvimento orientado a testes, pretendo descrever passo a passo como desenvolver uma aplicação para o calculo de IMC (Índice de Massa Corporal) que é feito da seguinte forma:
IMC = PESO / (ALTURA²)
Antes de começar verifique os pré-requisitos descritos abaixo:
- Uma IDE com suporte a refatoração (Vou utilizar o Eclipse)
- JUnit (preferência a versão 4.0 com suporte a annotations)
Vamos ao primeiro teste:
import org.junit.Test;
public class testIMC {
@Test
public void testCalculoIMC(){
IMC imc = new IMC (74.0f,1.80f);
assertEquals(22,8f,imc.getImcResult());
}
}
Estamos com alguns problemas aqui. O teste não compila porque a classe IMC não existe, muito menos o seu construtor e o atributo imcResult. Além disso estamos acessando o atributo de classe diretamente, o que não é conveniente.
Vamos então aos baby steps, corrigindo os erros com pequenas alterações até que o código do teste seja compilado e executado. Lembre-se de utilizar a IDE para facilitar a sua vida na geração das classes, métodos etc.
O primeiro passo é criar a classe IMC:
public class IMC{
}
Acrescente o construtor:
public class IMC{
public IMC(float peso, float altura){
}
}
Finalmente acrescente o atributo imcResult
public class IMC{
private float imcResult;
public IMC(float peso, float altura){
}
}
Neste momento o teste é compilado e roda com erros. O próximo passo é fazer com que a barra vermelha fique verde. Acrescente um método que retorne um valor que resulte o sucesso do teste e encapsule o atributo imcResult.
public IMC(float peso, float altura){
public float getImcResult(){
return 22,8f;
}
}
Neste momento o teste passa para verde, mas precisamos melhorar o nosso código refatorando e removendo a duplicação.Veja o código completo:
public class IMC {
private float imcResult;
public IMC(float peso, float altura) {
imcResult = peso / (altura * altura);
}
public float getImcResult() {
return imcResult;
}
}
Este post foi uma pequena introdução do que é o TDD e para que serve. Os “devotos” do desenvolvimento de software baseado em XP já estão bem acostumados com o TDD. Para um maior aprofundamento desta técnica acesse os sites:
http://dojofloripa.wordpress.com/category/tdd/
http://www.improveit.com.br/xp/praticas/tdd
Comentários sobre o post serão muito bem vindos!