A qualidade de software é um fator crucial para o sucesso de qualquer aplicação. Em um ambiente de desenvolvimento ágil, em que mudanças são rápidas e frequentes, manter um alto padrão de qualidade pode ser desafiador. É aí que podemos utilizar estratégias do mundo DevOps para nos auxiliar. Este artigo vai explorar como garantir a qualidade do software durante o ciclo de CI/CD, destacando ferramentas e boas práticas que podem ser adotadas mesmo por quem é novo no assunto.
Os mandamentos da pipeline
Para um ciclo excelente de qualidade em sua esteira de software, podemos dividir em 3 grandes pilares que são:
- Testes de software
- Análise de segurança
- Versionamento de artefatos
Neste artigo, focaremos no pilar de Testes de Software e para garantir que nossa abordagem funcione corretamente e produza resultados de alta qualidade, devemos considerar esses 3 pilares como inegociáveis e que uma vez implementado, toda a cadeia de pessoas responsável pelo software como produto final deverá entender seus benefícios e trabalhar em prol dos resultados. Lembre-se sempre: não há ferramenta ou processo que faça milagre em um ambiente em que se negocie qualidade.
Os testes de um software
Dentro de um processo de CI/CD, podemos executar vários tipos de testes. Cada um desses tipos teste tem uma finalidade e por esse motivo eles podem e devem ser alocados em momentos estratégicos durante uma pipeline.
Testes de componentes
Os testes de componentes são ideais para validar a integração entre componentes do sistema. À medida que seu sistema cresce, naturalmente a quantidade de componentes também cresce e isso pode se tornar um problema, pois muitas das vezes a pipeline irá aguardar o fim do teste para prosseguir para a próxima fase.
Num cenário ideal, esses testes não devem passar de 20 minutos e devem ser programados para serem executados no ambiente de testes para não tornar o processo de CI/CD um pouco mais lento.
Ferramentas que podemos utilizar nesse processo são: JUnit, Jest, PyTest, Mocha, TestNG e Cypress.
Testes fim-a-fim ( End-to-end )
Aconselhável habilita-los em qualquer ambiente com o intuito de garantir que as features básicas do sistema estejam minimamente operacionais. Como naturalmente são testes complexos que asseguram que cenários reais, seu tempo pode variar entre 10 minutos a 40 minutos.
Ferramentas que podemos utilizar nesse processo são: Puppeteer, Selenium, Robot Framework ou Cucumber.
Testes de contrato
O teste de contrato ideal é utilizado para garantir que o código desenvolvido em questão corresponde aos acordos escritos previamente em contrato/documentação. Podemos economizar tempo nos pipelines apenas testando no ambiente de pré-produção, pois, assim como testes de componentes, os testes de contrato aumentam seu tempo de execução a cada nova implementação e validação, principalmente se há uma grande quantidade de comunicação entre serviços.
Ferramentas que podemos utilizar nesse processo são: Swagger, Pact.io.
Testes de regressão
Os testes que têm a maior carga e se não um dos mais importantes para qualquer release. Esse tipo de execução acaba exigindo muitas horas de execução, pois tem a necessidade de realizar testes em versões anteriores do sistema para garantir que a sua evolução não cause nenhuma surpresa. Normalmente esses tipos de testes acabam levando horas para serem executados tornando inviável a execução de forma diária ou durante qualquer chamada no fluxo de CI/CD. O mais ideal para esse tipo de teste seria que todo recurso computacional obsoleto ( provavelmente de madrugada ) possa ser utilizado para validar todas as evoluções do sistema.
Alguns serviços de pipelines como Bitbucket e Azure DevOps permitem que algumas pipelines possam ser executadas através de um gatilho ou até mesmo através de tarefas agendadas, o que seria o mais ideal para esse tipo de testes.
Teste de web-page-quality
Como esses testes fazem análise estática dos componentes web, podemos executá-los no ambiente de produção fora da janela de horário comercial. Não há teste de funcionalidades nem carga no sistema com esse teste. Esses testes são executados para entender o comportamento e performance dos componentes de front-end.
Ferramentas que podemos utilizar nesse processo são: Lighthouse.
Testes de performance
O ideal seria utilizar o máximo de recurso computacional das pipelines para simular a quantidade real de usuários ou cenários de picos de requisições de usuários. Outro conselho é executar os testes de performance em janelas fora do horário comercial devido ao excessivo uso da pipeline, que pode se tornar um gargalo durante o horário comercial.
Ferramentas que podemos utilizar nesse processo são: K6, Jmeter.
Benefícios
Grande parte dos serviços de pipelines no mercado nos possibilitam tirar uma grande vantagem no processo de execução de testes através de condicionais e análise dos resultados de testes. Podemos até abortar um processo de deployment se eventualmente algum dos testes não se comportar da forma que esperávamos ou se os resultados extraídos dos testes não atingiram o mínimo solicitado.
O uso de ferramentas como o Sonar durante as pipelines nos possibilitam usar seu Quality Gate para analisar a qualidade dos testes e do código, evitando assim de prosseguir com qualquer mudança que não atingir a qualidade exigida.
Acelere a sua carreira conosco!
A Mentoria DevOps é um programa de mentoria de 12 meses com encontros semanais ao vivo, com um grupo seleto e restrito, onde estaremos do seu lado para mantê-lo relevante e atualizado no mercado de tecnologia, aprendendo e implementando as melhores práticas e ferramentas de DevOps.
Clique aqui para entrar na prioridade pela melhor oferta de lançamento
Conclusão
A jornada em busca da excelência na qualidade de software pode ser bem diferente em cada empresa. Vários fatores podem interferir na implementação e no resultado final, por esse motivo trouxemos algumas ideias de ferramentas adequadas para cada tipo de teste e ideias de em qual parte do processo podemos utilizá-las conforme necessário. Lembre-se: a qualidade de software é um compromisso coletivo e contínuo, e sua priorização é a chave para entregar valor real e sustentável aos usuários finais.
Esperamos que vocês tenham gostado das ideias, nos vemos nos próximos artigos!