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