Qualidade de Software
Micro Serviços
Agenda de hoje
• Arquitetura de Micro Serviços
• Relevância da pirâmide de testes em micro serviços?
• Como garantir comunicação em micro serviços?
• Ambiente de testes em micro serviços
• Testes em produção, blue green e etc
• As 4 métricas fundamentais
Rafael Lima
Quem Sou
• Desde 2003 na área de TI.
Rafael Lima
Quem Sou
• Desde 2003 na área de TI.
• Dev → QA → Líder de Equipe de QA → Dev → QA → Líder de Equipe Dev → QA/Dev
Rafael Lima
Quem Sou
• Desde 2003 na área de TI.
• Dev → QA → Líder de Equipe de QA → Dev → QA → Líder de Equipe Dev → QA/Dev
• Bacharel em Ciências da Computação
Rafael Lima
Quem Sou
• Desde 2003 na área de TI.
• Dev → QA → Líder de Equipe de QA → Dev → QA → Líder de Equipe Dev → QA/Dev
• Bacharel em Ciências da Computação
• Desde 2010 com automação de testes
Rafael Lima
Quem Sou
• Desde 2003 na área de TI.
• Dev → QA → Líder de Equipe de QA → Dev → QA → Líder de Equipe Dev → QA/Dev
• Bacharel em Ciências da Computação
• Desde 2010 com automação de testes
• 7 anos na ThoughtWorks Brasil (Consultor Sênior e Lead)
• 4 anos trabalhando para um cliente no Vale do Silício
• 1 ano a frente de um programa de capacitação para consultores juniores
Rafael Lima
Quem Sou
• Desde 2003 na área de TI.
• Dev → QA → Líder de Equipe de QA → Dev → QA → Líder de Equipe Dev → QA/Dev
• Bacharel em Ciências da Computação
• Desde 2010 com automação de testes
• 7 anos na ThoughtWorks Brasil (Consultor Sênior e Lead)
• 4 anos trabalhando para um cliente no Vale do Silício
• 1 ano a frente de um programa de capacitação para consultores juniores
• 1+ ano na TransferWise em Londres como Desenvolvedor de Software em Testes
• Micro Serviços
• Times autônomos com cultura devops
• Média de 100+ deploys para produção por dia
Rafael Lima
Contato
https://github.com/rafalima/
https://github.com/qa-ops
https://br.linkedin.com/in/rafaelplima
https://youtube.com/c/QaOps
Micro Serviços
Monolito
Serviços
BD BD BD
REST API
Serviços
BD
REST API
Serviços
REST API
Micro Serviços
Serviços
BD
REST API
Serviços
REST API
Serviços
REST API
BD
Micro Serviços
Serviços
BD
REST API
Serviços
REST API
Serviços
REST API
Serviços
REST API
BD
BD
Micro Serviços
Serviços
BD
REST API
Serviços
REST API
Serviços
REST API
Serviços
REST API
BD
BD
Micro Serviços
Fila
Serviços
REST API
Serviços
Micro Serviços
Micro Serviços
Micro Serviços
https://martinfowler.com/bliki/MicroservicePrerequisites.html
• Provisionamento rápido
Micro Serviços
https://martinfowler.com/bliki/MicroservicePrerequisites.html
• Provisionamento rápido

• Monitoração e Observação
Micro Serviços
https://martinfowler.com/bliki/MicroservicePrerequisites.html
• Provisionamento rápido

• Monitoração e Observação

