otimizando integrações com testes de colaboração e contrato

82
@snit_ram OTIMIZANDO INTEGRAÇÕES COM TESTES DE COLABORAÇÃO E CONTRATO http://www.flickr.com/photos/viasualart2011/5941136672/sizes/l/in/photostream/

Upload: rafael-martins

Post on 26-Jun-2015

577 views

Category:

Technology


1 download

DESCRIPTION

Palestra que ministrei no Agile Vale, em 19 de agosto de 2011

TRANSCRIPT

Page 1: Otimizando Integrações com testes de Colaboração e Contrato

@snit_ram

OTIMIZANDO INTEGRAÇÕES COM TESTES DE COLABORAÇÃO E CONTRATO

http://www.flickr.com/photos/viasualart2011/5941136672/sizes/l/in/photostream/

Page 2: Otimizando Integrações com testes de Colaboração e Contrato

TEORIA DAS FILAS

http://www.flickr.com/photos/57665680@N06/5649865356/sizes/l/in/photostream/

Page 3: Otimizando Integrações com testes de Colaboração e Contrato

TEORIA DAS FILAS

Dado um processo B, que sucede um processo A, as vezes, ao executar B,

precisamos refazer parte de A. Podemos evitar este retrabalho extraindo parte de B e executando-o antes do processo A

Page 4: Otimizando Integrações com testes de Colaboração e Contrato

TEORIA DAS FILAS

A B

Page 5: Otimizando Integrações com testes de Colaboração e Contrato

TEORIA DAS FILAS

A B20%

Page 6: Otimizando Integrações com testes de Colaboração e Contrato

TEORIA DAS FILAS

B A

Cicloscurtos

Page 7: Otimizando Integrações com testes de Colaboração e Contrato

REVENDO O WATERFALL

http://www.flickr.com/photos/chiaralily/4416226801/sizes/z/in/photostream/

Page 8: Otimizando Integrações com testes de Colaboração e Contrato

Requisitos

Análise

Design

Código

Testes

Manutenção

REVENDO O WATERFALL

Page 9: Otimizando Integrações com testes de Colaboração e Contrato

Código Teste

Page 10: Otimizando Integrações com testes de Colaboração e Contrato

Código

Bugs

Teste

Page 11: Otimizando Integrações com testes de Colaboração e Contrato

Teste Código

Cicloscurtos

Page 12: Otimizando Integrações com testes de Colaboração e Contrato

Teste

CódigoDesign

Page 13: Otimizando Integrações com testes de Colaboração e Contrato

Teste

CódigoDesign

“Não testável”

Page 14: Otimizando Integrações com testes de Colaboração e Contrato

Teste Código

Design

CiclosCurtos

Page 15: Otimizando Integrações com testes de Colaboração e Contrato

Teste Código

Design

CiclosCurtos

= TDD

Page 16: Otimizando Integrações com testes de Colaboração e Contrato

Teste Código

Design

Análise

Page 17: Otimizando Integrações com testes de Colaboração e Contrato

Teste Código

Design

Análise

“Não era isso que eu queria”

Page 18: Otimizando Integrações com testes de Colaboração e Contrato

Teste Código

DesignAnálise

CiclosCurtos

Page 19: Otimizando Integrações com testes de Colaboração e Contrato

Teste Código

DesignAnálise

CiclosCurtos

= Agile

Page 21: Otimizando Integrações com testes de Colaboração e Contrato

A B

Page 22: Otimizando Integrações com testes de Colaboração e Contrato

ATeste Código B

Page 23: Otimizando Integrações com testes de Colaboração e Contrato

ATeste Código BTeste Código

Page 24: Otimizando Integrações com testes de Colaboração e Contrato

ATeste Código BTeste Código

Page 25: Otimizando Integrações com testes de Colaboração e Contrato

ATeste Código BTeste Código

Integração

Page 26: Otimizando Integrações com testes de Colaboração e Contrato

ATeste Código BTeste Código

Integração

BUGS

Page 27: Otimizando Integrações com testes de Colaboração e Contrato

WTF?

Page 28: Otimizando Integrações com testes de Colaboração e Contrato

Teste

CódigoIntegração

Page 29: Otimizando Integrações com testes de Colaboração e Contrato

“quando juntei deu erro”

Teste

CódigoIntegração

Page 30: Otimizando Integrações com testes de Colaboração e Contrato

O QUE?

Page 31: Otimizando Integrações com testes de Colaboração e Contrato

Teste Código

Integração

Cicloscurtos

Page 32: Otimizando Integrações com testes de Colaboração e Contrato

COMO?

Page 33: Otimizando Integrações com testes de Colaboração e Contrato

TESTES DE COLABORAÇÃO E CONTRATO

http://www.flickr.com/photos/25143703@N04/2491903629/sizes/m/in/photostream/

Page 34: Otimizando Integrações com testes de Colaboração e Contrato

2 3

4 5 6 7

8 9

1

COMO FUNCIONA

Page 35: Otimizando Integrações com testes de Colaboração e Contrato

51

Contrato

Testes de

Colaboração

Testes de

Contrato

COMO FUNCIONA

Page 36: Otimizando Integrações com testes de Colaboração e Contrato

5Mock

1

Colaboração

Fiz a pergunta certa?

Sei tratar a resposta?

COMO FUNCIONA

Page 37: Otimizando Integrações com testes de Colaboração e Contrato

5

Contrato

Sou capaz de responder?

Respondo como esperado?

COMO FUNCIONA

Page 38: Otimizando Integrações com testes de Colaboração e Contrato

Contraato

COMO FUNCIONA

