Iure Guimarães, [email protected]
SiriusoftSiriusoft®®
Resolvendo o problema Resolvendo o problema certocerto
Resolvendo o problema Resolvendo o problema certocerto
da maneira da maneira corretacorreta
Códigos ruínsCódigos ruínsCódigos ruínsCódigos ruíns
• Defeitos• Defeitos
Códigos ruínsCódigos ruínsCódigos ruínsCódigos ruíns
• Defeitos
• Manutenção
• Defeitos
• Manutenção
Códigos ruínsCódigos ruínsCódigos ruínsCódigos ruíns
• Defeitos
• Manutenção
• Produtividade
• Defeitos
• Manutenção
• Produtividade
O problemaO problema
Necessidades do Necessidades do clientecliente
Necessidades do Necessidades do clientecliente
Tarde demaisTarde demaisTarde demaisTarde demais
A A SoluçãoSoluçãoA A SoluçãoSolução
Caixa Caixa
PretaPretaCaixa Caixa Branca
Branca
Regressão
Regressão Caixa Caixa
CinzaCinza
TDD TDD não énão éTDD TDD não énão é
UnitáriosUnitários FFununcionais
cionais
AceitaçãAceitaçã
oo
TDD TDD não é limitadonão é limitadoTDD TDD não é limitadonão é limitado
……
SOFTWARE SOFTWARE DESIGNDESIGNSOFTWARE SOFTWARE DESIGNDESIGN
TFTFD D TFTFD D
RefatoraçãoRefatoração
Experience is a harsh teacher Experience is a harsh teacher because she gives the test because she gives the test first, the lesson afterward.first, the lesson afterward.
_ _ Provérbio ChinêsProvérbio Chinês
O O resultadoresultado é um reflexo do é um reflexo do que foi que foi solicitadosolicitado
Menos Menos tempotempo gasto com a gasto com a solução de defeitossolução de defeitos
ConfiançaConfiança na qualidade do na qualidade do próprio trabalhopróprio trabalho
Possibilita a Possibilita a propriedade propriedade coletiva coletiva do códigodo código
Desenvolvendo Desenvolvendo incrementalmenteincrementalmente
Nunca se afastando do Nunca se afastando do real real objetivoobjetivo
E o E o resultadoresultado é é
E o E o resultadoresultado é é
?
E o E o resultadoresultado é é
E o E o resultadoresultado é é
Modele
Implemente
Teste
TesteTesteTesteTeste
Modele
TDDTDDTDDTDD
Descubra o que você Descubra o que você realmente quer fazerrealmente quer fazer
Modele
Teste
TDDTDDTDDTDD
Escreva um teste que Escreva um teste que expresse sua expresse sua
modelagemmodelagem. Ele . Ele deverá deverá falharfalhar
Modele
Teste
Implemente
TDDTDDTDDTDD
Escreva o códigoEscreva o código
Modele
Teste
Implemente
TDDTDDTDDTDD
Teste Teste novamente. Teste novamente. Desta vez para Desta vez para
passarpassar
Refatore
Teste
Implemente
TDDTDDTDDTDD
Teste Refatore para Refatore para melhorar a melhorar a
qualidade da qualidade da soluçãosolução
ModelagemModelagemModelagemModelagem
““Quando validado, o template “Olá, $Quando validado, o template “Olá, ${nome} com o valor “Iure” para a variável {nome} com o valor “Iure” para a variável
nome retornará a string “Olá, Iure”nome retornará a string “Olá, Iure”
TesteTesteTesteTeste
FalhaFalhaFalhaFalha
Fazendo o teste Fazendo o teste PassarPassarFazendo o teste Fazendo o teste PassarPassar
Faça Faça falharfalhar novamente novamente Faça Faça falharfalhar novamente novamente
Triangulação com valoresdiferentes
Triangulação com valoresdiferentes
Faça Faça PassarPassar novamente novamente Faça Faça PassarPassar novamente novamente
Faça Faça falharfalhar novamente novamente Faça Faça falharfalhar novamente novamente
Renomeando o titulo do testeRenomeando o titulo do teste
Faça Faça passarpassar novamente novamente Faça Faça passarpassar novamente novamente
Apenas funciona para a variável nomeApenas funciona para a variável nome
Falhar…Falhar…Falhar…Falhar…
Passar…Passar…Passar…Passar…
Refatorar para HashMapRefatorar para HashMap
Não se esqueça de Não se esqueça de RefatorarRefatorar
Não se esqueça de Não se esqueça de RefatorarRefatorar
Não se esqueça de Não se esqueça de RefatorarRefatorar
Não se esqueça de Não se esqueça de RefatorarRefatorar
ResponsabilidadesResponsabilidades
Não se esqueça de Não se esqueça de RefatorarRefatorar
Não se esqueça de Não se esqueça de RefatorarRefatorar
Extract Method
Extract Method
ResponsabilidadesResponsabilidades
Não se esqueça de Não se esqueça de RefatorarRefatorar
Não se esqueça de Não se esqueça de RefatorarRefatorar
Extract Method
Extract Method
Inner lineInner line
ResponsabilidadesResponsabilidades
Não se esqueça de Não se esqueça de RefatorarRefatorar
Não se esqueça de Não se esqueça de RefatorarRefatorar
Extract Method
Extract Method
Inner lineInner line
ResponsabilidadesResponsabilidades
EncapsulamentoEncapsulamento
Não se esqueça de Não se esqueça de RefatorarRefatorar
Não se esqueça de Não se esqueça de RefatorarRefatorar
Extract Method
Extract Method
Inner lineInner line
Extract ClassExtract Class
ResponsabilidadesResponsabilidades
EncapsulamentoEncapsulamento
SpikeSpike
Um jeito de Um jeito de tornar o tornar o
desconhecido desconhecido
conhecidoconhecido
XPXP
Explorando as várias soluçõesExplorando as várias soluções
SpikeSpike
Um jeito de Um jeito de tornar o tornar o
desconhecido desconhecido
conhecidoconhecido
XPXP
AprendaAprenda escrevendo testesescrevendo testes
Spiking RegexSpiking Regex
AprendaAprenda escrevendo testesescrevendo testes
Como escrever testes e os fazer passar
Estratégias para escolha do teste
Detalhes x Visão geral
Solução vai de encontro com o Solução vai de encontro com o que se imaginavaque se imaginava
Estratégia para escolha do teste
Incerto x Familiar
Pegando as frutas mais baixas, Pegando as frutas mais baixas, resultados mais rápidosresultados mais rápidos
Estratégia para escolha do teste
Maior valor x Mais fácil
Mais progresso com menos esforçoMais progresso com menos esforço
Estratégia para escolha do teste
Como escrever testes e os fazer passar
Estratégias para implementação
do teste
Estratégias para implementação do teste
Solução paleativa:
FAKE
Não fique muito tempo no vermelho
Estratégias para implementação do teste
Triangulação
Reduza o espaço da solução
Estratégias para implementação do teste
Implementação óbvia
Como escrever testes e os fazer passar
Princípios importantes a
serem seguidos
Princípios inportantes
Vá para o verde o mais rápido
possível
Princípios inportantes
Vá mais devagar depois de um
erro
Princípios inportantes
Jamais pule a refatoração
Conceitos Essenciais
Conceitos Essenciais
Fixtures correspondem ao
contexto da aplicação
Conceitos Essenciais - Fixtures
Estado de todo o ambiente de
execução
Conceitos Essenciais - Fixtures
Removem duplicação
DRY
Conceitos Essenciais - Fixtures
Removem duplicaçãoDon’t RY
Conceitos Essenciais - Fixtures
Removem duplicação
Don’t Repeat Y
Conceitos Essenciais - Fixtures
Removem duplicação
Don’t Repeat Yourself
Conceitos Essenciais - Fixtures
Removem duplicação
DRYCompreensão
do Código?Compreensão
do Código?
Conceitos Essenciais - Fixtures
Testes com FOCO
Identifique uma floresta por suas árvores
Conceitos Essenciais
Objetos falsos Colaboração / dependência
Pretendem ser o que não são
O cliente não tem idéia
Acabam fazendo mais rápido do que os reais
Conceitos Essenciais
Teste baseado no Estado
Conceitos Essenciais
Teste baseado na interação
Testa a interação entre um
objeto e seus colaboradores
Conceitos Essenciais
Teste baseado na interação
mocksmocks
stubsstubs
fakesfakes
Testa a interação entre um
objeto e seus colaboradores
Conceitos Essenciais
“We lean on interaction-based testing to verify how an object
talks to its collaborators; and we lean on state-based testing to verify
how well theobject listens.”
J. B. Rainsberger, author of JUnit Recipes
Conceitos Essenciais
StubsStubsImplementação mais simples Implementação mais simples
possívelpossível
HARD-CODEDHARD-CODED
Conceitos Essenciais
FakesFakesParecem patos, andam como Parecem patos, andam como patos e soam como patos. patos e soam como patos.
MAS NÃO SAO PATOSMAS NÃO SAO PATOS
Conceitos Essenciais
MocksMocksIncorpora asserções que Incorpora asserções que
verificam colaboração com verificam colaboração com outros objetos outros objetos
Conceitos Essenciais
MocksMocksNormalmente gerados Normalmente gerados
dinamicamente por dinamicamente por frameworks: frameworks: jMockjMock, ,
EashMockEashMock, , FlexMockFlexMock, , MockPPMockPP
Testando em EquipeTestando em Equipe
• Muitos desenvolvedoresMuitos desenvolvedores
• Desenvolvimento Desenvolvimento
DistribuídoDistribuído
• Plataformas diferêntesPlataformas diferêntes
• Uma estratégia de testesUma estratégia de testes
Quem é Quem é responsável ?responsável ?
Responsabilidade da Responsabilidade da EquipeEquipe
• TodosTodos são responsáveis são responsáveis
• Viu um problema, Viu um problema, conserteconserte!!
• O O códigocódigo é de todos é de todos
Iure Guimarães, [email protected]
SiriusoftSiriusoft®®
BibliografiaBibliografia
blog.briandicroce.comwww.lispcast.com
Introduction to TDD - Kirrily Robert
Top Related