Testes sintéticos

Uma abordagem que pode antecipar inconsistências em produção

Gabriel Santos
Revista eQAlizando (antiga Revista TSPI)
5 min readOct 22, 2020

--

A imagem mostra uma câmera de segurança em uma zona com árvores.
Technology photo created by onlyyouqj on Freepik

Existem várias maneiras de monitorar o comportamento dos usuários no ambiente de produção, sejam através de ferramentas que coletam dados de uso do sistema, como o Google Analytics ou Hotjar, ou até mesmo ferramentas que avaliam questões de performance da aplicação.

Porém, as estratégias acima são consideradas passivas e não promovem 100% de acurácia na detecção de problemas no ambiente de produção, visto que dependem de usuários reais utilizando a aplicação para que a coleta de feedback ocorra.

Imaginem um cenário em que a indisponibilidade de um módulo da aplicação fosse detectada somente quando um usuário acionasse o suporte para reclamar o ocorrido. Dureza, né?

Os testes sintéticos podem te ajudar a mitigar estas situações e ao longo desse artigo, irei explicar as definições e um case real de sucesso da aplicação desta estratégia.

O que são os testes sintéticos?

Também chamados de “monitoramento sintético”, são basicamente a execução de scripts automatizados em produção, os quais simulam transações de usuários naquele ambiente. Além disso, alguns alertas podem ser criados, caso ocorra alguma situação fora do normal, como o exemplo citado na introdução do artigo, quando um módulo do sistema estava indisponível.

Com o alerta disparado, a equipe responsável por aquele módulo poderia ser acionada e já tomar alguma providência para entender e resolver a indisponibilidade. Nesse cenário, o tempo de reparo foi absurdamente menor, se comparado em relação a quando o próprio cliente reporta o problema, pois a situação foi identificada de forma proativa.

Vários tipos de scripts podem ser criados, em diferentes camadas da aplicação. Neste artigo, publicado no site martinfowler.com, é descrito um case onde o Selenium WebDriver foi utilizado para executar testes sintéticos a cada cinco minutos.

Além da criação dos scripts pelo próprio time responsável pela aplicação como, por exemplo, ferramentas open source, existem várias opções de produto no mercado especializados em monitoramento sintético, a exemplo da Sematext Synthetic .

Monitoramento de Usuários Reais (RUM) x Monitoramento Sintético (STM)

A imagem retrata dois irmãos gêmeos se encarando e sorrindo. O primeiro veste um suéter vermelho e o segundo, um amarelo.
Twin brothers, a vintage photo created by luis_molinero on Freepik

Apesar de semelhantes por serem realizadas em ambiente de produção, estas abordagens apresentam diferenças relevantes.

Real User Monitoring (RUM) ou Monitoramento de Usuários Reais é um tipo de abordagem passiva, pois depende do uso da aplicação pelos próprios usuários para que os dados sejam coletados. A depender do tipo da aplicação, códigos JS são injetados nas páginas para obter informações relacionadas a desempenho e tempos de resposta, os quais são consumidos pela ferramenta de monitoramento.

Além disso, ferramentas como o FullStory também se encaixam dentro do contexto do RUM, pois gravam sessões de uso da aplicação por usuários reais.

Já na abordagem sintética, todo o contexto de uso é controlado, ou seja, as ações executadas são predefinidas e executadas proativamente. Além disso, pelo fato do fluxo ser executado periodicamente, os desenvolvedores ganham feedback rápido a respeito da implementação feita em produção, podendo corrigir possíveis inconsistências antes que os usuários finais as encontrem.

Por que deveríamos utilizar testes sintéticos?

Os testes sintéticos são um agregador de valor ao monitoramento de usuários reais, pois com os dados obtidos em ambas as abordagens, é possível ter uma visão mais ampla do que está acontecendo no ambiente de produção. Além disso, há quatro objetivos principais que podem te auxiliar a decidir se é legal utilizar esta abordagem:

  • Validar se os fluxos de negócio estão funcionando, mesmo que sejam pouco ou raramente utilizados pelo cliente;
  • Antecipação de inconsistências;
  • Coleta de dados em regiões geográficas onde a aplicação não é muito utilizada;
  • Verificar o comportamento da aplicação em dispositivos e plataformas suportados, a fim de identificar algum problema de compatibilidade.

Lembrando que os testes sintéticos devem ser utilizados como uma abordagem complementar a todo tipo de teste que deve ser aplicado antes de um deploy em produção.

Case C6 Bank

No episódio 40 do Hispers on the Road, especialistas da área de qualidade do C6 Bank relataram a experiência da utilização de testes sintéticos, que são focados na experiência do usuário.

Eles relataram que o principal ganho obtido com a implementação do monitoramento sintético foi a velocidade, entregando features já monitoradas, pois os scripts utilizados são reaproveitados dos que já foram criados para realizar os testes em outros ambientes pré-produção. Houve também ganho de velocidade de reação frente aos eventuais problemas que são detectados no monitoramento.

Além disso, eles elencaram outros benefícios:

  • Coleta de dados reais;
  • Feedback rápido para os times;
  • Foco do teste em monitoria, garantindo a informação de que algo quebrou em produção;
  • Antecipação de inconsistências;
  • Medição de dados de infraestrutura, otimizando o escalonamento de servidores.

Os testes foram aplicados no backend da aplicação, sendo executados periodicamente. Eles tiveram de adaptar a execução dos cenários, pois o contexto financeiro envolve normas e regras relacionadas a proteção de dados dos usuário.

Para saber mais detalhes do case, vocês podem ouvir o episódio do podcast neste link.

Os testes sintéticos podem trazer informações valiosas se implementados corretamente, paralelos à monitoração real dos usuários da aplicação. Entretanto, antes de utilizar esta abordagem, é importante verificar se o processo de testes está maduro o suficiente para suportá-la, a exemplo de testes automatizados já serem implementados e gerenciados satisfatoriamente em ambientes pré-produção.

Além do mais, é importante mapear os riscos de implementação, custos computacionais e definir quais métricas serão escolhidas para realizar o monitoramento. Essas informações são insumos para definir os possíveis alertas que serão disparados quando alguma inconsistência for identificada pelos testes.

Vocês já conheciam esta abordagem antes de ler o artigo? Conhecem ou tem alguma experiência que queira compartilhar? Vamos discutir sobre isso nos comentários, pois o assunto é bem interessante! #hugs

Usuário sintético x usuário real by Giphy

Referências

--

--