Introdução ao TDD
-
Upload
eduardo-mendes-de-oliveira -
Category
Technology
-
view
609 -
download
0
description
Transcript of Introdução ao TDD
![Page 2: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/2.jpg)
@dudumendes
Agenda•Introdução
•Conceitos de desenvolvimento orientados a testes
•TDD / BDD
•Revisão de Refatoração
•Padrões de teste
•Ferramentas
•Aulas práticas2
![Page 3: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/3.jpg)
@dudumendes
Introdução
![Page 4: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/4.jpg)
@dudumendes
Processo de Software
Especificação Projeto e Implementação
Validação Evolução
![Page 5: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/5.jpg)
@dudumendes
Contexto 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
![Page 6: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/6.jpg)
@dudumendes
•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
Contexto do Processo de Sofware - Cliente
![Page 7: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/7.jpg)
@dudumendes
Processo de SoftwareProcesso 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
![Page 8: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/8.jpg)
@dudumendes
Princípios ágeis fundamentais
•Desenvolvimento incremental
•Envolvimento do cliente
•Pessoas, não processos
•Aceitar as mudanças
•Envolvimento do cliente
![Page 9: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/9.jpg)
@dudumendes
Incremento + Feedback
analisarprojetar
implementarimplantar
feedback
CICLO
![Page 10: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/10.jpg)
@dudumendes
Ciclos no Processo de Software
•Testes de unidade
•Testes de aceitação
•Reuniões diárias
•Releases
![Page 11: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/11.jpg)
@dudumendes
Lidando com a 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
![Page 12: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/12.jpg)
@dudumendes
![Page 13: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/13.jpg)
@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
![Page 14: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/14.jpg)
@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
![Page 15: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/15.jpg)
@dudumendes
Densenvolvimento
em um primeiro momento só existiam 02 fases
Manutenção
Ciclo de vida do software
15
![Page 16: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/16.jpg)
@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
![Page 17: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/17.jpg)
@dudumendes
Espiral da morte
menos testes mais problemas
menos tempo
![Page 18: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/18.jpg)
Abordagens Ágeis
•Kent Beck
Test First✦ Modifica a abordagem
tradicional para modelare analisar
✦ Cria práticas para fornecer apoio ao Test First
Baby Steps
18
![Page 19: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/19.jpg)
Consequências
DensenvolvimentoManutenção
![Page 20: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/20.jpg)
Consequências
TDDTest Driven Development
![Page 21: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/21.jpg)
Consequências
TDDTest Driven Design
![Page 22: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/22.jpg)
TDD
• “Test-driven developmentis a way of managing fear during programming.”
Kent Beck
![Page 23: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/23.jpg)
TDD
• “Desenvolvimento baseado em testes é uma forma de administrar o medo durante a programação.”
Kent Beck
![Page 24: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/24.jpg)
“Alguém sabe o que isso faz?”
![Page 25: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/25.jpg)
“Eu acho que não temos nenhuma documentação
para isso!”
![Page 26: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/26.jpg)
“Se eu mudar X provalvementeY vai quebrar!”
![Page 27: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/27.jpg)
“Na última vez que peguei nesse negócio,
nós passamosuma semana
para corrigí-lo.”
![Page 28: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/28.jpg)
@dudumendes
TDD
![Page 29: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/29.jpg)
@dudumendes
Então o que éT D D
![Page 30: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/30.jpg)
@dudumendes
T D DEscreva um teste ANTESde escrever um código a ser testado
Escreva um código queapenas faça compilar o testee observe o teste funcionando
Refatore para o formato mais simples possível
![Page 31: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/31.jpg)
@dudumendes
O ciclo básico do TDD
Escrever umteste unitário
que falha
Fazer um códigopassar no teste
Fazer um códigopassar no teste
Refatorar
![Page 32: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/32.jpg)
@dudumendes
red / green / refactor
![Page 33: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/33.jpg)
@dudumendes
Feedback do TDD
•Implementação
•Funciona?
•Projeto
•Está bem elaborado?
![Page 34: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/34.jpg)
@dudumendes
Benefí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
![Page 35: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/35.jpg)
@dudumendes
Benefí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
![Page 36: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/36.jpg)
@dudumendes
Benefícios resumo
•O projeto evolui constatemente
•O projeto está sobre constante revisão
•qualidade de código
•fraco acoplamento
•alta coesão
![Page 37: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/37.jpg)
@dudumendes
Regra de Ouro do TDD
“Nunca codifique uma funcionalidade nova
sem um teste falhando”
![Page 38: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/38.jpg)
@dudumendes
Níveis de teste
![Page 39: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/39.jpg)
Componente testado de maneira isolada
preparar
executar
validar
“resetar”
TestesUnitários
![Page 40: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/40.jpg)
@dudumendes
TDDx 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
![Page 41: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/41.jpg)
@dudumendes
Por onde começar?
• Por onde começa um projeto?
![Page 42: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/42.jpg)
@dudumendes
Regra de Ouro do TDD
“Nunca codifique uma funcionalidade nova
sem um teste falhando”
![Page 43: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/43.jpg)
@dudumendes
Por onde começar?
Escrever umteste unitário
que falha
Fazer um códigopassar no teste
Fazer um códigopassar no teste
RefatorarEscrever umteste de aceitação
que falha
![Page 44: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/44.jpg)
@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?
![Page 45: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/45.jpg)
Processo de Software
Requisitos
Projeto
Implementa
Teste
Evolução
![Page 46: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/46.jpg)
Processo de Software com TDD
Projeto
Implementa
Teste
![Page 47: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/47.jpg)
Processo de Software com TDD
Projeto
Implementa
Teste
![Page 48: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/48.jpg)
Processo de Software com TDD
Projeto
Implementa
Teste
Teste
![Page 49: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/49.jpg)
TDD
Projeto
Implementa
TesteTeste
![Page 50: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/50.jpg)
TDD
Projeto
Implementa
TesteTeste
![Page 51: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/51.jpg)
TDD
Projeto
crie uma lista de teste
anote e identifique os testes
seja conciso: uma classe ou método
posteriormente, é possível adicionar mais testes
![Page 52: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/52.jpg)
TDD
Projeto
Teste
![Page 53: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/53.jpg)
TDD
Teste
Escreva o teste primeiro•pense no design•controle o escopo
crie o teste utilizando assertivas•teste o que é esperado e o que não é esperado
![Page 54: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/54.jpg)
TDD
Implementa
Teste
![Page 55: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/55.jpg)
TDD
Implementa
implemente o código que deve ser testado
faça o mínimo e somente o necessáriopara que o teste compile e passe
![Page 56: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/56.jpg)
TDD
Implementa
Teste
![Page 57: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/57.jpg)
TDD
Teste Verifique se o teste passou
![Page 58: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/58.jpg)
TDD
Projeto
Implementa
TesteTeste E tudo de novo!
![Page 59: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/59.jpg)
@dudumendes
Entendi!Já sei! TDD é um método
para testar software
![Page 60: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/60.jpg)
@dudumendes
PEINNNNN!!!!!
![Page 61: Introdução ao TDD](https://reader038.fdocumentos.tips/reader038/viewer/2022110121/558de7a91a28ab2a0c8b45cc/html5/thumbnails/61.jpg)
@dudumendes
um método*para construir software
*método:
abordagem repetítivel - ciclo
para solucionar um determinado problema - aprendizado
TDD é