introdução a tdd

26
Test Driven Development Desenvolvimento Orientado por Testes Daniel Capó Sobral

Upload: daniel-sobral

Post on 18-Nov-2014

883 views

Category:

Technology


0 download

DESCRIPTION

Introduz TDD, situando em relação aos diversos tipos de testes existentes.

TRANSCRIPT

Page 1: Introdução a TDD

Test Driven DevelopmentDesenvolvimento Orientado por Testes

Daniel Capó Sobral

Page 2: Introdução a TDD

Teste é testeOu não?

Page 3: Introdução a TDD

Taxonomias• Funcional• Não

Funcional

Objeto de teste

• Automático

• Manual

Execução

• Caixa Preta

• Caixa Branca

• Caixa Cinza

Informação sobre o sistema

• Exploratório

• Pré-definido

Planejamento

• Teste Primeiro

• Teste por Último

Momento de escrita

• Qualitativo• Quantitativ

o

Resultado

• Estático (tipos, provas)

• Dinâmico

Execução do código testado

• Estado• Interação

Comportamento observado

• Verificação• Validação

Contratado vs Desejado

• TDD• ATDD• BDD

Técnica de Escrita

Page 4: Introdução a TDD

NíveisEscopo do Objeto Testado

Unit Testing

Integration Testing

System Testing

System Integration Testing

Page 5: Introdução a TDD

NíveisObjetivo do Teste

Beta

Alpha

Aceitação

Regressão

Smoke Test

Page 6: Introdução a TDD

Não funcionalPerformance Carga Usabilidade

SegurançaInternacionalizaç

ãoe Localização

Destrutivo

Compatibilidade Escalabilidade etc

Page 7: Introdução a TDD

Tá, mas e os testes de TDD?“In test-driven development a developer creates automated unit tests” – wikipedia

Page 8: Introdução a TDD

O que é TDD?

Técnica de Desenvolvimento

de Software

Teste Primeiro

Teste Unitário

Automatizado

TDD é sobre como escrever código de aplicação.

TDD não é sobre como escrever testes!

Page 9: Introdução a TDD

Porque não fazer TDD?

• Como escrever testes?• Como escrever código testável?• Como usar as ferramentas?• Como se faz TDD?

Curva de Aprendizado Íngreme:

• Mais linhas de código• Interrupções constantes

Menor Produtividade

• Mais código, mais manutenção• Mudanças de arquitetura quebram testes!• Mudanças de comportamento quebram testes!

Maior Custo de Manutenção

Page 10: Introdução a TDD

Porque fazer TDD?

• Confiança para efetuar mudanças• Testes resguardam contra regressão

Menor Custo de Manutenção

• YAGNI! (You Ain’t Gonna Need It!) significa menos desperdício

• Menos tempo corrigindo bugs: estava funcionando a cinco minutos atrás!

Maior Produtividade

• Mais testes leva a menos bugs• Testes unitários compreensivos resultam em baixo

acoplamento

Maior Qualidade

Page 11: Introdução a TDD

O que dizem os estudos?Maio

r Qualidade

?

• Inconclusivo• Boa correlação, mas...• Isolamento

• TDD ou outras práticas ágeis?• TDD ou número de testes?

• Mais testes levam a menos bugs? Confirmado.• Curva de aprendizado íngreme dificulta grupos de controle

E a Produtividade

?

• Inconclusivo• Conforme estudo, melhor, pior ou indiferente

Page 12: Introdução a TDD

Mas escrever um teste unitário parece simples...Famous last words.

Page 13: Introdução a TDD

Dificuldades

Onde começar?

O que testar?

O que não testar?

Quanto se testar de cada vez?

Que nome dar aos testes?

Como entender porque o

teste falhou?Como separar uma unidade de

suas dependência

s?

Fonte: Introducing BDD, Dan North

Page 14: Introdução a TDD

O que é um bom teste unitário?

Deve ser fácil de implementar.

Deve ser automatizável e reproduzível de forma confiável.

Qualquer um deve ser capaz de executá-lo, sem setups complicados.

Deve ser executável com um simples click.

Deve executar rapidamente.

Uma vez escrito, deve ser preservado para uso futuro.

Fonte: The Art of Unit Testing, Roy Osherove

Page 15: Introdução a TDD

Teste (automatizado) é Código

Em outras palavras, deve receber as mesmas atenções que o código da aplicação!

Atenção comManutenção Qualidade Legibilidade Refatoração Code Rot

Arcabouço, Armação, AndaimeAjuda a construir Removido ao fim da

construção

Mas software sem manutenção é software

morto!

Page 16: Introdução a TDD

Removendo dependências: Fakes

Stubs

Teste de estado

Mocks

Teste de Interação

Asserções

Espelhamento

Como?Injeção de Dependências

Page 17: Introdução a TDD

Ainda demora muito para chegar no TDD?

Page 18: Introdução a TDD

Três leis de TDD

Você não pode escrever código de aplicação mais do que o suficiente para fazer um teste

unitário passar.

Você não pode escrever código de teste mais do que o necessário para falhar; falhar compilação

também conta.

Você não pode escrever código de aplicação exceto para fazer passar um teste unitário.

Segundo Robert Martin

Page 19: Introdução a TDD

Três fases de TDDVermelho• Escrever

código de teste para evidenciar falha

Verde• Escrever

código de aplicação para corrigir falha

Azul• Refactoring

de código (aplicação e testes)

Page 20: Introdução a TDD

Fluxo de TDDEscrever teste

Escrever aplicação

Refatoração(aplicação e testes)

Falhou?

Passou?

Sim

Não

NãoSim

Executa teste

Executa teste

Passou?

Executa teste

Sim

NãoSim

Page 21: Introdução a TDD

Muito estranho! Como funciona isso na prática?

Page 22: Introdução a TDD

DemonstraçãoJogo de BolicheRegras:

10 jogadas (frames)1 ou 2 arremessos por jogada (1ª à 9ª)2 ou 3 arremessos na 10ª jogada10 pinos

1 ponto por pino derrubadoSpare – 10 pinos derrubados em 2 arremessos

10 pontos + próximo arremessoStrike – 10 pinos derrubados em 1 arremesso

10 pontos + 2 próximos arremessos

Page 23: Introdução a TDD

Diagrama de ClasseTODO

Page 24: Introdução a TDD

Escrevendo o código com TDDTODO

Page 25: Introdução a TDD

That’s all, folks!Discutir!

Page 26: Introdução a TDD

ReferênciasClean Coders (Robert Martin)Making Software: What Really Works, and

Why We Believe It (Andy Oram & Greg Wilson)

The Art of Unit Testing: with Examples in .Net (Roy Osherove)

Introducing BDD (Dan North)Wikipedia (duh!)Test Driven Development: By Example (Kent

Beck)