pensando tdd
DESCRIPTION
Uma reflexão sobre desenvolvimento de software, qualidade e como o TDD pode nos ajudar a melhorar em tudo isso. A versão em PPT, que possui comentários adicionais para cada Slide, pode ser baixada no Google Drive: https://drive.google.com/folderview?id=0B4k-4pdeaM58SEpYcHZSbFdoS0E&usp=sharing Para maiores informações sobre a palaestra, acesse: http://luizricardo.org/2014/10/pensando-tdd/ TRANSCRIPT
![Page 1: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/1.jpg)
Pensando TDD
08/10/2014
![Page 2: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/2.jpg)
Direitos Autorais
Você está autorizado e incentivado a distribuir este material.
Copie, compartilhe e modifique, apenas cite a fonte.
![Page 3: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/3.jpg)
Autoria
Luiz Ricardo
luizricardo.orgfacebook.com/StateOfTheArtBlog
![Page 4: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/4.jpg)
Código-fonte
O código dos exemplos práticos pode ser obtido no link:
https://github.com/utluiz/tdd-example
![Page 5: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/5.jpg)
Porque software?
![Page 6: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/6.jpg)
![Page 7: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/7.jpg)
![Page 8: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/8.jpg)
$$$???
![Page 9: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/9.jpg)
![Page 10: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/10.jpg)
Software de Qualidade
Faz o que deveria fazer
SEM ERROS
![Page 11: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/11.jpg)
Software de Qualidade
Funciona
![Page 12: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/12.jpg)
Dificuldades do Software
Sem representação visível
Dificuldade em identificar requisitos
Abstrato
![Page 13: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/13.jpg)
Dificuldades do Software
Singular
Cada um é diferente
![Page 14: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/14.jpg)
Dificuldades do Software
Mutável
1 bit muda tudo
![Page 15: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/15.jpg)
Dificuldades do Software
Complexo
Simplificação
Perda de informação
![Page 16: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/16.jpg)
Expectativa Realidade
![Page 17: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/17.jpg)
Como fazer software de qualidade?
![Page 18: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/18.jpg)
Teste Teste
Teste
Teste
Teste
![Page 19: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/19.jpg)
TDD
Metodologia ágil de desenvolvimento de software
cujo objetivo é gerarcódigo limpo que funciona
Test-Driven Development
![Page 20: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/20.jpg)
Fases do Desenvolvimento
Tradicional
Projeto
Implementação
Teste
![Page 21: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/21.jpg)
Mudanças acontecem...
![Page 22: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/22.jpg)
Abrace-as!
![Page 23: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/23.jpg)
Correção de Bugs
Design Implementação Teste Manutenção
Custo por fase
![Page 24: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/24.jpg)
![Page 25: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/25.jpg)
![Page 26: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/26.jpg)
Fases do Desenvolvimento
TDD
Projeto/Teste
Implementação
![Page 27: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/27.jpg)
Definição de “Pronto”
Quando terminamos uma nova funcionalidade?
![Page 28: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/28.jpg)
Definição de “Pronto”
Código
![Page 29: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/29.jpg)
Definição de “Pronto”
Código limpo
![Page 30: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/30.jpg)
Definição de “Pronto”
Código limpo
Testado
![Page 31: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/31.jpg)
Definição de “Pronto”
Código limpo
Teste automatizado
![Page 32: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/32.jpg)
Definição de “Pronto”
Código limpo
Teste automatizado
Deploy automatizado
![Page 33: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/33.jpg)
Definição de “Pronto”
Código limpo
Teste automatizado
Deploy automatizado
Documentado
![Page 34: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/34.jpg)
Ciclo de Vida do TDD
Vermelho
VerdeRefatore
![Page 35: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/35.jpg)
Ciclo de Vida do TDD
Vermelho, verde, refatore
Vermelho, verde, refatore
Vermelho, verde, refatore
Vermelho, verde, refatore
...
O “Mantra”
![Page 36: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/36.jpg)
Ciclo de Vida do TDD
Vermelho
VerdeRefatore
1. Escreva um teste que falhe
![Page 37: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/37.jpg)
Ciclo de Vida do TDD
Vermelho
VerdeRefatore
1. Escreva um teste que falhe
2. Façafuncionar
![Page 38: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/38.jpg)
Ciclo de Vida do TDD
Vermelho
VerdeRefatore
1. Escreva um teste que falhe
2. Façafuncionar
3. Faça direito
![Page 39: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/39.jpg)
Ciclo de Vida do TDD
VerdeRefatore
Por que separar?
Faça funcionarFaça direito
![Page 40: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/40.jpg)
Ciclo de Vida do TDD
![Page 41: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/41.jpg)
Valores do TDD
• Foco na qualidade
• Código “documentado”
• Sem medo de mudanças
![Page 42: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/42.jpg)
Só mais uma coisa...
![Page 43: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/43.jpg)
Dificuldades do TDD
• Qualidade tem custo
• Indefinição
• Design ruim
![Page 44: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/44.jpg)
Desenvolvimento de Software
Metáforas
![Page 45: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/45.jpg)
Desenvolvimento de Software
Amador ou Artesão?
![Page 46: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/46.jpg)
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.
![Page 47: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/47.jpg)
![Page 48: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/48.jpg)
Testando... 1, 2, 3
Testes unitários
Testa uma porção individual do código, como uma função,
método ou classe.
![Page 49: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/49.jpg)
Testando... 1, 2, 3
Asserções
Verificações de
pré e pós-condições do teste
![Page 50: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/50.jpg)
Testando... 1, 2, 3
Objetos Mock
Objetos usados em testes que simulam o funcionamento de
um objeto real
![Page 51: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/51.jpg)
Testando... 1, 2, 3
Integração
Carga
Estresse
Desempenho
Tipos de teste
Resiliência
Aceitação
Cobertura
Regressão
![Page 52: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/52.jpg)
Ferramentas
• Teste unitário
JUnit, TestNG
• Teste de integração (web)
Selenium/Web Driver, HtmlUnit, UFT/QTP
• Mocks
Mockito, JMock, PowerMock, EasyMock
Plataforma Java
![Page 53: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/53.jpg)
Ferramentas
• Teste de cobertura
EclEmma
Plataforma Java
![Page 54: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/54.jpg)
Prática
• Testes unitários
– Calculadora com JUnit
• Teste web
– Pesquisa no Google com WebDriver (Internet)
– Navegação entre duas páginas
Demonstração
![Page 55: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/55.jpg)
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
![Page 56: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/56.jpg)
Pratique!
![Page 57: Pensando TDD](https://reader035.vdocuments.site/reader035/viewer/2022081413/547c1accb4af9fb17b8b459a/html5/thumbnails/57.jpg)
Não tenha medo...
Perguntas?