Orientações gerais para testes de desempenho
Conteúdo |
INTRODUÇÃO
Testes de desempenho têm a função de verificar se o sistema alvo atende aos requisitos de desempenhos especificados. Além disso, permitem avaliar características não funcionais do sistema relacionadas, como capacidade, vazão e tempo de resposta [1]. Contudo, o objetivo do teste de desempenho é o mesmo de qualquer outro teste, que é o mesmo da prória disciplina de Engenharia de Software: entregar produto de qualidade. E qualidade, do ponto de vista do usuário, além dos aspectos funcionais, certamente inclui a velocidade de resposta para as operações realizadas no sistema. Apesar disso, testes de desempenho frequentemente deixam de ser realizados, fadando inclusive sistemas bug free ao fracasso pela baixa percepção de qualidade por parte dos usuários.
PREMISSAS
Executar testes de desempenho é uma ativiade complexa e, por consequência, bastante onerosa ao processo de desenvolvimento. Contudo, são inúmeras as vantagens colhidas de testes bem executados [2] [3]. Esta complexidade está relacionada principalmente às atividades necessárias antes da execução propriamente dita dos testes de desempenho. Este capítulo descreve algumas destas atividades e como elas contribuem para o sucesso do processo de teste.
Funções testadas
Sabe-se que testar é uma atividade estatística. Raramente é possível testar um sistema de grande porte em sua totalidade, por conta da quantidade de combinações possíveis para todas as funções existentes: testes infinitos têm custos também infinitos. Neste cenário, é preciso encontrar um ponto de equilíbrio em que se teste o máximo possível usando a menor quantidade possível de recursos. Para isso é necessário definir quais funções são críticas e devem ser alvo dos testes de desempenho. Isso porque provavelmente nem todas as funções são críticas em relação ao desempenho. Por exemplo, no PJe, os CRUDs de tabelas básicas provavelmente não possuem restrição forte com relação ao tempo de resposta. Já a consulta processual é um caso que provavelmente possui este requisito. Logo, é necessário definir quais funções serão alvo dos testes de desempenho.
Definição de indicadores
Como apresentado na introdução deste documento, testes de desempenho têm a função de verificar se o sistema alvo atende aos requisitos de desempenho especificados. Para tanto, é necessário definir estes requisitos. É preciso definir, para cada função eleita, consideradas suas características, qual o requisito de desempenho esperado. É uma definição de Acordo de Nível de Serviço (ANS) para cada uma das funções e para o sistema como um todo. Isso pode ser feito considerando as diversas dimensões do teste de desempenho: vazão, capacidade e tempo de resposta. Contudo, do ponto de vista do usuário, o principal componente é a velocidade de resposta. Desta forma, parece coerente definir um ANS para o tempo de resposta das funções críticas do sistema.
Um estudo apresenta alguns indicadores com base na percepção humana considerando suas aspirações e limitações [4]. Os números apresentados no estudo não levam em consideração as características específicas de cada aplicação web, contudo, é importante levá-los em consideração especialmente porque refletem o sentimento do usuário, a sua percepção de qualidade do site que está sendo utilizado.
Com base neste estudo, há dois aspectos a serem considerados: a) não é razoável esperar que o tempo de resposta sempre esteja dentro dos valores definidos nos indicadores, ou seja, pode-se considerar aceitável que uma pequena parcela das requisições tenham tempo de resposta superior ao limite estabelecido; b) como já mencionado, deve-se levar em consideração as características da aplicação alvo do teste na definição dos indicadores.
Com relação ao item a, é aceita uma definição chamada 90 percentile response time, que diz que 90% das requisições devem ter o tempo de resposta dentro dos parâmetros estabelecidos [5]. Outros estudos apontam que, para aplicações web, comumente é aceito o percentual de 95% para a definição dos ANS de tempo de resposta [6] [7].
Com relação ao item b, considerando válida a afirmação de que sistemas diferentes podem ter tempos de resposta diferentes, é comumente aceito que sistemas online onde usuários fazem múltiplas tarefas simultaneamente o tempo de resposta seja menor que 1 segundo em 90% das requisições [8].
REFERÊNCIAS
1. IEEE. Guide to the Software Engineering Body of Knowledge. IEEE Computer Society, 2014. Disponível em http://www.computer.org/web/swebok.
2. Teste de desempenho: Conceitos, Objetivos e Aplicação: [9]
3. Teste de desempenho: http://www.testar.me/#!teste-de-performance/c1oeb
4. Tempos de resposta em Websites: http://www.nngroup.com/articles/website-response-times
5. Performance & Load Testing: http://www.quotium.com/performance/90-percentile-response-time/
6. Response time metric for SLA: https://perfwork.wordpress.com/2012/04/09/response-time-metric-for-sla/
7. Run performance tests on your app: https://msdn.microsoft.com/en-us/library/ms404705.aspx
8. Teste de desempenho: Conceitos, Objetivos e Aplicação: http://www.linhadecodigo.com.br/artigo/3256/teste-de-desempenho-conceitos-objetivos-e-aplicacao-parte-1.aspx
JMeter: http://jmeter.apache.org
Tempos de resposta: 3 limites importantes: http://www.nngroup.com/articles/response-times-3-important-limits/