258 views 9 mins

Automação: quando adotar testes automáticos ou manuais?

em Destaques
quinta-feira, 15 de setembro de 2022

John Henrique Pollette (*)

Com a disseminação das metodologias ágeis como Lean, Scrum e XP no desenvolvimento de softwares, as entregas mais rápidas ficam no foco dos gerentes de projetos. Com etapas mais curtas, a demanda de inclusão de novas funcionalidades em um sistema já em funcionamento traz à tona um novo conceito de desenvolvimento de sistemas, talvez mais lucrativo para o cliente.

Porém, esta forma de desenvolvimento chama a atenção para a qualidade do produto, que está sendo entregue. Por fazer pequenas entregas em um curto espaço de tempo, os Quality Assurance (QA), mais conhecidos como testadores, tornaram-se peças ainda mais essenciais em qualquer time de desenvolvimento, pois é necessário checar as funcionalidades rapidamente e ainda garantir a qualidade do produto.

Nesse ponto surge a necessidade de automatizar os testes. Em sistemas mais robustos e de muitas funcionalidades, uma alteração pode causar incidentes em áreas inteiras já testadas e estáveis. Conforme o sistema cresce, os testes regressivos ficam mais longos e cansativos. Além disso, sofrem risco crescente de algum cenário esquecido acidentalmente gerar inconsistência no ambiente produtivo. Consequentemente, a velocidade de entrega de novas funcionalidades sofreria algum impacto.

. Automatizar ou não, eis a questão – Quando se fala em testes automatizados, as principais dúvidas são: O que significa automatizar testes? Quais os benefícios dessa automação?

Um exemplo de case de sucesso de automação é o Customer Care. A AP Digital Services iniciou o projeto em 2020 para uma empresa da área da Saúde, que desejava dar mais autonomia aos seus clientes. Através do Customer Care, é possível fazer download de boletos, notas fiscais e acompanhar a entrega de produtos.

Agora, uma das principais funcionalidades desse sistema é a possibilidade de criar protocolos de atendimento que são executados pelos usuários internos do cliente. Os protocolos são direcionados para diversas áreas tais como, atendimento, financeiro, qualidade e outros. Porém, todas as vezes que há atualização no sistema ou a adição de uma nova funcionalidade, é preciso verificar se o novo recurso está em pleno funcionamento.

Então é necessário abrir um protocolo de cada categoria e motivo, além de fazer a validação dos dados de cada um dos protocolos. Com isso, serão gerados dezenas de protocolos, o que torna a função uma excelente candidata a ser automatizada. Como resultado, maior rapidez nos testes e garantia de qualidade ao produto entregue ao cliente.

A automação, por definição, é tornar automático um processo previamente manual. Um bom exemplo é a produção de scripts, que serão lidos por um software capaz de testá-los sem intervenção manual e assegurar que o resultado do teste seja o esperado. No caso do case mencionado, a garantia que todo sistema funcione após atualizações.

Vale mencionar as principais ferramentas de automação de testes atualmente: Selenium, TestComplete e Cypress. Contudo, ao iniciar o processo e a escolha da ferramenta, há alguns pontos que devem ser levados em consideração, como por exemplo, a identificação do que requer automatização e quais as ferramentas capazes de atender os requisitos.

Além disso, é necessário analisar quais as linguagens de programação suportadas pela ferramenta e se o time de QAs as conhece. Outros pontos importantes estão relacionados aos custos e à disponibilidade de suporte ou material de apoio para sanar as dúvidas do time.

Ainda dentro do conceito de automação de testes, as camadas passíveis desse processo são:

1) – Testes unitários – Realizados na fase de codificações do sistema e consistem em testar no código fonte a menor parte do sistema, que está em implementação. Nessa fase, são testados classes, métodos e objetos. Geralmente são realizados pelos desenvolvedores de forma isolada com o intuito de validar se o componente foi desenvolvido corretamente. Como ferramenta de teste unitário, as opções incluem Nunit e Xunit para Dot Net, Junit para Java entre outras.

2) – Testes de integração – Passada a fase do teste unitário feito isoladamente, é o momento de testar esse módulo criado anteriormente integrado ao sistema. Nesse nível de testes, o intuito é validar se os componentes interagem corretamente uns com os outros.

3) – Testes de sistema (end-to-end ou UI teste) – Na última etapa, também conhecida como testes de ponta a ponta, o sistema é validado como um todo, simulando a atividade que o usuário final fará no mundo real. Este é o nível de testes mais demorado, tanto quando escritos ou executados, pois englobam todo o projeto.

Com informações sobre o que é automatização e a importância no todo, alguns pontos ilustram os benefícios agregados:

1) – Os testes automatizados são mais rápidos que os testes manuais;

2) – Eles podem ser implementados em uma pipeline de integração contínua, ou seja, automatizados para que todas as vezes que haja uma mudança no código do sistema, ela seja integrada, testada e implementada;

3) – Os scripts podem ser reutilizados;

4) – Previnem a ocorrência de bugs em produção. Afinal, um erro descoberto em produção pode gerar grandes prejuízos financeiros ao cliente. Além disso, o custo para corrigir um bug nesta altura do processo é mais alto do que na fase de desenvolvimento do sistema.

. O que automatizar? – A intenção de automatizar todos os testes é bem comum, porém o processo leva bastante tempo e testes automatizados custam mais caro que os testes manuais. Então, para decidir o que automatizar considere:

1) – Repetição: tarefas que devem ser executadas periodicamente são boas candidatas para automatização;

2) – Riscos: As tarefas críticas e com alta prioridade também são boas opções, devido à sua importância;

3) – Complexidade: Tarefas que demandam bastante tempo para a execução manual e/ou por serem complexas, também são priorizadas na fila de automação.

Por fim, é importante mencionar que não é possível automatizar todos os testes. Além disso, em alguns casos, mesmo automatizando, os testes não irão refletir em melhoria do software. A melhor forma de trazer um ganho real ao projeto é entender que a qualidade do produto é uma responsabilidade de todo o time. Para atingir um alto nível de qualidade de um software é preciso implementar essas e outras boas práticas, além de ter o foco na melhoria contínua.

Ademais, é muito importante o alinhamento entre os times de desenvolvimento e de arquitetura sobre os níveis de automatização aplicados e qual ferramenta mais se encaixa ao propósito em pauta.

(*) – Formado em Quality Assurance Analyst no New Brunswick Community College, no Canadá, participou em diversos projetos na área de cassinos, antes de se tornar Amazing People na AP Digital Services. -(https://www.facebook.com/AP-Digital-Services-105811351244776/).