Quem nunca ouviu as frases “o sistema está lento”, “o sistema está uma carroça” ou “estamos com problemas de performance”?

Mas o que exatamente está lento? Qual funcionalidade? Qual operação? Qual o tempo de resposta ideal para o ponto sinalizado?
Quando precisamos atuar em algum problema de performance no software, como garantir que as alterações estão atendendo a necessidade do cliente? Como testamos a performance?
O teste de performance é bem mais amplo do que só trabalhar com alto volume de registros ou acessos simultâneos e validar o tempo“antes\depois”. É necessário entender qual tipo de teste de performance é indicado para a sua necessidade, qual tempo de resposta é esperado para aquela funcionalidade e como a alteração pode influenciar na regra de negócio da aplicação. Além disso, é necessário pensar na melhor estratégia de teste antes do teste de performance ser realizado.
O objetivo dessa sequência de postagens será abordar quais estratégias e quais pontos precisam ser avaliados antes de começar a testar performance.
Que tal começar com alguns conceitos?
O que é performance
“... significa realização, feito, façanha ou desempenho.
A palavra performance vem do verbo em inglês "to perform" que significa realizar, completar, executar ou efetivar.”[1]
Em tecnologia, refere-se ao desempenho da aplicação, o tempo de resposta para executar uma operação de forma satisfatória, garantindo também que a aplicação seja escalável.
O que é escalabilidade
“Indica sua capacidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer.” [2]
Por exemplo, isto pode se referir à capacidade de um sistema em suportar um aumento de carga total quando os recursos, principalmente de hardware, são requeridos.

Sendo assim, ao aumentar a carga, um sistema escalável garante que seu processamento continuará compatível ao processamento em estado normal.
O que é teste de performance
“Ato ou processo de realizar algo; atuação, desempenho”
[4]
É um teste não funcional com o objetivo de medir a capacidade e o desempenho do processamento do software diante de alto volume ou quantidade de usuários trabalhando simultaneamente no sistema. Mede a escalabilidade da aplicação, analisando o comportamento do software diante de situações que exigem grande processamento.

Teste de Performance [5]
Quando se fala em teste de performance, é necessário conhecer a arquitetura de sua aplicação para identificar qual o tipo de teste de performance é mais adequado aplicar. Entender a necessidade do negócio também é importante, inclusive, para que na etapa de criação de ambiente e de execução, as simulações sejam mais próximas de um ambiente real de produção.
Quais são os tipos de teste de performance?
Teste de Carga ou Volume: É utilizado para identificar o limite da aplicação, qual o máximo de processamento que pode suportar trabalhando com cargas acima do normal, seja para quantidade de acessos simultâneos ou quantidade de operações\transações processadas com grande volume.
Para isso, antes dos testes começarem, define-se quais métricas serão coletadas e analisadas. A mais comum é o throughput, que é a taxa de transferência do processamento. Por exemplo, quantos registros foram processados por segundo, conceito usado bastante para redes, mas existe também o tempo de resposta, consumo de CPU e memória. É preciso conhecer essas métricas em condições normais para efeitos de comparação e análise das métricas quando o processamento validado for acima do normal.
Teste de Capacidade: O teste de capacidade medirá as questões listadas no testes de carga citado acima, porém considera um intervalo de tempo pré-determinado para essas medições.
Teste de Stress: É utilizado para verificar o comportamento do sistema em um processamento acima do limite das cargas normais, validar o pior cenário, o pico, onde muitos recursos de hardware são requeridos. Avaliar como o sistema se comporta trabalhando acima do limite e como ele se restabelece após uma queda ao ultrapassar a capacidade de processamento do hardware.
Um exemplo simples para solidificar os conceitos: imagine como cenário a quantidade de maçãs que uma criança pode ingerir.
No teste de carga, vamos avaliar em um estado normal quantas maçãs ela come e qual o tempo gasto para consumir essas maçãs e, gradativamente, aumentamos a quantidade, de forma que seja acima do normal que está habituada a ingerir, e medimos o tempo que ela gasta para comê-las.
O teste de capacidade avaliaria isso em um range de tempo, uma hora ou um dia, por exemplo, quantas maçãs são consumidas por ela em 30 minutos, por exemplo, no estado em que a criança está ingerindo mais maçãs do que está habituada a comer.
O testes de stress, dado esse cenários e com a expectativa de negócio, mediria para um pior cenário, um pico de muita fome, quantas maçãs a criança consumiria. E, se ela tivesse uma indigestão, qual seu comportamento para se recompor e continuar ingerindo as maçãs. Agora ficou fácil, certo?

Por que eu deveria testar performance?
É um requisito não funcional importante e muitas vezes a receita da empresa está envolvida nessa variável. Seja para aplicações críticas com risco de perdas de vendas ou insatisfação do cliente final no tempo de resposta ou a necessidade de processamento de alto volume para processos delicados com grande valor para empresa. O fato é que os clientes estão mais exigentes e a concorrência está mais acirrada.
Como começar?
Na próxima postagem falaremos um pouco sobre a estratégia de teste de performance.
Quais são as primeiras dúvidas que surgem? Como buscar as informações? Quais pontos são importantes considerar? Definição de ambiente de teste, ferramentas, priorização, uma série de dicas de como estruturar seus testes de performance de acordo com a vivência em um projeto em que o foco era performance.
Quando comecei a explorar mais esse “mundo de testes de performance”, encontrei muito material voltado para aplicações Web, o desafio era, diante das informações encontradas, “como filtrá-las para o tipo de aplicação que trabalharei?”.
Importante frisar que um planejamento tanto na distribuição de dados quanto no conhecimento na arquitetura do sistema para definição da melhor ferramenta são fundamentais. Não se esqueça de definir sua estratégia de teste. Faça todo levantamento e definição necessária no começo do projeto para minimizar o risco de abordagens erradas que possam comprometer sua entrega.
Vamos por partes, step by step, estruturando os testes de performance.
Te vejo na próxima postagem?
Referências [1] https://www.significados.com.br/performance/ [2] https://pt.wikipedia.org/wiki/Escalabilidade [3] https://www.shutterstock.com/image-illustration/cute-cartoon-turtle-rocket-jetpack-funny-518763184 [4] http://michaelis.uol.com.br/busca?r=0&f=0&t=0&palavra=performance [5] https://vertigo.com.br/como-escolher-aplicacao-de-monitoramento-de-performance-correta/ [6] https://pt.wikipedia.org/wiki/Teste_de_carga [7] https://www.softwaretestingclass.com/what-is-performance-testing/ Links [1] http://www.challenge-ti.com/testes-nao-funcionais.php