O documento descreve a técnica de desenvolvimento guiado por testes (TDD), onde os testes são escritos antes do código de produção. A prática de TDD promove um design incremental e fornece feedback rápido, melhorando a qualidade do código e do design das classes. As vantagens incluem foco na funcionalidade, aumento da cobertura de testes e código mais robusto após a refatoração.
2. O que é TDD?
Uma prática onde os testes são escritos antes do código
de produção
Escreva primeiro o teste, faça o teste falhar, escreva o
código para o teste passar…
… e escreva mais um teste, veja ele falhar, faça-o
passar… e assim por diante.
3. Design incremental
Novas funcionalidades são introduzidas em pequenos
passos
Além dos testes automatizados, o TDD oferece um
feedback rápido sobre as mudanças no código
E também dá dicas sobre pontos de melhoria no design das
classes
Por isso, TDD é mais sobre design de software do que
sobre testes
4. Quais as vantagens?
Foco na
funcionalidade
Aumento da
cobertura de
testes
Testes
Automatizados
Código de maior
qualidade
(refatoração)
Melhora o
design de
classes
7. Porque refatorar?
Depois que o teste falha, o objetivo é escrever o código
mais simples possível para o teste passar.
Uma vez que o teste passou, é necessário refatorar o
código, buscando aprimorá-lo e evitando repetição de
código.
Depois de refatorar, rode o teste novamente
8. Como escrever um teste?
1. Escreva um caso de teste para determinada
funcionalidade da classe
2. O teste não vai compilar, pois sua classe sequer existe!
3. Implemente o suficiente para o teste compilar
4. Rode o teste e veja-o falhar
5. Implemente o código mais simples póssível para o teste
passar
6. Rode o teste e veja-o passar
7. Refatore o código em busca de melhorias
8. Rode o teste e o veja-o passar novamente
9. Repita todos os passos
9. Exemplo - Calculadora
1. Escrever o teste que ainda não compila
2. Criar a classe para o teste compilar
11. Exemplo - Calculadora
4. Escreva o mínimo para o teste passar
4. Rode o teste e veja-o passar
5. Refatore (se necessário) e depois escreve mais casos
de testes
12. Devo sempre utilizar TDD?
Depende. Utilize quando...
A classe lida com funcionalidades complexas
A solução do problema não está tão clara para o
desenvolvedor
Dessa forma, o desenvolvedor fica mais focado no
problema que sua classe deve resolver e não se
perde com caminhos desnecessários
Talvez não seja muito vantajoso se...
A solução para o problema é bastante simples
13. Devo sempre utilizar TDD?
TDD é uma prática que ao mesmo tempo auxilia nos
testes de unidade de classe
E conduz o desenvolvedor a pensar na melhor solução
para o seu problema
Resumindo:
É importante conhecer TDD e suas vantagens. A
experiência deve dizer quando será melhor utilizá-lo
ou não
14. Exemplo - CalculadoraDeSalario
Regras de negócio
Desenvolvedores:
20% de desconto caso o salário seja maior que R$ 3000
10% de descontro caso o salário seja menor que R$ 3000
DBAs e Testadores
25% de desconto caso o salário seja maior que R$ 2500
15% de desconto caso o salário seja menor que R$ 2500
19. Conclusão
TDD não diz respeito somente a testes
O desenvolvedor que observa o feedback da prática,
pode aprimorar o design das suas classes seguindo os
princípios de Orientação a Objetos.
O conhecimento e experiência do desenvolvedor
são essenciais para isso
Para uma melhor leitura dos feedbacks que TDD nos diz
e realizar as as mudanças, o desenvolvedor deve
conhecer bem sobre design de projetos OO