Pensando TDD
08/10/2014
Direitos Autorais
Você está autorizado e incentivado a distribuir este material.
Copie, compartilhe e modifique, apenas cite a fonte.
Autoria
Luiz Ricardo
luizricardo.orgfacebook.com/StateOfTheArtBlog
Código-fonte
O código dos exemplos práticos pode ser obtido no link:
https://github.com/utluiz/tdd-example
Porque software?
$$$???
Software de Qualidade
Faz o que deveria fazer
SEM ERROS
Software de Qualidade
Funciona
Dificuldades do Software
Sem representação visível
Dificuldade em identificar requisitos
Abstrato
Dificuldades do Software
Singular
Cada um é diferente
Dificuldades do Software
Mutável
1 bit muda tudo
Dificuldades do Software
Complexo
Simplificação
Perda de informação
Expectativa Realidade
Como fazer software de qualidade?
Teste Teste
Teste
Teste
Teste
TDD
Metodologia ágil de desenvolvimento de software
cujo objetivo é gerarcódigo limpo que funciona
Test-Driven Development
Fases do Desenvolvimento
Tradicional
Projeto
Implementação
Teste
Mudanças acontecem...
Abrace-as!
Correção de Bugs
Design Implementação Teste Manutenção
Custo por fase
Fases do Desenvolvimento
TDD
Projeto/Teste
Implementação
Definição de “Pronto”
Quando terminamos uma nova funcionalidade?
Definição de “Pronto”
Código
Definição de “Pronto”
Código limpo
Definição de “Pronto”
Código limpo
Testado
Definição de “Pronto”
Código limpo
Teste automatizado
Definição de “Pronto”
Código limpo
Teste automatizado
Deploy automatizado
Definição de “Pronto”
Código limpo
Teste automatizado
Deploy automatizado
Documentado
Ciclo de Vida do TDD
Vermelho
VerdeRefatore
Ciclo de Vida do TDD
Vermelho, verde, refatore
Vermelho, verde, refatore
Vermelho, verde, refatore
Vermelho, verde, refatore
...
O “Mantra”
Ciclo de Vida do TDD
Vermelho
VerdeRefatore
1. Escreva um teste que falhe
Ciclo de Vida do TDD
Vermelho
VerdeRefatore
1. Escreva um teste que falhe
2. Façafuncionar
Ciclo de Vida do TDD
Vermelho
VerdeRefatore
1. Escreva um teste que falhe
2. Façafuncionar
3. Faça direito
Ciclo de Vida do TDD
VerdeRefatore
Por que separar?
Faça funcionarFaça direito
Ciclo de Vida do TDD
Valores do TDD
• Foco na qualidade
• Código “documentado”
• Sem medo de mudanças
Só mais uma coisa...
Dificuldades do TDD
• Qualidade tem custo
• Indefinição
• Design ruim
Desenvolvimento de Software
Metáforas
Desenvolvimento de Software
Amador ou Artesão?
Princípios de Design OO
Single Responsibility Principle
Open/close principle
Liskov substitution principle
Interface segregation principle
Dependency inversion principle
S.O.L.I.D.
Testando... 1, 2, 3
Testes unitários
Testa uma porção individual do código, como uma função,
método ou classe.
Testando... 1, 2, 3
Asserções
Verificações de
pré e pós-condições do teste
Testando... 1, 2, 3
Objetos Mock
Objetos usados em testes que simulam o funcionamento de
um objeto real
Testando... 1, 2, 3
Integração
Carga
Estresse
Desempenho
Tipos de teste
Resiliência
Aceitação
Cobertura
Regressão
Ferramentas
• Teste unitário
JUnit, TestNG
• Teste de integração (web)
Selenium/Web Driver, HtmlUnit, UFT/QTP
• Mocks
Mockito, JMock, PowerMock, EasyMock
Plataforma Java
Ferramentas
• Teste de cobertura
EclEmma
Plataforma Java
Prática
• Testes unitários
– Calculadora com JUnit
• Teste web
– Pesquisa no Google com WebDriver (Internet)
– Navegação entre duas páginas
Demonstração
Conclusões
• Não é uma solução mágica
• TDD não é sobre TDD
• TDD é um exercício diário
• TDD é disciplina
Test-Driven Development
Pratique!
Não tenha medo...
Perguntas?
Top Related