Automação: quando adotar testes automáticos ou manuais?
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: John Henrique Pollette -
Quality Assurance Analyst na AP Digital Services
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:
- 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.
- 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.
- 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:
- Repetição: tarefas que devem
ser executadas periodicamente são boas candidatas para automatização;
- Riscos: As tarefas críticas e
com alta prioridade também são boas opções, devido à sua importância;
- 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.
Nenhum comentário