5

Contrato

Sou capaz de responder?

Respondo como esperado?

1

Fiz a pergunta certa?

Sei tratar a resposta?

Colaboração

Page 39: Otimizando Integrações com testes de Colaboração e Contrato
Page 40: Otimizando Integrações com testes de Colaboração e Contrato

Correspondência

entre testes

Page 41: Otimizando Integrações com testes de Colaboração e Contrato

TheCoffee Maker

EXEMPLO REAL

https://github.com/snit-ram/contract-tests-lab

Page 42: Otimizando Integrações com testes de Colaboração e Contrato

THE COFFEE MAKER

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 43: Otimizando Integrações com testes de Colaboração e Contrato

Init

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 44: Otimizando Integrações com testes de Colaboração e Contrato

InitInit

Init

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 45: Otimizando Integrações com testes de Colaboração e Contrato

InitOn

On

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 46: Otimizando Integrações com testes de Colaboração e Contrato

Fill

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 47: Otimizando Integrações com testes de Colaboração e Contrato

Fillfill

f ill

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 48: Otimizando Integrações com testes de Colaboração e Contrato

FillOff

Off

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 49: Otimizando Integrações com testes de Colaboração e Contrato

Make coffee

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 50: Otimizando Integrações com testes de Colaboração e Contrato

Make coffee

Make coffee

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 51: Otimizando Integrações com testes de Colaboração e Contrato

Make coffee

has?

has?

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 52: Otimizando Integrações com testes de Colaboração e Contrato

Make coffee

y/n

y/n

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 53: Otimizando Integrações com testes de Colaboração e Contrato

Make coffee

exception

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 54: Otimizando Integrações com testes de Colaboração e Contrato

Make coffee

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

get

get

Page 55: Otimizando Integrações com testes de Colaboração e Contrato

Make coffee

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

DispenserGive

Give

Page 56: Otimizando Integrações com testes de Colaboração e Contrato

Make coffeehas?

has?

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 57: Otimizando Integrações com testes de Colaboração e Contrato

Make coffeeOn

On

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Page 58: Otimizando Integrações com testes de Colaboração e Contrato

Make coffee

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispensercoffee

Page 59: Otimizando Integrações com testes de Colaboração e Contrato

CoffeeMakerWater

DispenserMock

has(5)

True

COLABORAÇÃO

Page 60: Otimizando Integrações com testes de Colaboração e Contrato

CoffeeMakerWater

DispenserMock

has(5)

True

has(5)

CoffeeMakerWater

DispenserMock

False

COLABORAÇÃO

Page 61: Otimizando Integrações com testes de Colaboração e Contrato

WaterDispenser

has(5)amount=5

assertTrue()

CONTRATO

Page 62: Otimizando Integrações com testes de Colaboração e Contrato

WaterDispenser

has(5)amount=5

assertTrue()

has(5)

WaterDispenser

amount=2

assertFalse()

CONTRATO

Page 63: Otimizando Integrações com testes de Colaboração e Contrato

WaterDispenser

LedMock

assertFalse( led.on.called )

COLABORAÇÃOget(5)

amount=10

Page 64: Otimizando Integrações com testes de Colaboração e Contrato

WaterDispenser

LedMock

assertFalse( led.on.called )

COLABORAÇÃOget(5)

amount=10

assertTrue( led.on.called )

WaterDispenser

LedMock

get(5)

amount=5

Page 65: Otimizando Integrações com testes de Colaboração e Contrato

Led

on()

assertTrue( self.is_on )

CONTRATO

Page 66: Otimizando Integrações com testes de Colaboração e Contrato

Led

on()

assertTrue( self.is_on )

off()

Led

assertFalse( self.is_on )

CONTRATO

Page 67: Otimizando Integrações com testes de Colaboração e Contrato

POR QUE?

Page 68: Otimizando Integrações com testes de Colaboração e Contrato

Integração durante o fluxo de TDD

Page 69: Otimizando Integrações com testes de Colaboração e Contrato

Integração durante o fluxo de TDD

Feedback mais rápido

Page 70: Otimizando Integrações com testes de Colaboração e Contrato

Integração durante o fluxo de TDD

Feedback mais rápido

Continuous integration

Page 71: Otimizando Integrações com testes de Colaboração e Contrato

Contratos sólidos

Page 72: Otimizando Integrações com testes de Colaboração e Contrato

Contratos sólidos

Reduz bugs / retrabalho

Page 73: Otimizando Integrações com testes de Colaboração e Contrato

Contratos sólidos

Colaborações transparentes

Reduz bugs / retrabalho

Page 74: Otimizando Integrações com testes de Colaboração e Contrato

Contratos sólidos

Colaborações transparentes

Reduz bugs / retrabalho

Aumenta paralelismo

Page 75: Otimizando Integrações com testes de Colaboração e Contrato

Reduz testes integrados

Page 76: Otimizando Integrações com testes de Colaboração e Contrato

Reduz testes integrados

Suite mais rápida

Page 77: Otimizando Integrações com testes de Colaboração e Contrato

Reduz testes integrados

Suite mais rápida

Menos código para manter

Page 78: Otimizando Integrações com testes de Colaboração e Contrato

Reduz testes integrados

Suite mais rápida

Menos código para manter

Trabalho focado

Page 79: Otimizando Integrações com testes de Colaboração e Contrato

Outside-in Development

Page 80: Otimizando Integrações com testes de Colaboração e Contrato

Outside-in Development

Design simples

Page 81: Otimizando Integrações com testes de Colaboração e Contrato

Outside-in Development

Código independente

Design simples