Introdução ao TDD

935 views

Published on

Contextualização e benefícios do desenvolvimento baseado em testes

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Introdução ao TDD

  1. 1. @dudumendesDesenvolvimentoBaseado em Testes Eduardo Mendes de Oliveira edumendes@gmail.com
  2. 2. @dudumendes Agenda• Introdução• Conceitos de desenvolvimento orientados a testes • TDD / BDD• Revisão de Refatoração• Padrões de teste• Ferramentas• Aulas práticas 2
  3. 3. @dudumendesIntrodução
  4. 4. @dudumendesProcesso de Software Projeto  e   Especificação Implementação Validação Evolução
  5. 5. @dudumendesContexto do Processo de Sofware - Equipe•Algo novo para a equipe de software •pessoas envolvidas •domínio da aplicação •tecnologia utilizada •uma combinação dos 03 anteriores•Elementos surpresas
  6. 6. @dudumendesContexto do Processo de Sofware - Cliente•Obriga a criar um novo olhar sobre a organização a partir de uma nova perspectiva•É preciso negociar e formalizar processos que até então eram baseados na experiência e convenções
  7. 7. @dudumendes Processo de Software Processo de aprendizagem•Sucesso do projeto •Entender o progresso do projeto •trabalho conjunto para identificar e resolver mal-entendidos•É preciso um processo que ajude a lidar com as incertezas e antecipar mudanças inantecipadas
  8. 8. @dudumendes Princípios ágeis fundamentais•Desenvolvimento incremental•Envolvimento do cliente•Pessoas, não processos•Aceitar as mudanças•Envolvimento do cliente
  9. 9. Incremento + @dudumendes Feedback analisar projetar implantarimplementar CICLO feedback
  10. 10. @dudumendes Ciclos no Processo de Software•Testes de unidade•Testes de aceitação•Reuniões diárias•Releases
  11. 11. Lidando com a @dudumendes mudança• Possuir testes de regressão sempre • adicionar funcionalidades sem quebrar as existentes • escrever testes às vezes é visto como uma tarefa chata• Manter a simplicidade (FOWLER, 1999) • Código fácil de manter e modificar • exige esforço de refatoração constante
  12. 12. @dudumendes
  13. 13. @dudumendes Melhores práticas para programação•Evitar código spaghetti•Incluir comentários relevantes nos fontes•Criar testes antes ou concomitantemente à codificação•Inspeções formais•Re-inspeções de código após mudanças significativas•Renovar código legado antes de melhorias
  14. 14. @dudumendes TDD•Teste antes, teste primeiro •ao invés de deixar o teste verificar o trabalho depois de feito•Teste como atividade de projeto •esclarece as ideias sobre o que queremos que o código faça •separação dos projetos físicos e lógicos
  15. 15. Ciclo de vida do @dudumendes softwareDensenvolvimentoem um primeiro momento só existiam 02 fases Manutenção 15
  16. 16. @dudumendes Ciclos ruins•Quando se chega na época de entregar o software •Cliente não está satisfeito •Por falta de tempo, o software é entregue sem testes
  17. 17. @dudumendesEspiral da mortemenos testes mais problemas menos tempo
  18. 18. Abordagens Ágeis Test First ✦ Modifica a abordagem tradicional para modelar e analisar•Kent Beck ✦ Cria práticas para fornecer apoio ao Test First Baby Steps 18
  19. 19. ConsequênciasDensenvolvimento Manutenção
  20. 20. ConsequênciasTDDTest Driven Development
  21. 21. ConsequênciasTDD Test Driven Design
  22. 22. TDD• “Test-driven development is a way of managing fear during programming.” Kent Beck
  23. 23. TDD• “Desenvolvimento baseado em testes é uma forma de administrar o medo durante a programação.” Kent Beck
  24. 24. “Alguém sabe o que isso faz?”
  25. 25. “Eu acho que não temos nenhuma documentação para isso!”
  26. 26. “Se eu mudar XprovalvementeY vai quebrar!”
  27. 27. “Na última vez quepeguei nesse negócio, nós passamos uma semana para corrigí-lo.”
  28. 28. @dudumendesTDD
  29. 29. @dudumendesEntão o que é TDD
  30. 30. TDD @dudumendesEscreva um teste ANTESde escrever um código a ser testadoEscreva um código queapenas faça compilar o testee observe o teste funcionandoRefatore para o formato mais simplespossível
  31. 31. @dudumendesO ciclo básico do TDD F Fazer um código Escrever um passar no testeteste unitário que falha Refatorar
  32. 32. @dudumendesred / green / refactor
  33. 33. @dudumendes Feedback do TDD•Implementação •Funciona?•Projeto •Está bem elaborado?
  34. 34. @dudumendesBenefícios do TDD•Escrevendo testes •esclarece os critérios de aceitação •encoraja a escrever componentes fracamente acoplados para que sejam testados isoladamente •atribui uma descrição executável do que o código faz •ganha-se uma suíte de regressão completa
  35. 35. @dudumendesBenefícios do TDD•Executando testes •detecta erros enquanto o contexto do código ainda está em mente •avisa quando fizemos o bastante, evitando esforço desnecessário
  36. 36. @dudumendesBenefícios resumo•O projeto evolui constatemente•O projeto está sobre constante revisão •qualidade de código •fraco acoplamento •alta coesão
  37. 37. @dudumendesRegra de Ouro do TDD “Nunca codifique uma funcionalidade nova sem um teste falhando”
  38. 38. @dudumendesNíveis de teste
  39. 39. Testes preparar Unitários Componente  “resetar” testado  de   executar maneira   isolada validar
  40. 40. TDD @dudumendes x Testes unitários•TDD é somente a utilização de testes unitários? •melhor do que nada! •às vezes os testes ficam isolados e não podem ser integrados
  41. 41. @dudumendes Por onde começar?• Por onde começa um projeto?
  42. 42. @dudumendesRegra de Ouro do TDD “Nunca codifique uma funcionalidade nova sem um teste falhando”
  43. 43. @dudumendes Por onde começar? Fazer um código F Escrever um passar no teste teste unitário que falha Escrever um Refatorarteste de aceitação que falha
  44. 44. @dudumendes Níveis de teste• Aceitação • O sistema funciona como um todo?• Integração • Nosso código funciona com o código já existente?• Unidade • Nossos objetos fazem a coisa certa do jeito certo?
  45. 45. Processo de SoftwareRequisitos Projeto Implementa Teste Evolução
  46. 46. Processo de Software com TDD Projeto Implementa Teste
  47. 47. Processo de Software com TDD Projeto Teste Implementa
  48. 48. Processo de Software com TDD Projeto Teste Implementa Teste
  49. 49. TDD ProjetoTeste Teste Implementa
  50. 50. TDD ProjetoTeste Teste Implementa
  51. 51. TDD Projeto crie uma lista de teste anote e identifique os testes seja conciso: uma classe ou métodoposteriormente, é possível adicionar mais testes
  52. 52. TDDProjeto Teste
  53. 53. TDDEscreva o teste primeiro •pense no design •controle o escopo Testecrie o teste utilizando assertivas •teste o que é esperado e o que não é esperado
  54. 54. TDD TesteImplementa
  55. 55. TDDimplemente o código que deve ser testado faça o mínimo e somente o necessário para que o teste compile e passe Implementa
  56. 56. TDDTeste Implementa
  57. 57. TDDTeste Verifique se o teste passou
  58. 58. TDD ProjetoTeste E tudo de novo! Teste Implementa
  59. 59. @dudumendesEntendi! Já sei! TDD é um método para testar software
  60. 60. @dudumendesPEINNNNN!!!!!
  61. 61. @dudumendes TDD éum método*para construir software*método: abordagem repetítivel - ciclo para solucionar um determinado problema - aprendizado

×