• Instalações(Deploys) rápidas
As 4 métricas fundamentais
https://cloud.google.com/devops/state-of-devops
1. Deployment Frequency
2. Lead Time for Changes
3. Change Failure Rate
4. Time to Restore Service
Pirâmide de Testes
Pirâmide de Testes
Pirâmide Ideal
- Mesma imagem do primeiro slide da Pirâmide Ideal
Pirâmide de Testes
Pirâmide Ideal
+int
+iso
$$$
¢
- Mesma imagem do primeiro slide da Pirâmide Ideal
Será que a pirâmide é relevante
para micro serviços?
Qual objetivo da pirâmide de
testes?
Parecer (feedback) rápido
Preciso me preocupar em qual camada
da pirâmide de testes escrever meus
testes em micro serviços?
Escrever o teste que julga necessário, independente
da pirâmide.
Se importar somente com o tempo total da suite.
Comunicação entre Micro
Serviços
Teste de Contrato
{
"id": 10,
"nome": "Lela",
"categoria": {
"id": 1,
"nome": "Cachorro"
},
"fotoUrls": [
“www.foto.com“
],
"estado": "disponível"
}
Teste de Contrato
public class Animal {
private int id;
private String nome;
private Categoria categoria;
private String estado;
private List<String> fotoUrls;
public class Categoria {
private int id;
private String nome;
}
}
{
"id": 10,
"nome": "Lela",
"categoria": {
"id": 1,
"nome": "Cachorro"
},
"fotoUrls": [
“www.foto.com“
],
"estado": "disponível"
}
Teste de Contrato
A
Teste de Contrato
C
Teste de Contrato
Teste de Contrato Teste de Contrato
B
D
Teste de Contrato Baseado no Consumidor
Teste de Contrato Baseado no Consumidor
Repo
Provedor
Teste de Contrato Baseado no Consumidor
Repo
Provedor
Consumidor 1
Teste de Contrato Baseado no Consumidor
Repo
Provedor
Consumidor 1 Consumidor 2
Teste de Contrato Baseado no Consumidor
Repo
Provedor
Consumidor 1 Consumidor 2 Provedor
Teste de Contrato Baseado no Consumidor
Repo
Provedor
Consumidor 1 Consumidor 2 Provedor
Consumidor 100
Qual o problema dessa
abordagem?
Que outras formas de
comunicação posso usar?
gRPC
Biblioteca
Biblioteca
List<Animal> animais = lojaAnimais.pegarAnimais('disponível')
Biblioteca
List<Animal> animais = lojaAnimais.pegarAnimais('disponível')
public enum EstadoAnimal {
DISPONIVEL,
DELETADO,
EM_ESPERA;
}
public enum EstadoAnimal {
DISPONIVEL,
DELETADO,
EM_ESPERA
EM_TRANSITO;
}
V2 V3
Como garantir as versões da
biblioteca ou classe de parse?
Ambiente de testes em
micro serviços
Quantos ambientes uma equipe
precisa?
Ambientes de Testes
DEV
Ambientes de Testes
DEV QA
Ambientes de Testes
DEV QA ShowCase
Ambientes de Testes
DEV QA ShowCase Pre-Prod
Ambientes de Testes
DEV QA ShowCase Pre-Prod Prod
É sustentável todos esses
ambientes?
E quando você tem 400+ micro
serviços e 500+ engenheiros?
Solução Antiga
Staging
Sistema A
Solução Antiga
Staging
Sistema A
Sistema B
Solução Antiga
Staging
Sistema A
Sistema B Sistema C
Solução Antiga
Staging
Sistema A
Sistema B Sistema C
Sistema A
Staging tava sempre quebrado
Criamos uma solução própria,
chamada Custom Environment
Staging ainda é usado hoje em
dia
Testes em Produção
Devemos fazer testes em Prod?
Smoke Testes com dinheiro real
Também fazemos Canary
Releases
Canary Release
100%
Canary Release
75%
25%
Canary Release
100%
Qual a diferença entre Canary
Release e Blue Green ?
Blue Green
Blue Green
Mínimo de 25% é muito alto já
Melhoria do Canary Release
E as feature toggle?
Feature Toggle (Alternar funcionalidades)
IF (PromocaoPascoa.ON)
Preço = R$5,00
ELSE
Preço = R$15,00
Teste A/B
IF (Cidade == BH)
Testa Nova UI
ELSE
Mantém UI antiga
Obrigado
• Youtube: https://www.youtube.com/c/qaops
• Linkedin: https://www.linkedin.com/in/rafaelplima/
Referências
• http://martinfowler.com/bliki/MicroservicePrerequisites.html
• https://cloud.google.com/devops/state-of-devops
• https://www.oreilly.com/library/view/accelerate/9781457191435/
• https://learning.oreilly.com/library/view/continuous-delivery-reliable/9780321670250/
• https://samnewman.io/books/building_microservices/

Qualidade de Software em Micro Serviços