Como desenvolvedor full-stack, tenho observado com ceticismo os alegados benefícios do CI/CD (Integração Contínua e Entrega Contínua). Talvez por ser essencialmente um programador, não entendo completamente os benefícios dessa abordagem ou quaisquer termos relacionados, como scrum, ágil, etc.
Na minha opinião, os testes podem ser feitos localmente no computador de desenvolvimento; o teste não pode substituir a revisão manual de código, muitos recursos de segurança não são facilmente testados usando scripts automatizados, há muitos caminhos de código cuja correção funcional precisa ser examinada, sem mencionar os muitos casos extremos possíveis (falando como um desenvolvedor full-stack olhando para códigos de back-end) - estes precisam de revisão humana além do teste (em alguns casos, os casos de teste também precisam de revisões).
A essência deste ponto é expressar minha dúvida sobre qualquer exagero de benefício oferecido por CI/CD sobre a segurança; todo o conceito de CI/CD parece ser anunciado para gerentes e outros não programadores, e geralmente para projetos que não são críticos para a segurança.
Os Benefícios Alegados do CI/CD
Já vi alegações sobre os benefícios do CI/CD, como "mais rápido xxx", "menos bugs", "melhor qualidade de código", etc., mas, exceto "mais rápido xxx" (não vejo por que é verdade), todas as outras dimensões de qualidade podem ser alcançadas por outros meios: guia de estilo, uso de linters, mentoria, etc.
Velocidade de Entrega
O argumento de que o CI/CD torna a entrega mais rápida é, em minha opinião, o único benefício real e tangível. Ao automatizar o processo de construção, teste e implantação, é possível reduzir o tempo necessário para levar novas funcionalidades ou correções de bugs para produção. Isso pode ser especialmente valioso em ambientes ágeis, onde a velocidade de entrega é crucial para atender às demandas do mercado.
Qualidade do Código
Quanto à melhoria da qualidade do código, não vejo como o CI/CD por si só pode resolver esse problema. A qualidade do código depende muito mais de práticas de desenvolvimento sólidas, como revisão de código, testes unitários abrangentes e uso de ferramentas de análise estática. Essas práticas podem ser implementadas independentemente de um pipeline de CI/CD.
Redução de Bugs
Da mesma forma, a redução de bugs não é uma garantia do CI/CD. Os testes automatizados podem ajudar a identificar alguns tipos de bugs, mas não podem substituir a revisão manual do código e a análise cuidadosa dos casos de uso. Muitos bugs complexos ou relacionados à segurança podem escapar dos testes automatizados.
A Importância da Revisão Humana
Acredito que a revisão humana do código é essencial, especialmente para projetos críticos de segurança. Os scripts automatizados de teste podem verificar a funcionalidade básica, mas não podem substituir a análise cuidadosa de um desenvolvedor experiente que entende o contexto do projeto e pode identificar problemas sutis ou casos extremos.
Além disso, muitos recursos de segurança, como autenticação, autorização e criptografia, não são facilmente testáveis por scripts automatizados. Esses aspectos críticos do sistema precisam ser revisados manualmente por especialistas em segurança.
Conclusão
Embora o CI/CD possa trazer benefícios de velocidade de entrega, acredito que sua importância é frequentemente exagerada, especialmente em projetos críticos de segurança. A revisão humana do código, a mentoria e o uso de práticas de desenvolvimento sólidas são fundamentais para garantir a qualidade e a segurança do software. Devemos ter cuidado para não nos deixar levar por promessas de "milagres" do CI/CD e manter uma abordagem equilibrada e pragmática para o desenvolvimento de software.