introdução ao tdd

45
Introdução ao TDD Desenvolvimento Guiado por Testes Breno Martinusso [email protected] breno.virtoo.com @martinusso Magno Machado [email protected] blog.magnomachado.com.br @magnomp Palestrantes:

Upload: breno-martinusso

Post on 05-Dec-2014

2.866 views

Category:

Technology


0 download

DESCRIPTION

Uma introdução ao Desenvolvimento Guiado por Testes

TRANSCRIPT

Page 1: Introdução ao TDD

Introdução ao TDD

Desenvolvimento Guiado por Testes

Breno Martinusso [email protected] breno.virtoo.com @martinusso

Magno Machado [email protected]

blog.magnomachado.com.br @magnomp

Palestrantes:

Page 2: Introdução ao TDD

Organização da apresentação

1. A metodologia TDD

2. Construção de Casos de

Testes

Page 3: Introdução ao TDD

O que é TDD?

“TDD = Test-First + Design Incremental” Kent Beck

Page 4: Introdução ao TDD

Test-first

Escrever testes antes da implementação:

• Faz você pensar no comportamento • Reduz código especulativo • Documenta

Page 5: Introdução ao TDD

Test-first

Escrever testes antes da implementação:

• Faz você pensar no comportamento • Reduz código especulativo • Documenta

Page 6: Introdução ao TDD

Test-first

Escrever testes antes da implementação:

• Faz você pensar no comportamento • Reduz código especulativo • Documenta

Page 7: Introdução ao TDD

Test-first

Escrever testes antes da implementação:

• Faz você pensar no comportamento • Reduz código especulativo • Documenta

Page 8: Introdução ao TDD

Design incremental

• Adição de novas funcionalidades em

pequenos passos

• O conceito chave de TDD é ter um

feedback rápido das mudanças no

código

Page 9: Introdução ao TDD

Design incremental

• Adição de novas funcionalidades em

pequenos passos

• O conceito chave de TDD é ter um

feedback rápido das mudanças no

código

Page 10: Introdução ao TDD

Mantra do TDD

RED

GREEN

REFACTOR

Page 11: Introdução ao TDD

RED

Escreva um teste que falhe

Page 12: Introdução ao TDD

GREEN

Faça o teste passar

Page 13: Introdução ao TDD

REFACTOR

Refatore

Page 14: Introdução ao TDD

As 3 leis

Propostas por Robert C. Martin, também conhecido como Uncle Bob.

Page 15: Introdução ao TDD

Primeira lei

Antes de escrever qualquer código de

produção, você deve escrever um

teste unitário que falha.

Page 16: Introdução ao TDD

Segunda lei

Você deve parar de escrever o teste unitário

assim que ele falhar. Não compilar é uma falha.

Page 17: Introdução ao TDD

Terceira lei

Você deve parar de escrever código de

produção assim que os testes falhos passarem.

Page 18: Introdução ao TDD

Mock Object

Page 19: Introdução ao TDD

Mock Object

• Gera resultados não determinísticos (hora, temperatura atual...);

• Tem estados que são difíceis de criar ou reproduzir (erro de

comunicação da rede);

• É lento (um banco de dados completo que precisa ser inicializado

antes do teste);

• Ainda não existe ou pode ter comportamento alterado;

• Teriam que adicionar informações e métodos exclusivamente

para os testes (e não para sua função real).

Page 20: Introdução ao TDD

Mock Object

• Gera resultados não determinísticos (hora, temperatura atual...);

• Tem estados que são difíceis de criar ou reproduzir (erro de

comunicação da rede);

• É lento (um banco de dados completo que precisa ser inicializado

antes do teste);

• Ainda não existe ou pode ter comportamento alterado;

• Teriam que adicionar informações e métodos exclusivamente

para os testes (e não para sua função real).

Page 21: Introdução ao TDD

Mock Object

• Gera resultados não determinísticos (hora, temperatura atual...);

• Tem estados que são difíceis de criar ou reproduzir (erro de

comunicação da rede);

• É lento (um banco de dados completo que precisa ser inicializado

antes do teste);

• Ainda não existe ou pode ter comportamento alterado;

• Teriam que adicionar informações e métodos exclusivamente

para os testes (e não para sua função real).

Page 22: Introdução ao TDD

Mock Object

• Gera resultados não determinísticos (hora, temperatura atual...);

• Tem estados que são difíceis de criar ou reproduzir (erro de

comunicação da rede);

• É lento (um banco de dados completo que precisa ser inicializado

antes do teste);

• Ainda não existe ou pode ter comportamento alterado;

