desenvolvimento dirigido por testes (tdd) - … · desenvolvimento dirigido por testes (tdd) cursos...

32
Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010 www.agilcoop.org.br Hugo Corbucci

Upload: truongdiep

Post on 25-Sep-2018

234 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Desenvolvimento Dirigido por Testes (TDD)

Cursos de Verão 2010

www.agilcoop.org.br

Hugo Corbucci

Page 2: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 2

O que é Desenvolvimento Dirigido por Testes?

Entenderam?

Page 3: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 3

Testes a priori

● Conhecer design● Testar● Implementar

● Consequência: Testes não são esquecidos devido a falta de tempo, pressão ou estresse, etc

Page 4: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 4

O que é Desenvolvimento Dirigido por Testes?

“Código limpo que funciona” -- Ron Jeffries

Page 5: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 5

O que é Desenvolvimento Dirigido por Testes?

● Ciclo em passos pequenos:

1.Escreva um teste que falha

1.Faça o teste passar rapidamente

1.Refatore

Page 6: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 6

Demonstração: Poker!

Page 7: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 7

Linguagem: Ruby

● Definindo uma classe: class MinhaClasse end● Delimitador de métodos: def meuMetodo end● Contrutor: def initialize end● Criando uma instância: Classe.new● Verificando um tipo de instância: x.kind_of? Y● Constantes: LETRA_MAIUSCULA = ...● Variaveis de instância: @variavel● Falso: false e nil● Equals (true ou false): 1 == 1 (== true)

Page 8: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 8

+ Linguagem: Ruby

● Getters/Setters: attr_reader e attr_accessor– Exemplo: attr_reader :variavel

● Métodos booleanos: metodo?● CompareTo (-1, 0, 1): <=>● Append (add): lista << elemento● Mapas: { chave => valor }● Alguns métodos auxiliares:

– each_cons(inteiro)

– string[indice, quantidade]: “abcd”[2,2] (= “cd”)

each_cons(2)

Page 9: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 9

Arcabouço de Teste: rSpec

● describe Classe do ... end● it “frase” do end● kind_of? => be_kind_of● dois_pares? => be_dois_pares● variavel.should● variavel.should_not

Page 10: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 10

Poker Simplificado

● Cartas: '2C 3E 4P 5O DO', '2E JE QO KE AP'● Dois jogadores, 5 cartas (ordenadas) cada um● Regras:

– Maior carta (Jogo simples)

– Par

– 2 Pares

– Trinca

Page 11: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 11

O que o programa deve fazer

● Entrada: 2 jogadores, 5 cartas cada um– Recebe as cartas como strings ordenadas por valor

– Exemplo: '5O DC ... ' e '6E JP ...'

● Saída: quem venceu entre as duas mãos– Responde Jogo1 ou Jogo2

Page 12: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 12

Cartas

● Cartas

● Valores: de 2 a 9, D é 10, J, Q, K, A● Exemplos: 2C 3E 4P 5O DO JE QO KE AP

Valor

Naipe

C (copas)

P (paus)

O (ouros)

E (espadas)

● Naipes

Page 13: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 13

Jogos

● Cada jogo tem 5 cartas

● Exemplo: '2E 5P 7C 8E DO'● Existem diversos tipos de jogos, e queremos

saber compará-los de acordo com as regras

Page 14: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 14

Carta mais alta

● '2E 5P 7C 8E DO'● Vale a carta mais alta: 10● Desempate pelo valor das cartas

Page 15: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 15

Maior Simples contra Menor Simples

Page 16: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 16

Simples contra Simples Repetindo Maior

Page 17: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 17

Simples contra Simples: Empate

Page 18: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 18

Contornando dificuldades

● Fugindo das dependências:– Mocks

– Stubs

● Refatorar testes para reduzir custo de manutenção

Page 19: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 19

Limitações

● Testes lentos– Estresse

– Carga

– Integração

– etc.

● Desenvolvimento de algoritmos “ótimos”

Page 20: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 20

Conclusão

● O Código:– Nome dos testes definem o comportamento

esperado

– Fatorados (sem duplicação)

– Alta cobertura

– Evita código inútil

– Alta qualidade do código● Refatorações são seguras com testes automatizados

Page 21: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 21

Perguntas

?Hugo Corbucci

[email protected]

Page 22: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 22

Maior Par contra Menor Par

Page 23: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 23

Par contra Par com Par Igual

Page 24: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 24

Par contra Par: Empate

Page 25: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 25

Menor Par contra Maior Simples

Page 26: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 26

Maior Dois Pares contra Menor Dois Pares

Page 27: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 27

Dois Pares contra Dois Pares com Dois Pares Iguais

Page 28: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 28

Dois Pares contra Dois Pares: Empate

Page 29: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 29

Menor Dois Pares contra Maior Par

Page 30: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 30

Menor Trinca contra Maior Dois Pares

Page 31: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 31

Referências

● Livros:● Kent Beck, “Test-Driven Development: By Example”,

Addison-Wesley Professional, 2002

● David Astels, “Test Driven Development: A Practical Guide”, Prentice Hall PTR, 2003

● Martin Fowler et al, “Refactoring: Improving the Design of Existing Code”, Addison-Wesley Professional, 1999

● Joshua Kerievsky, “Refactoring to Patterns”, Addison-Wesley, 2004

Page 32: Desenvolvimento Dirigido por Testes (TDD) - … · Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2010  Hugo Corbucci

Copyleft AgilCoop 2010 32

Referências

● Online:● www.testdriven.com

● www.xprogramming.com

● www.agilcoop.org.br

● www.katacasts.com