Automtech

Blog

Desafios da automação de testes

A qualidade do software é imprescindível para garantir a satisfação do cliente e a continuidade de seus negócios. Esse importante Stakeholder, torna-se estratégico para assegurar que seus projetos sejam desenvolvidos com precisão e previsibilidade, e uma forma de fazer isso é com a automação de teste.

A automação é particularmente útil em testes de regressão, quando uma ou mais funcionalidades são alteradas e todo o código deve ser re-testado, numa abordagem de teste manual, é extremamente difícil para a equipe acompanhar a demanda, além de ser dispendioso, leva a uma tendência de algumas etapas do processo sejam queimadas, o que trará consequências quase sempre desastrosas para o projeto.

A automação de testes, permite que esse processo seja executado de forma contínua e, com melhor qualidade, menor chance de erros e custos cada vez mais baixos. Vamos falar de alguns desafios para se ter uma Automação de testes eficiente.

• Arquitetura de automação de teste

O primeiro grande desafio para a automação de teste é planejar a arquitetura que será utilizada.

Para aplicações, cada vez mais complexas e com grande quantidade de telas e de regras de negócio, é preciso utilizar ferramentas mais robustas para que seja possível obter uma personalização do código de teste, isso permite que testes específicos sejam executados de forma eficiente e mais confiáveis do que automações utilizando a metodologia de Record and Play, por exemplo.

Atualmente devido a crescente alta de aplicações Web a grande estrela utilizada para automação de testes o Selenium Ao contrários do que muitos pensam, Selenium não é uma única ferramenta e sim uma suíte/conjunto de ferramentas.

Com ele podemos, além de automatizar página web em diferentes browsers, executar a automação em diversas plataformas, o que faz dele um grande aliado na automação de browsers web, ou seja, podemos criar tarefas repetitivas em uma página web sem grandes dificuldades.

A versão WebDriver da Selenium e uma ferramenta muito poderosa e a mais utilizada, pois se trata de uma versão estendida da Selenium RC com inúmeras vantagens, suporta vários navegadores e plataformas, ao contrário da Selenium IDE, e apoia vários drivers para aplicações web móveis.

• Interface gráfica

Os testes interagem diretamente com a interface gráfica da aplicação. Simulando e gravando suas ações para depois transformá-las num script que pode ser reproduzido posteriormente, sem necessidade de modificações na aplicação para a criação dos testes automatizados sendo desnecessário tornar a aplicação mais fácil de testar, porem exige que a interface gráfica seja bastante estável e de baixo desempenho quando são necessárias muitas repetições.

• Lógica de negócio

Entende-se que 80% das falhas estão associadas a erros na lógica de negócio, e isso torna-se a maior vantagem pois pode-se focar na camada em que há a maior probabilidade de haver erros e a abordagem mais adequada quando há a necessidade de muitas repetições. Seu aspecto negativo é a necessidade de que sejam feitas grandes modificações na aplicação para que os testes sejam executados.

• Custo da automação e manutenção dos testes

Deve-se ter muito cuidado na escolha da estrutura de pacotes e classes do projeto, das formas de acesso aos objetos e elementos das páginas que serão recuperados pela ferramenta de automação, das boas práticas de programação e da convenção de nomes.

O custo da automação de testes deve ser maior nessa etapa em conjunto com a implementação inicial , sendo necessário planejar atentamente cada detalhe da estrutura do projeto para a codificação.

Um ponto fundamental para utilizar todas as ferramentas da Selenium é a localização dos objetos nas páginas web.

• Profissionais qualificados

Existem ferramentas, assim como a Selenium, que suportam algumas linguagens de programação como Java, C#, Ruby, Python e Javascript (node), portanto não é necessário o conhecimento de várias linguagens.

Os requisitos mínimos para trabalhar na área é ter o conhecimento de orientação a objetos, controle de condições, controle de loops e tratamento de exceções, é importante que se tenha conhecimento de algum framework de teste unitário.

• Ambiente de teste

Este realmente e um grande desafio, que fica mais evidente em testes de desempenho, de carga e de estresse, algumas diferenças podem ser encontradas no resultado quando eles são realizados antes da entrega à produção se comparados com os resultados após a entrega.

Isso acontece justamente por causa do ambiente e de limitação e/ou expansão de hardware entre os dois ambientes que podem consumir muita memória por exemplo. Nem sempre os servidores têm a mesma capacidade de hardware para executar um teste de estresse, e caso o ambiente de teste seja menor em relação ao hardware do que o servidor de produção, sendo necessário estar sempre ciente da configuração tecnológica dos servidores utilizados para cada ambiente antes de realizar os testes não funcionais. Sabendo-se que as configurações de hardware para o ambiente de teste são piores do que as do ambiente de produção essas informações devem ser levadas em consideração para evitar a criação de casos de testes automatizados irrelevantes com um tempo de resposta esperado do servidor impossível de ser atingido, tornando-se assim um caso de teste inválido.

• A garantia da qualidade

O que garante a qualidade do desenvolvimento de software é a continuidade e a repetição dos testes e sempre que houver alterações, os testes devem ser refeitos devendo abarcar todas as plataformas e configurações suportadas.

De forma manual, isso e muito trabalhoso, devido a quantidade de tempo necessária para fazer todo o processo, sendo necessário mobilizar toda a equipe para essa finalidade. Com a automação de testes, após sua criação, os testes podem ser executados quantas vezes forem necessárias, possibilitando aos testadores, se dedicar a tarefas mais estratégicas, seja desenvolvendo novos testes, seja lidando com problemas realmente complexos.

O desafio, é desenvolver um script que realmente seja capaz de testar as aplicações das formas mais completas possíveis. Isso, além de garantir a qualidade do produto final, ajuda a reduzir custos de forma bastante efetiva.

• Cobertura dos testes

Esse aspecto é importante também quando é considerada a profundidade dos testes. Só assim será possível executar milhares de casos diferentes e complementares de forma a avaliar a aplicação em sua completude. Uma estrutura de testes manual capaz de simular a atuação de milhares de usuários e impraticável. Já uma automação bem-feita pode fazer isso facilmente, possibilitando ainda que os desenvolvedores possam encontrar falhas antes mesmo de enviar o desenvolvimento para QA, bastando, para isso, programar os testes para estes serem executados a cada mudança de código e informarem a equipe caso haja defeitos.

• Expectativa de que o retorno de investimento

Como já vimos os testes candidatos a serem automatizados devem ser aqueles que são executados frequentemente, para cada nova versão de sistema que é desenvolvida.

Testes de regressão, de funcionalidades críticas do software e com cálculos matemáticos complexos e uma dessas situações, para estes, deve ser feito um planejamento com os testes e suas respectivas prioridades para automação., desde a primeira fase de implementação dos testes, de acordo com as descrições dos casos de teste e de seus respectivos passos até a sua primeira execução, isso vai levar um tempo maior nessa etapa, e quanto maior sua complexidade, maior dedicação será necessária.

O retorno sobre o investimento (ROI) deve acontecer, naturalmente diminuindo o custo, o tempo e o retrabalho desses testes a cada versão desenvolvida e ainda garante a qualidade de software.

Não é por acaso que a automação de testes no mercado de trabalho está em alta, isso graças aos benefícios indiscutíveis que ela traz, os Gestores das áreas de Qualidade já perceberam que quanto maior quantidade de casos de testes automatizados em especial, testes de regressão maior a eficiência na condução de seus processos e menor a quantidade de erros encontrados em produção.