Iure Guimarães, 2009 [email_address] Siriusoft ®
Resolvendo o problema  certo
Resolvendo o problema  certo da maneira  correta
Códigos ruíns Defeitos
Códigos ruíns Defeitos Manutenção
Códigos ruíns Defeitos Manutenção Produtividade
O problema
Necessidades do cliente
Tarde demais
 
A  Solução
Caixa Branca TDD  não é Caixa Preta Regressão Caixa Cinza
TDD  não é limitado … Unitários F un cionais Aceitação
SOFTWARE  DESIGN
TFD  Refatoração
Experience is a harsh teacher because she gives the test first, the lesson afterward. _  Provérbio Chinês
O  resultado   é um reflexo do que foi  solicitado
Menos  tempo   gasto com a solução de defeitos
Confiança  na qualidade do próprio trabalho
Possibilita a  propriedade coletiva  do código
Desenvolvendo  incrementalmente
Nunca se afastando do  real objetivo
E o  resultado  é
E o  resultado  é ?
E o  resultado  é
E o  resultado  é
 
Teste Modele Implemente Teste
 
TDD Descubra o que você realmente quer fazer Modele
TDD Escreva um teste que expresse sua modelagem . Ele deverá  falhar Modele Teste
TDD Escreva o código Modele Teste Implemente
TDD Teste novamente. Desta vez para  passar Modele Teste Implemente Teste
TDD Refatore para melhorar a qualidade da solução Refatore Teste Implemente Teste
Modelagem “ Quando validado, o template “Olá, ${nome} com o valor “Iure” para a variável nome retornará a string “Olá, Iure”
Teste
Falha
Fazendo o teste  Passar
Faça  falhar  novamente  Triangulação com valores diferentes
Faça  Passar   novamente
Faça  falhar  novamente  Renomeando o titulo do teste
Faça  passar   novamente  Apenas funciona para a variável nome
Falhar…
Passar… Refatorar para HashMap
Não se esqueça de  Refatorar
Não se esqueça de  Refatorar Responsabilidades
Não se esqueça de  Refatorar Extract Method Responsabilidades
Não se esqueça de  Refatorar Extract Method Inner line Responsabilidades
Não se esqueça de  Refatorar Extract Method Inner line Responsabilidades Encapsulamento
Não se esqueça de  Refatorar Extract Method Inner line Extract Class Responsabilidades Encapsulamento
 
 
 
Spike Um jeito de tornar o desconhecido  conhecido XP Explorando as várias soluções
Spike Um jeito de tornar o desconhecido  conhecido XP Aprenda  escrevendo testes
Spiking Regex Aprenda  escrevendo 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 que se imaginava Estrat égia para escolha do teste
Incerto  x  Familiar Pegando as frutas mais baixas, resultados mais rápidos Estrat égia para escolha do teste
Maior valor  x  Mais fácil Mais 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ção Don’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 DRY 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 mocks stubs fakes 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  the object listens.” J. B. Rainsberger, author of JUnit Recipes
Conceitos Essenciais Stubs Implementação mais simples possível HARD-CODED
Conceitos Essenciais Fakes Parecem patos, andam como patos e soam como patos.  MAS NÃO SAO PATOS
Conceitos Essenciais Mocks Incorpora asserções que verificam colaboração com outros objetos
Conceitos Essenciais Mocks Normalmente gerados dinamicamente por frameworks:  jMock ,  EashMock ,  FlexMock ,  MockPP
Testando em Equipe Muitos desenvolvedores Desenvolvimento Distribuído Plataformas diferêntes Uma estratégia de testes
Quem é responsável ?
Responsabilidade da Equipe Todos  são responsáveis Viu um problema,  conserte ! O  código  é de todos
 
Iure Guimarães, 2009 [email_address] Siriusoft ®
Bibliografia blog.briandicroce.com www.lispcast.com Introduction to TDD - Kirrily Robert

Introdução a Desenvolvimento Orientado a Testes ( TDD )