Imagine a seguinte situação: você está em casa assistindo à televisão e vê um anúncio de uma loja online dizendo que há uma liquidação com descontos de até 80%. Imagine também que aquele produto que você tanto queria comprar também foi anunciado na promoção.

Você pega seu celular o mais rápido possível, digita a URL da loja (ou dá um Google), tenta acessá-la e então… o site não carrega! Você atualiza a página pensando que o problema é com a sua conexão, mas você continua vendo apenas o ícone de loading rodando e nada mais. Até que você se cansa de ficar esperando e desiste da compra.

A situação acima é mais comum do que você imagina e é um clássico exemplo de problemas de performance que afetam diversas aplicações web no mundo todo.

Uma das maneiras mais eficazes para a identificação e prevenção desses problemas é a realização de testes de performance. A seguir, vamos apresentar os principais conceitos relacionados a esse tipo de teste e como ele pode ajudar seu site.

Performance, desempenho, carga ou stress?

Existe uma confusão de conceitos em relação aos testes de performance no mercado, onde muitas vezes os termos “performance”, “desempenho”, “carga” e “stress” são empregados de forma diferente. De maneira geral, todos esses termos fazem referência a testes que irão medir a performance de uma aplicação, porém cada um deles utiliza métodos diferentes para alcançar esse objetivo.

O termo “performance“ vem do francês antigo parformance (fazer, concluir) e foi incorporado à língua inglesa como “to perform” (realizar, completar). No âmbito da qualidade de software, quando uma medição de performance é realizada, o objetivo é entender como o software performa durante a realização de determinada tarefa, geralmente em termos de escalabilidade, recuperação de falhas e estabilidade. No Brasil, também é comum utilizarmos o termo desempenho.

Nesse artigo, vamos usar as classificações sugeridas pelo International Software Testing Qualifications Board (ISTQB), que utiliza como base a norma ISO 25000, o guia “Performance Testing Guidance for Web Applications” da Microsoft e o livro “The Art of Application Performance Testing: From Strategy to Tools”, do especialista em performance Ian Molyneaux.

Teste de performance (ou teste de desempenho) é um termo genérico para qualquer tipo de teste que tenha como foco a análise de performance de um sistema. Consiste em simular, num ambiente controlado e monitorado, um volume de transações ou usuários simultâneos, a fim de verificar como as aplicações, serviços, servidores, gateways e demais componentes da infraestrutura irão se comportar e se atenderão aos requisitos de desempenho definidos.

Os testes de performance são divididos em tipos, de acordo com seu objetivo. Os tipos mais comuns são:

Teste de carga

Tipo de teste de performance que tem como objetivo verificar o desempenho de um sistema quando este é submetido a cargas variáveis de usuários ou transações. Por exemplo, podemos executar um teste de carga em uma aplicação web simples, partindo de 100 usuários simultâneos e adicionar novos usuários a cada 5 minutos, totalizando 1000 usuários ao final do teste. Dessa maneira, é possível analisar como todo o ecossistema da aplicação se comporta nesse período, se houve lentidão em algum momento do teste, se o uso CPU e memória dos servidores ficou dentro do limite estabelecido, dentre outros indicadores de desempenho.

Teste de capacidade

Parecido com o teste de carga, esse tipo de teste tem como objetivo identificar os limites da aplicação, ou seja, quantos usuários simultâneos ou chamadas por segundo a aplicação é capaz de suportar dentro dos parâmetros de qualidade definidos.

Teste de stress

Tem como objetivo verificar a performance de um sistema quando este é submetido a cargas que estão no limite ou acima do limite especificado inicialmente. Ou seja, se é especificado que a aplicação deve suportar 1000 usuários simultâneos, o teste de stress aplica cargas a partir deste valor. Dessa maneira, é possível coletar informações de como a aplicação se comporta em condições extremas, muitas vezes com poucos recursos computacionais disponíveis, identificar se há indisponibilidades no servidor ou se ocorre lentidão que pode prejudicar a experiência do usuário final.

O ISTQB também classifica os testes de performance em testes de escalabilidade (foco na capacidade do sistema de escalar, sem perder performance), testes de resistência (foco em verificar a performance em longos períodos de tempo) e testes de concorrência (foco em jornadas com concorrência por recursos).

Como testes de performance podem ajudar meu site ou aplicação web?

Melhorar a taxa de conversão

Segundo estudo da Akamai em 2017, um delay de 100 milissegundos no carregamento das páginas de um e-commerce acarreta em uma queda de até 2,4% na taxa de conversão em plataformas desktop e 7,1% em plataformas mobile.

