29 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 Pollette – Quality Assurance Analyst na AP

Um profissional supermotivado e sempre disposto a ajudar. Atua como Quality Assurance Analyst na AP Digital Services, área responsável pelo planejamento, execução e análise dos resultados da garantia da qualidade. A área assegura que os produtos e a execução dos processos pelos desenvolvedores de projetos de software estejam em conformidade com o plano de garantia da qualidade. Além disso, fornece visibilidade para a equipe de gerência sobre os processos e produtos.

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. Possui experiência também em programação e está sempre trabalhando juntos aos desenvolvedores do seu time, seja participando no desenvolvimento ou aprendendo novos conceitos.

Sobre a AP Digital Services

Empresa consultora de tecnologia e desenvolvedora de software que, por meio da criação de soluções/produtos digitais, leva ao cliente soluções de design, implantação de processos ágeis e engenharia de software/tecnologia, utilizando as mais inovadoras ferramentas e técnicas disponíveis no mercado.