1. Padres para Desenvolvimentode Software Guiado por Testes
Tech Talk Coquelux Mantra Vermelho/verde/refatorar Everton
Rodrigues
2. "TDD uma forma de administrar o medo durante a
programao"Quanto mais estresse voce sentir, menos vai testar.
Quanto menos voce testar, mais erros vai acontecer. Quanto mais
erros voce cometer, mais estresse vai sentir.
3. Questo Porque conhecer Padrespara TDD, o que vai
ajudar?
4. Padres para TDD ajudam a responder as perguntas:- O que
queremos dizer comtestar?- Quanto testamos?- Como escolhemos que
logicatestar?- Como escolhemos quais dadostestar?
5. Testes isolados "Faa testes to rapidos de executar que possa
roda-los sozinho e roda-los frequentemente""Busque testes em
pequena escala em vez de buscar na aplicao inteira"
6. Lista de testesAntes de comear, escreva uma lista de todos
os testes que sabe que tera que escrever.Se eu conseguir pensar em
um teste que pode no funcionar, faze-lo funcionar mais importante
que liberar meu codigo.
7. Teste primeiro Quando voce deveria escrever seus
testes?Antes de escrever o codigo que vai ser testado.
8. A assero deve vir primeiro (Assert first)Quando eu deveria
escrever as asseres? Escreva-as primeiro pensando: Qual a resposta
certa? Como eu vou verificar? Ex: assertTrue, assertEquals.
testIfRunBackup, testIfExportArchive
9. Dados de teste (Test data)Use dados que faam os testes
faceis de ler e seguir.A alternativa mais indicada paraDados de
teste o uso de Dados realistas.
10. Padres de Barra Vermelhaquando e onde escreve e para de
escrever testes - One Step Test - Starter Test - Explanation Test -
Learning Test - Another Test - Regression Test - Break (Pausa) - Do
Over (Faa de novo) - Cheap Desk, Nice Chair
11. Teste de aprendizado (Learning test)Quando voce escreve
testes parasoftware produzido externamente?Antes da primeira vez
que voc vai usar algum componente deste pacote externo.Ex: escreva
um teste que verifica se a API funciona.
12. Teste de regresso (Regression test) Qual a primeira coisa
que voce faz quando um defeito informado?Escreva o menor teste
possivel que falhee que, uma vez rodado, sera refatorado.
13. Faa de novo (Do Over) O que voce faz quando se sente
perdido?Jogue o codigo fora e comece de novo.
14. Padres de Testeso tecnicas mais detalhadas para escrever
testes - Teste filho (child test) - Objeto simulado (mock object) -
Autodesvio (self shunt) - String de registro (log string) - Modelo
de teste de acidentes - Teste quebrado (broken test) - Check-in
limpo (clean check-in)
15. Objeto Simulado (Mock Object) Como voce testa um objeto que
se baseia em um recurso caro ou complicado?Crie uma verso faz de
conta do recurso que responde com constantes. Ex: mockar o
database
16. String de registro (Log String) Como voc testa se a
sequencia em queas mensagens so chamadas esta correta?Mantenha um
registro em um string (log) e, quando uma mensagem for chamada,
acrescente-a string. Ex: conectou selecionou alterou
desconectou
17. Modelo de teste de acidentes Como voce testa codigo de erro
que provavelmente sera pouco invocado? Invoque-o de qualquer forma
com umobjeto especial que lana uma exceo em vez de fazer o trabalho
real.Ex: testar o que acontece com o filesystem cheio
18. Teste quebrado Como voce deixa uma sesso deprogramao quando
esta programando sozinho? Deixe o ultimo teste quebrado.
19. Padres de Barra Verdepadres para fazer o codigo funcionar -
Fazer de conta (Fake it) - Triangular (Triangulate)- Implementao
obvia (Obvious Implementation)- Um para muitos (One to many)
20. Fazer de conta (Fake it)Qual sua primeira implementao uma
vez que tem um teste que no funciona? Retorne uma constante. Depois
de ter o teste rodando, gradualmente transforme a constante em uma
expresso usando variaveis. Ex: validar CSV gerado
dinamicamente
21. TriangularComo voc conduz abstrao com testes de forma mais
conservadora?Abstraia apenas quando tiver dois ou mais exemplos.
Ex: assertEquals(4, soma(1,3)) assertEquals (7, soma(3,4)) Outro
exemplo?
22. Padres xUnit xUnit frameworks - Assertion - Fixture -
Fixture externa - Test method - Exception test All tests
23. Assero Como voce verifica que os testes funcionaram
corretamente? Escreva expresses booleanas queautomatizem seu
julgamento sobre se o codigo funcionou ou no. Ex: assertTrue,
assertFalse, assertInternalType, assertEquals Outro exemplo?
24. Fixture Como voce cria objetos comuns necessarios para
varios testes?Converta as variaveis locais nos testes em variaveis
de instancia. Sobrescreva setUp() e inicialize aquelas variaveis.
Ex: Dados especificos no banco dados
25. Fixture externaComo voce libera recursos externos na
fixture? Sobrescreva tearDown() e libere os recursos. Ex:
fopen.close() Outro exemplo?
26. Metodo de testeComo voce representa um unico caso de
teste?Como um metodo cujo nome comea com "test". Ex:
testIfArrayGreaterThanOne(), testIsString() Outro exemplo?
27. Teste de exceo Como voce testa excees inesperadas? Pegue
excees esperadas e ignore-as,falhando apenas se a exceo no
lanada.1. exchange->addRate("USD","GBP",2);2. function
testMissingRate() { try { exchange->findRate("USD", "GBP");
fail(); //exceo lanada } catch (Exception $e) { // exception
}}
28. Todos os testes Como rodar todos os testes juntos?Faa uma
suite de todas as suites de testes,agregando os pacotes de testes
da aplicao inteira.
29. O Programador Sem Medo"So os testes de unidade que mantem
seus codigos flexiveis, reutilizaveis e passiveis demanuteno. A
razo simples. Se voc tivertestes, no tera medo de alterar codigo!
Sem os testes, cada modificao pode gerar umbug! Com os testes esse
medo praticamente some" Robert C. Martin
30. Referencias Test Driven Development: By Example - Kent Beck
Clean Code - Robert C. MartinA Relao Entre TDD e Qualidade de
Software -
InfoQwww.infoq.com/br/articles/relacao-tdd-qualidade