introdução ao tdd

61
@dudumendes Desenvolvimento Baseado em Testes Eduardo Mendes de Oliveira [email protected]

Upload: eduardo-mendes-de-oliveira

Post on 27-Jun-2015

609 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Introdução ao TDD

@dudumendes

DesenvolvimentoBaseado em Testes

Eduardo Mendes de [email protected]

Page 2: Introdução ao TDD

@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

@dudumendes

Introdução

Page 4: Introdução ao TDD

@dudumendes

Processo de Software

Especificação Projeto  e  Implementação

Validação Evolução

Page 5: Introdução ao TDD

@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

@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

@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

@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

@dudumendes

Incremento + Feedback

analisarprojetar

implementarimplantar

feedback

CICLO

Page 10: Introdução ao TDD

@dudumendes

Ciclos no Processo de Software

•Testes de unidade

•Testes de aceitação

•Reuniões diárias

•Releases

Page 11: Introdução ao TDD

@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

@dudumendes

Page 13: Introdução ao TDD

@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

@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

@dudumendes

Densenvolvimento

em um primeiro momento só existiam 02 fases

Manutenção

Ciclo de vida do software

15

Page 16: Introdução ao TDD

@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

@dudumendes

Espiral da morte

menos testes mais problemas

menos tempo

Page 18: Introdução ao TDD

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

Consequências

DensenvolvimentoManutenção

Page 20: Introdução ao TDD

Consequências

TDDTest Driven Development

Page 21: Introdução ao TDD

Consequências

TDDTest Driven Design

Page 22: Introdução ao TDD

TDD

• “Test-driven developmentis a way of managing fear during programming.”

Kent Beck

Page 23: Introdução ao TDD

TDD

• “Desenvolvimento baseado em testes é uma forma de administrar o medo durante a programação.”

Kent Beck

Page 24: Introdução ao TDD

“Alguém sabe o que isso faz?”

Page 25: Introdução ao TDD

“Eu acho que não temos nenhuma documentação

para isso!”

Page 26: Introdução ao TDD

“Se eu mudar X provalvementeY vai quebrar!”

Page 27: Introdução ao TDD

“Na última vez que peguei nesse negócio,

nós passamosuma semana

para corrigí-lo.”

Page 28: Introdução ao TDD

@dudumendes

TDD

Page 29: Introdução ao TDD

@dudumendes

Então o que éT D D

Page 30: Introdução ao TDD

@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

@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

@dudumendes

red / green / refactor

Page 33: Introdução ao TDD

@dudumendes

Feedback do TDD

•Implementação

•Funciona?

•Projeto

•Está bem elaborado?

Page 34: Introdução ao TDD

@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

@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

@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

@dudumendes

Regra de Ouro do TDD

“Nunca codifique uma funcionalidade nova

sem um teste falhando”

Page 38: Introdução ao TDD

@dudumendes

Níveis de teste

Page 39: Introdução ao TDD

Componente  testado  de  maneira  isolada

preparar

executar

validar

“resetar”

TestesUnitários

Page 40: Introdução ao TDD

@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

@dudumendes

Por onde começar?

• Por onde começa um projeto?

Page 42: Introdução ao TDD

@dudumendes

Regra de Ouro do TDD

“Nunca codifique uma funcionalidade nova

sem um teste falhando”

Page 43: Introdução ao TDD

@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

@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

Processo de Software

Requisitos

Projeto

Implementa

Teste

Evolução

Page 46: Introdução ao TDD

Processo de Software com TDD

Projeto

Implementa

Teste

Page 47: Introdução ao TDD

Processo de Software com TDD

Projeto

Implementa

Teste

Page 48: Introdução ao TDD

Processo de Software com TDD

Projeto

Implementa

Teste

Teste

Page 49: Introdução ao TDD

TDD

Projeto

Implementa

TesteTeste

Page 50: Introdução ao TDD

TDD

Projeto

Implementa

TesteTeste

Page 51: Introdução ao TDD

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

TDD

Projeto

Teste

Page 53: Introdução ao TDD

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

TDD

Implementa

Teste

Page 55: Introdução ao TDD

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

TDD

Implementa

Teste

Page 57: Introdução ao TDD

TDD

Teste Verifique se o teste passou

Page 58: Introdução ao TDD

TDD

Projeto

Implementa

TesteTeste E tudo de novo!

Page 59: Introdução ao TDD

@dudumendes

Entendi!Já sei! TDD é um método

para testar software

Page 60: Introdução ao TDD

@dudumendes

PEINNNNN!!!!!

Page 61: Introdução ao TDD

@dudumendes

um método*para construir software

*método:

abordagem repetítivel - ciclo

para solucionar um determinado problema - aprendizado

TDD é