4 dicas valiosas para uma
pirâmide de testes saudável
The Developer's Conference 2016
Taíse Dias @taisedias
Ricardo Cavalcanti @r_caval
Pirâmide de
testes
UI
Service
Unit
Mike Cohn:
Succeeding with
Agile
UI
Service
Unit
UI
Service
Unit
UI
Service
Unit
UNITÁRIO
Aumento de
escopo
Mais confiança
Mais rápido
Melhor
isolamento
UI
SERVIÇO
Sam Newman:
Building
Microservices
Fonte: Crispin, Lisa; Gregory, Janet. Agile Testing
Testes
manuais
Testes
de UI
Testes de aceitação
(API)
Testes unitários /
testes de componente
Lisa Crispin,
Janet Gregory:
Agile Testing
Recomendações
Separar testes unitários
dos de aceitação.
Projeto W: arquitetura
Web Service
Middle tier
Web Service Web Service
Projeto W: pirâmide
80 testesAPI: Serviço isolado
API: Serviço
integrado com outros
serviços
110 testes,
20 suites em paralelo,
2.5 min
Unitários
1922
testes,
5.5 min
Contrato do Serviço
Integração
1842 testes
40 testes, 9.3 min
1922 testes
(unitários + API)
5.5 min
Projeto W
Web Service Web Service
Projeto G: arquitetura
UI
Middle tier
Web Service
Projeto G: pirâmide
610 testes, 4 min
Unitários: UI
API: Serviço
integrado com outros
serviços
UI
120 testes, 3 min
738 testes, 8 min
Unitários: Serviço
Unitários: Middle tier
1754 testes, 27 seg
881 testes, 19 seg
1296 testes, 13 seg
3931 testes,
59 seg
5 testes, 1.5 minUI: isolado
5 testes, 6 min
10 testes, 7.5 min
API: Serviço isolado
API: Contrato do Serviço 8 testes, 1 min
1922 testes
(unitários + API)
5.5 min
versus
Projeto W
3931 testes
unitários
59 seg
Projeto G
Quase o dobro de testes em menos de 20% do tempo
Para promover feedback mais rápido.
Separar testes unitários
dos de aceitação.
Não adiar
implementação de
jornada do usuário.
Web Service
Projeto E: arquitetura
Cluster spark
com 3 apps
Cluster spark
com 1 app
Projeto E: pirâmide
58 testes, 1 min
Unitários: Serviço 137 testes, 52 seg
API
Unitários: Cluster com 3 apps
Unitários: Cluster com 1 app 65 testes, 55 seg
123 testes, 64 seg
E2E: Cluster com 3 apps 6 testes, 1.5 min
202 testes
2.8 seg
64 testes
2.5 min
Projeto T: arquitetura
Aplicação Rails
Projeto T: pirâmide
9 testes
9 seg
Unitários
Integração
116 testes
25 seg
UI
9 testes
4 seg
Não adiar
implementação de
jornada do usuário.
Quando for adicionar novos testes, checar se faz
sentido incrementar uma jornada de usuário
também para não acumular como dívida
O topo da pirâmide traz
confiança sobre o
funcionamento.
UNITÁRIO
Aumento de
escopo
Mais confiança
Mais rápido
Melhor
isolamento
UI
SERVIÇO
Sam Newman:
Building
Microservices
UI
Service
Unit
O topo da pirâmide traz
confiança sobre o
funcionamento.
Porém esses testes não guiam o design do novo
sistema e são mais difíceis de manter no longo
prazo
Provedor e consumidor
devem poder iniciar os
testes de contrato.
Testes de Contrato
❏ Teste de integração que garante que um provedor de
serviço cumpre o contrato com o consumidor
1. Consumidor define expectativas
consumer provider
pact
2. Expectativas verificadas no provedor
consumer provider
pact
Projeto P: pirâmide
396 testes, 3 minAPI: Serviço isolado
API: Serviço
integrado com outros
serviços
9 testes, 7 min
409 testes, 10+ min
Unitários
1835 testes, 18 seg
API: Contrato do Serviço 4 testes, 30 seg
Web Service
Web Service
UI
Web Service
Projeto P: arquitetura
Web Service
Provedor e consumidor
devem poder iniciar os
testes de contrato.
Quando somente o provedor executa a
verificação do contrato, parece que apenas ele é a
causa da quebra.
Resumo
34
Separar os testes unitários dos testes de aceitação.
Não adiar implementação da jornada do usuário.
Testes no topo da pirâmide trazem mais confiança.
Provedor e consumidor devem poder iniciar os
testes de contrato.
Perguntas?
Taíse Dias @taisedias
Ricardo Cavalcanti @r_caval
Referências
❏  Crispin, Lisa; Gregory, Janet. Agile Testing: A Practical Guide for Testers
and Agile Teams.
❏  Fowler, Martin. Test Pyramid.
❏  Fowler, Martin. Component Test.
❏  Fowler, Martin. Broad Stack Test.
❏  Fowler, Martin. Integration Contract Test.
❏  Newman, Sam. Building Microservices.

TheDevConf 2016 - 4 dicas valiosas para uma piramide de testes saudavel