Pesquisar no Blog

sexta-feira, 9 de setembro de 2022

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


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.  

Algumas referências na área de QA são válidas para inspiração: Júlio de Lima, Vinícius Pessoni, Walmyr Filho, Fernando Papito “QA Ninja”, o canal de Youtube da Iterasys além de algumas bibliografias como “Lessons learned in software testing (Cem Kaner, James Bach, Bret Pettichord) e “Teste Automatizados de software: um guia prático” (Maurício Aniche).

 

John Henrique Pollette - Quality Assurance Analyst na AP Digital Services

 

Nenhum comentário:

Postar um comentário

Posts mais acessados