Gráfico da Akamai mostrando a perda de conversão quando um site demora 0,1 segundo, 1 segundo e 2 segundos para carregar, considerando mobile e desktop.

Fonte: The State of Online Retail Performance – Akamai and Soasta (2017). Adaptado.

Verificar a saúde atual da performance das suas aplicações

Saber como sua aplicação está hoje ajuda a criar uma baseline de tempos de resposta. Dessa maneira, fica fácil saber quando houve uma nova implementação que passou a degradar a performance.

Além disso, muitos problemas de performance só ficam visíveis quando o sistema está sob estresse. Com os resultados coletados durante o teste, os responsáveis pela aplicação podem identificar os gargalos que impactam na performance de todo o ecossistema, seja de software, hardware ou configuração.

Ajudar no dimensionamento da infraestrutura quando há previsão de crescimento no volume de acessos

Se sua empresa está preparando uma grande promoção ou vai participar da Black Friday, é importante estar preparado para um grande volume de acessos.

Leia mais: saiba como ajudamos a Netshoes a dimensionar corretamente sua infraestrutura para a Black Friday de 2019

Certificar que a aplicação atende a requisitos mínimos de desempenho

Existem aplicações em que o tempo de resposta é um elemento crucial. Em aplicações financeiras que possuem comunicação com a bolsa de valores, por exemplo, os investidores desejam que suas transações de compra e venda sejam processadas o mais rápido possível, sob pena de perderem grandes oportunidades.

Além disso, muitas empresas e o próprio governo exigem que o software atenda a requisitos mínimos de desempenho antes de realizarem uma aquisição, e essa validação pode ser realizada através de testes de performance.

Auxiliar na tomada de decisão

Testes de performance podem oferecer insumos para a tomada de decisão sobre diversos elementos da aplicação e do negócio. Por exemplo:
identificar se o balanceamento de carga está ocorrendo de maneira correta ou se há problemas na configuração;

  • ajustar o tamanho do pool de conexões, de modo a otimizar o acesso às instâncias de banco de dados;
  • identificar se há superdimensionamento da infraestrutura, gerando gastos desnecessários;
  • realizar uma previsão de investimento para novos servidores, caso seja identificado um subdimensionamento da infraestrutura.

Quais as principais métricas coletadas em um teste de performance?

Os testes de performance coletam diversas métricas que, ao serem cuidadosamente analisadas, geram indicadores de desempenho para a aplicação. As métricas são coletadas, principalmente, através das seguintes ferramentas:

  • Ferramentas de geração de carga: a maioria das ferramentas que faz a simulação da carga de usuários também fornece métricas de tempo de resposta por requisição, taxa de erros e a quantidade de requisições com sucesso por segundo. O JMeter é um exemplo de ferramenta de geração de carga open source bastante conhecida.
  • Ferramentas de monitoramento e APM (Application Performance Management): essenciais para a análise detalhada da performance, essas ferramentas monitoram diretamente a aplicação e a infraestrutura, oferecendo métricas sobre transações, threads, consultas de banco de dados, tempos de resposta, vazão, logs de erros, uso de CPU, memória e rede dos servidores. Exemplos dessas ferramentas são o New Relic e o Dynatrace.

Para gerar indicadores válidos, o especialista em testes de performance realiza um cruzamento das métricas coletadas, a fim de identificar os gargalos e pontos de melhoria. É importante observar que os indicadores devem ser analisados em conjunto, a fim de que sejam evitados falsos-positivos (que geram custos de infraestrutura desnecessários) ou falsos-negativos (onde os problemas de performance não são identificados).

Uma métrica comum coletada nos testes de performance é o tempo de resposta das requisições. Se o tempo de resposta de uma requisição está alto, pode significar que essa requisição possui um problema de desempenho. Porém, essa métrica deve ser analisada em conjunto com outras métricas coletadas, como o uso de recursos dos servidores (uso de CPU, memória, rede), pois recursos insuficientes costumam impactar diretamente o tempo das requisições.

Após a análise de performance, os seguintes indicadores podem ser fornecidos:

  • diagnóstico de transações e consultas de banco de dados, cuja otimização pode melhorar a performance geral da aplicação;
  • tempo de resposta da aplicação e suas requisições;
  • dados de uso de rede, memória e outras informações relevantes de infraestrutura.

Manter a performance de uma aplicação em baixas e altas demandas depende de um processo de qualidade contínuo. As medições regulares de performance oferecem insumos para a tomada de decisão dos gestores, além de aumentar a confiança da equipe de desenvolvimento em relação às suas entregas.

Nos próximos artigos, vamos entender melhor os perigos de uma análise de performance mal feita e seus impactos na aplicação e nos negócios.