Introdução ao TDD

837 views
738 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
837
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
39
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • Contextualizar o processo / Conjunto de atividades que levam a um sistema\n
  • \n
  • \n
  • Anotar mudanças e incertezas\n
  • Anotar mudanças e incertezas\n
  • Discutir um pouco as práticas para levar o benefício do feedback\n
  • Implantar é a oportunidade de checar as suposições frente à realidade / Sem implantar não como ter um feedback completo\n A cada ciclo de incremento se repetem as etapas de desenvolver e obter feedback / Maneira de aprender algo sobre o sistema e aplicar este conhecimento de volta ao sistema\n
  • Cada ciclo oferece um feedback em que o time pode descobrir e corrigir erros\nOs ciclos internos focam no detalhe, o ciclos exteros focam na organização e no time\nQuanto mais cedos obtivermos o feedback, melhor\n
  • \n
  • \n
  • \n
  • O esforço para escrever o teste primeiro dá-nos FEEDBACK sobre a qualidade das nossas ideias\nFazer código testável torna o desenvolvimento mais limpo e mais modular\nSe se escreve testes durante o processo de desenvolvimento, então TESTES de REGRESSÃO\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Onde meu software está quebrando? Vou ter que fazer manutenção demais!\n\nO medo nos faz hesitantes\nO medo nos faz diminuir a comunicação\nO medo nos afastam do feedback\nO medo nos faz mal-humorados\n
  • Onde meu software está quebrando? Vou ter que fazer manutenção demais!\n\nO medo nos faz hesitantes\nO medo nos faz diminuir a comunicação\nO medo nos afastam do feedback\nO medo nos faz mal-humorados\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Código limpo\ntestes como especificação\naumento de confiança\n
  • Código limpo\ntestes como especificação\naumento de confiança\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Problema: quando integra o sistema, propriedades emergentes surgem e quebram\n
  • Problema: quando integra o sistema, propriedades emergentes surgem e quebram\n
  • Problema: quando integra o sistema, propriedades emergentes surgem e quebram\n
  • \n
  • \n
  • \n
  • Os testes de aceitação demoram mais a passar / Testes de unidades devem passar logo depois que foram escritos / Testes unitários não devem comprometer o repositório de origem / Testes de aceitação devem estar presentes por todo o sistema / testando a GUI\n\n
  • Os testes de aceitação demoram mais a passar / Testes de unidades devem passar logo depois que foram escritos / Testes unitários não devem comprometer o repositório de origem / Testes de aceitação devem estar presentes por todo o sistema / testando a GUI\n\n
  • Os testes de aceitação demoram mais a passar / Testes de unidades devem passar logo depois que foram escritos / Testes unitários não devem comprometer o repositório de origem / Testes de aceitação devem estar presentes por todo o sistema / testando a GUI\n\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 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

    ×