• Teriam que adicionar informações e métodos exclusivamente

para os testes (e não para sua função real).

Page 23: Introdução ao TDD

Mock Object

• Gera resultados não determinísticos (hora, temperatura atual...);

• Tem estados que são difíceis de criar ou reproduzir (erro de

comunicação da rede);

• É lento (um banco de dados completo que precisa ser inicializado

antes do teste);

• Ainda não existe ou pode ter comportamento alterado;

• Teriam que adicionar informações e métodos exclusivamente

para os testes (e não para sua função real).

Page 24: Introdução ao TDD

Alguns equívocos

• Escrever testes após o código de

produção

• TDD é sobre testes

Page 25: Introdução ao TDD

Alguns equívocos

• Escrever testes após o código de

produção

• TDD é sobre testes

Page 26: Introdução ao TDD

Por que utilizar TDD?

• Reduz o tempo com depuração; • Incentiva a simplicidade; • Aumenta a confiança no código; • Provê uma documentação interna; • Cria um design no sistema com

baixo acoplamento.

Page 27: Introdução ao TDD

Por que utilizar TDD?

• Reduz o tempo com depuração; • Incentiva a simplicidade; • Aumenta a confiança no código; • Provê uma documentação interna; • Cria um design no sistema com

baixo acoplamento.

Page 28: Introdução ao TDD

Por que utilizar TDD?

• Reduz o tempo com depuração; • Incentiva a simplicidade; • Aumenta a confiança no código; • Provê uma documentação interna; • Cria um design no sistema com

baixo acoplamento.

Page 29: Introdução ao TDD

Por que utilizar TDD?

• Reduz o tempo com depuração; • Incentiva a simplicidade; • Aumenta a confiança no código; • Provê uma documentação interna; • Cria um design no sistema com

baixo acoplamento.

Page 30: Introdução ao TDD

Por que utilizar TDD?

• Reduz o tempo com depuração; • Incentiva a simplicidade; • Aumenta a confiança no código; • Provê uma documentação interna; • Cria um design no sistema com

baixo acoplamento.

Page 31: Introdução ao TDD

Eu não quero usar TDD por quê:

• “Vai demorar muito mais”

• “A funcionalidade é fácil, não precisa de

teste”

• “Não sei como testar” ou “Isso não dá para

testar”

Page 32: Introdução ao TDD

Eu não quero usar TDD por quê:

• “Vai demorar muito mais”

• “A funcionalidade é fácil, não precisa de

teste”

• “Não sei como testar” ou “Isso não dá para

testar”

Page 33: Introdução ao TDD

Eu não quero usar TDD por quê:

• “Vai demorar muito mais”

• “A funcionalidade é fácil, não precisa de

teste”

• “Não sei como testar” ou “Isso não dá para

testar”

Page 34: Introdução ao TDD

Eu faço TDD. Preciso testar?

Mas é claro que SIM!

Page 35: Introdução ao TDD

Organização da apresentação

1. A metodologia TDD

2. Construção de Casos de

Testes

Page 36: Introdução ao TDD

E na prática,

como fica?

Page 37: Introdução ao TDD

Um pequeno exemplo

Estamos desenvolvendo um software para atender a uma loja. Um dos

requisitos é que o sistema não aceite vendas parceladas para clientes que tenham o nome sujo na praça, exceto

se um gerente da loja autorizar a transação.

Page 38: Introdução ao TDD

E agora?

Vamos precisar de uma classe de

validação de vendas! Como desenvolvê-la?

Page 39: Introdução ao TDD

Dividir para conquistar!

Page 40: Introdução ao TDD

Uma venda parcelada para um cliente com nome sujo deve ser

liberada caso haja autorização de um gerente.

Page 41: Introdução ao TDD

Uma venda parcelada para um cliente com nome sujo não deve ser

liberada caso não haja permissão de um gerente.

Page 42: Introdução ao TDD

Uma venda parcelada para um cliente com nome limpo deve ser

liberada sem solicitar permissão de um gerente.

Page 43: Introdução ao TDD

Uma venda não parcelada deve ser liberada sem consultar o crédito e

sem solicitar permissão de um gerente.

Page 44: Introdução ao TDD
Page 45: Introdução ao TDD

Obrigado!

Referências:

• Test-driven development: by example [Kent Beck]

• Growing Object-Oriented Software, Guided by Tests [Steve

Freeman]

Breno Martinusso [email protected] breno.virtoo.com @martinusso

Magno Machado [email protected]

blog.magnomachado.com.br @magnomp