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

Post on 26-Jun-2015

578 views 1 download

description

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

Transcript of 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/

TEORIA DAS FILAS

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

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

TEORIA DAS FILAS

A B

TEORIA DAS FILAS

A B20%

TEORIA DAS FILAS

B A

Cicloscurtos

REVENDO O WATERFALL

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

Requisitos

Análise

Design

Código

Testes

Manutenção

REVENDO O WATERFALL

Código Teste

Código

Bugs

Teste

Teste Código

Cicloscurtos

Teste

CódigoDesign

Teste

CódigoDesign

“Não testável”

Teste Código

Design

CiclosCurtos

Teste Código

Design

CiclosCurtos

= TDD

Teste Código

Design

Análise

Teste Código

Design

Análise

“Não era isso que eu queria”

Teste Código

DesignAnálise

CiclosCurtos

Teste Código

DesignAnálise

CiclosCurtos

= Agile

A B

ATeste Código B

ATeste Código BTeste Código

ATeste Código BTeste Código

ATeste Código BTeste Código

Integração

ATeste Código BTeste Código

Integração

BUGS

WTF?

Teste

CódigoIntegração

“quando juntei deu erro”

Teste

CódigoIntegração

O QUE?

Teste Código

Integração

Cicloscurtos

COMO?

TESTES DE COLABORAÇÃO E CONTRATO

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

2 3

4 5 6 7

8 9

1

COMO FUNCIONA

51

Contrato

Testes de

Colaboração

Testes de

Contrato

COMO FUNCIONA

5Mock

1

Colaboração

Fiz a pergunta certa?

Sei tratar a resposta?

COMO FUNCIONA

5

Contrato

Sou capaz de responder?

Respondo como esperado?

COMO FUNCIONA

Contraato

COMO FUNCIONA

5

Contrato

Sou capaz de responder?

Respondo como esperado?

1

Fiz a pergunta certa?

Sei tratar a resposta?

Colaboração

Correspondência

entre testes

TheCoffee Maker

EXEMPLO REAL

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

THE COFFEE MAKER

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Init

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

InitInit

Init

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

InitOn

On

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Fill

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Fillfill

f ill

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

FillOff

Off

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Make coffee

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Make coffee

Make coffee

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Make coffee

has?

has?

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Make coffee

y/n

y/n

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Make coffee

exception

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Make coffee

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

get

get

Make coffee

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

DispenserGive

Give

Make coffeehas?

has?

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Make coffeeOn

On

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispenser

Make coffee

CoffeeMaker

WaterDispenser

Led

Led

Ground Coffee

Dispensercoffee

CoffeeMakerWater

DispenserMock

has(5)

True

COLABORAÇÃO

CoffeeMakerWater

DispenserMock

has(5)

True

has(5)

CoffeeMakerWater

DispenserMock

False

COLABORAÇÃO

WaterDispenser

has(5)amount=5

assertTrue()

CONTRATO

WaterDispenser

has(5)amount=5

assertTrue()

has(5)

WaterDispenser

amount=2

assertFalse()

CONTRATO

WaterDispenser

LedMock

assertFalse( led.on.called )

COLABORAÇÃOget(5)

amount=10

WaterDispenser

LedMock

assertFalse( led.on.called )

COLABORAÇÃOget(5)

amount=10

assertTrue( led.on.called )

WaterDispenser

LedMock

get(5)

amount=5

Led

on()

assertTrue( self.is_on )

CONTRATO

Led

on()

assertTrue( self.is_on )

off()

Led

assertFalse( self.is_on )

CONTRATO

POR QUE?

Integração durante o fluxo de TDD

Integração durante o fluxo de TDD

Feedback mais rápido

Integração durante o fluxo de TDD

Feedback mais rápido

Continuous integration

Contratos sólidos

Contratos sólidos

Reduz bugs / retrabalho

Contratos sólidos

Colaborações transparentes

Reduz bugs / retrabalho

Contratos sólidos

Colaborações transparentes

Reduz bugs / retrabalho

Aumenta paralelismo

Reduz testes integrados

Reduz testes integrados

Suite mais rápida

Reduz testes integrados

Suite mais rápida

Menos código para manter

Reduz testes integrados

Suite mais rápida

Menos código para manter

Trabalho focado

Outside-in Development

Outside-in Development

Design simples

Outside-in Development

Código independente

Design simples