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

Preview:

Citation preview

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 testes API: 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 min UI: 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 min API: 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.