segunda-feira, 30 de setembro de 2013

Desenvolvimento dirigido por testes

Desenvolvimento dirigido por testes

O Desenvolvimento dirigido por testes ou Test driven development (TDD) é uma técnica de desenvolvimento de software criada
por Kent Beck que e baseia em um ciclo curto de repetições.

O TDD tem uma idéia bem simples e um roteiro bem definido:

- Escreve um teste
- Roda o teste e ve ele falhar
- Escreve o código que deve passar no teste
- Roda o teste novamente esperando que ele passe (Se falhar, significa que há um problema com o código funcional)
- Refatora o código
- Roda o teste eo teste passa
- Começa com um teste diferente


Exemplo: Calculadora

- Criar classe TesteCalculadora e cria o método TestaAdicao

public class TesteCalculadora {
    public void TestaAdicao(){
        assertEquals("Resultado da soma de 3 e 4 é 7",7,Calculadora.soma(3,4));
    }
}
 

- Executar o teste e ter certeza de que ele irá falhar, afinal nem existe a classe Calculadora ou o método soma() ainda!

- Criar a classe Calculadora e o método soma

 public int soma (int a, int b){
  return a+b;
 }

- Executar o teste novamente e ver que ele nao irá falhar dessa vez.

- Analisar o código escrito por completo e verificar se há necessecidade de refatoração

- Executar todo o código para fins de teste novamente para nao ter dúvidas de não haver falhas

- Repitir o processo com um teste diferente!


Desenvolvimento dirigido por testes tem uma grande utilidade ajudando
a manter baixa a contagem de defeitos e mantendo a simplicidade do código.
Outra vantagem é que o TDD quando usado apropriadamente, garante que todo o código desenvolvido seja inteiramente testado. Isto fornece
a equipe de desenvolvimento, e ao usuários um grande nível de confiança ao código.


No TDD, os testes são de extrema importância e por isso devem ser bem escritos.


Um exemplo de um código ruim de teste, utilizando o exemplo anterior da calculadora:


 public void TestaAdicao(){
  assertEquals(3+4,Calculadora.soma(3,4));
 }
 

Se estamos testando o resultado do metodo soma, então precisamos saber o retorno. Nesse caso, melhor
escrever o código da seguinte forma:


 public void TestaAdicao(){
  assertEquals(7,Calculadora.soma(3,4));
 }
 

alguns pontos que devemos lembrar:

- Conseguir executar cada teste isoladamente
- Eliminar qualquer duplicação lógica dos testes
- Cada teste deve testar apenas um negócio
- Testar todas as pré-condições, pós-condições e exceções
- É também importante sempre escolher bons nomes para os métodos de teste,mesmo que fiquem longos

Não há nenhuma comprovação científica de que TDD melhore a qualidade do código ou a produtividade dos desenvolvedores mas existem
algumas evidências, eos relatos de inúmeras pessoas não nos deixam pensar de outra forma!


Referências:
Refatorações para Padrões do Joshua Kerievsky
Wikipedia Test Driven Developmen : http://pt.wikipedia.org/wiki/Test_Driven_Development

Nenhum comentário:

Postar um comentário