- 17 de setembro de 2019
- Blog
Como garantir a qualidade do seu projeto?
Imagine a seguinte situação: um novo projeto será desenvolvido, mas por conta de alguma questão, uma equipe de teste não é prioridade. O projeto é iniciado e depois de meses, entregue para o cliente. Após a entrega, o sistema começa a ser utilizado e alguns erros são apontados. Neste caso, o time de desenvolvimento volta a trabalhar no projeto, causando uma falta de confiança do cliente com o time, um retrabalho e um gasto de tempo e dinheiro que poderia ser evitado se esses problemas tivessem sido encontrados desde o início do desenvolvimento.
Essa é uma situação que acontece e para não causar esses transtornos depois da fase de desenvolvimento, que tal implementar um processo de teste?
Mas afinal, o que é um processo de teste?
O teste de software visa garantir a qualidade, minimizando as incertezas e sistematizando os critérios de aceitação. Ele valida se o software apresenta um bom funcionamento, se existem problemas e se as expectativas estão sendo atendidas. Contudo, simplesmente executar testes não significa que o software atende todos os critérios de qualidade. Os testes precisam também de um processo, que é basicamente, acompanhar o software desde a sua concepção até a sua manutenção. Consequentemente, quando temos um processo definido e executado, garantimos ainda mais qualidade.
Como aplicamos o processo de teste?
Quando um projeto está na sua fase inicial, normalmente, já sabemos quais tecnologias serão utilizadas. Enquanto ainda não temos os requisitos (especificações do projeto) para começarmos a pensar nos casos de testes, podemos começar a pensar em uma ferramenta de automação de testes. Por exemplo, se o projeto será desenvolvido em React, temos diversas opções de ferramentas, entre elas, cypress e selenium.
Com os requisitos definidos, podemos começar a criar os casos de testes, definir quais deles podem ser automatizados e junto com os desenvolvedores criarmos uma lista de acceptance tests para a atividade que está sendo desenvolvida. Mas o que é isso? É o mínimo de itens que devem ser desenvolvidos e devem estar funcionando para que aquela atividade possa ser testada e considerada finalizada. Vou falar sobre isso mais a frente.
Quando isso terminar, provavelmente alguma coisa – mesmo que pequena – de desenvolvimento pode já estar pronta, podemos então, acessar o ambiente de desenvolvimento e iniciar um teste exploratório e até mesmo começar a automatizar alguma coisa. Antecipando os testes, problemas podem ser encontrados antes de serem enviados para a versão, economizando tempo de desenvolvimento e tempo de testes.
Acceptance tests
Quando a atividade for completamente finalizada, chegou a hora de passarmos pela lista de acceptance tests. Normalmente, vemos mais resultados quando passamos pelo acceptance junto com o desenvolvedor, no próprio ambiente de desenvolvimento dele. Se todos os itens foram feitos e o mínimo necessário funciona, podemos considerar essa atividade pronta para gerarmos a versão. Se algum item não foi feito ou algum problema crítico foi encontrado, o desenvolvedor deverá voltar para a atividade e corrigir o que foi encontrado, minimizando o risco da versão ser gerada com problemas críticos e garantindo boa parte da qualidade do sistema antecipadamente.
Outro caso é quando já temos uma versão com parte do sistema já estabilizada e temos scripts de automação criados para eles. Esses testes podem ser configurados no Jenkins (ou na ferramenta utilizada pelo projeto) e a cada push feito pelo desenvolvedor os scripts de testes automatizados, serão executados, impedindo assim, que as modificações feitas para a nova feature ou correção de bug, não cause nenhum side effect no que antes funcionava, evitando também que esse problema seja encontrado somente quando tivermos uma versão gerada.
Definindo e executando um processo de testes agregamos muito ao sistema, antecipamos problemas, economizamos tempo teste e de desenvolvimento e consequentemente diminuímos o custo e aumentamos a qualidade, eficiência e confiabilidade do sistema.