Your SlideShare is downloading. ×
Introdução ao TDD
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Introdução ao TDD

585
views

Published on

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

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
585
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
34
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
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
  • Transcript

    • 1. @dudumendesDesenvolvimentoBaseado em Testes Eduardo Mendes de Oliveira edumendes@gmail.com
    • 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. @dudumendesIntrodução
    • 4. @dudumendesProcesso de Software Projeto  e   Especificação Implementação Validação Evolução
    • 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. @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. @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. @dudumendes Princípios ágeis fundamentais•Desenvolvimento incremental•Envolvimento do cliente•Pessoas, não processos•Aceitar as mudanças•Envolvimento do cliente
    • 9. Incremento + @dudumendes Feedback analisar projetar implantarimplementar CICLO feedback
    • 10. @dudumendes Ciclos no Processo de Software•Testes de unidade•Testes de aceitação•Reuniões diárias•Releases
    • 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. @dudumendes
    • 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. @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. Ciclo de vida do @dudumendes softwareDensenvolvimentoem um primeiro momento só existiam 02 fases Manutenção 15
    • 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. @dudumendesEspiral da mortemenos testes mais problemas menos tempo
    • 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. ConsequênciasDensenvolvimento Manutenção
    • 20. ConsequênciasTDDTest Driven Development
    • 21. ConsequênciasTDD Test Driven Design
    • 22. TDD• “Test-driven development is a way of managing fear during programming.” Kent Beck
    • 23. TDD• “Desenvolvimento baseado em testes é uma forma de administrar o medo durante a programação.” Kent Beck
    • 24. “Alguém sabe o que isso faz?”
    • 25. “Eu acho que não temos nenhuma documentação para isso!”
    • 26. “Se eu mudar XprovalvementeY vai quebrar!”
    • 27. “Na última vez quepeguei nesse negócio, nós passamos uma semana para corrigí-lo.”
    • 28. @dudumendesTDD
    • 29. @dudumendesEntão o que é TDD
    • 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. @dudumendesO ciclo básico do TDD F Fazer um código Escrever um passar no testeteste unitário que falha Refatorar
    • 32. @dudumendesred / green / refactor
    • 33. @dudumendes Feedback do TDD•Implementação •Funciona?•Projeto •Está bem elaborado?
    • 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. @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. @dudumendesBenefícios resumo•O projeto evolui constatemente•O projeto está sobre constante revisão •qualidade de código •fraco acoplamento •alta coesão
    • 37. @dudumendesRegra de Ouro do TDD “Nunca codifique uma funcionalidade nova sem um teste falhando”
    • 38. @dudumendesNíveis de teste
    • 39. Testes preparar Unitários Componente  “resetar” testado  de   executar maneira   isolada validar
    • 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. @dudumendes Por onde começar?• Por onde começa um projeto?
    • 42. @dudumendesRegra de Ouro do TDD “Nunca codifique uma funcionalidade nova sem um teste falhando”
    • 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. @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. Processo de SoftwareRequisitos Projeto Implementa Teste Evolução
    • 46. Processo de Software com TDD Projeto Implementa Teste
    • 47. Processo de Software com TDD Projeto Teste Implementa
    • 48. Processo de Software com TDD Projeto Teste Implementa Teste
    • 49. TDD ProjetoTeste Teste Implementa
    • 50. TDD ProjetoTeste Teste Implementa
    • 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. TDDProjeto Teste
    • 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. TDD TesteImplementa
    • 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. TDDTeste Implementa
    • 57. TDDTeste Verifique se o teste passou
    • 58. TDD ProjetoTeste E tudo de novo! Teste Implementa
    • 59. @dudumendesEntendi! Já sei! TDD é um método para testar software
    • 60. @dudumendesPEINNNNN!!!!!
    • 61. @dudumendes TDD éum método*para construir software*método: abordagem repetítivel - ciclo para solucionar um determinado problema - aprendizado