otimizando integrações com testes de colaboração e contrato
DESCRIPTION
Palestra que ministrei no Agile Vale, em 19 de agosto de 2011TRANSCRIPT
@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
INTEGRAÇÃO
http://www.edge-ka.com/uploads/Image/BioRails/collaboration.jpg
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