Integração Contínua – Melhoria contínua de como o código é escrito, testado e integrado

Mudando o desenvolvimento de software: Definindo CI

Desde o início da pandemia COVID-19, nossas vidas mudaram. Todos fomos forçados a enfrentar as mudanças rapidamente. Considerando que, uma vez que a mudança foi considerada como parte integrante de melhoria e crescimento, a realidade a tornou um fato imperativo da vida. E aí está o paradoxo, particularmente porque a propensão para mudar difere em cada um de nós.

No mundo do desenvolvimento de software, a mudança é um processo contínuo e em constante evolução e que inclui vários desafios. Embora alguns desenvolvedores possam ficar céticos com a menção de DevOps ou CI, outros procurarão ansiosamente entender como a integração contínua vai ajudá-los a melhorarem e se tornarem mais eficientes.

Então, o que é CI? ThoughtWorks (produtora dos artigos e livros mais importantes sobre o assunto) define-o como: “… uma prática de desenvolvimento que requer que os desenvolvedores integrem o código em um repositório compartilhado várias vezes ao dia. Cada check-in é então verificado por uma build automatizada, permitindo que as equipes detectem problemas antecipadamente.

Enquanto CI significa Integração Contínua na engenharia de software, ela também representa Melhoria Contínua em termos de como o código é escrito, testado e integrado!

Ao mesclar regularmente cópias de trabalho do código produzido pelos desenvolvedores em um repositório principal compartilhado várias vezes ao dia, a CI permite detecção rápida e fácil localização de erros, o mais cedo possível no processo.

Principais desafios resolvidos pela CI

Dê um Google por “desafios enfrentados por engenheiros de software”. Existem literalmente bilhões de resultados! Aqui nós  iremos apenas relacionar os principais desafios que estão tornando a adoção de CI uma etapa obrigatória hoje:

1 – Descentralização do Desenvolvimento de Software

A produção de software seguro e livre de bugs é constantemente desafiada pelo uso cada vez maior de branching e merging (*), bem como a implementação de código-fonte aberto produzido por centenas e até milhares de desenvolvedores.

2 – Demandas de negócios

No mundo digital as empresas exigem mudanças rápidas, pois buscam constantemente reduzir o tempo de lançamento no mercado para obter uma vantagem competitiva. A entrega de soluções de software muito rápida força os engenheiros de software a trabalharem simultaneamente em vários problemas.

3 – Detecção de bugs

A detecção e correção de bugs antes que eles passem de pequenos a críticos é essencial antes que aconteça o pior. Um bug detectado durante a integração é geralmente um bug menor. Mas se o mesmo bug for detectado na produção, ele se torna um bug crítico, exigindo o investimento de muito mais recursos, sob grande estresse, para consertar.

4 – A integração requer mais tempo do que as mudanças reais

Quanto mais o desenvolvimento se mantém em uma ramificação de código sem integrar de volta para a linha principal, maior o risco de múltiplos conflitos de integração e falhas. Além disso, quanto mais mudanças acontecem no repositório, mais trabalho os desenvolvedores terão que investir antes de enviar suas próprias alterações. Eventualmente, o repositório pode se tornar tão diferente das linhas de base originais usadas pelos desenvolvedores que uma situação caótica – às vezes referida como “inferno da fusão” ou “inferno da integração” – é alcançada, onde o tempo necessário para integração excede o tempo que levou para fazer as mudanças reais e originais.

A solução fornecida pela CI

CI é parte integrante das tendências de DevOps para automatizar aplicativos e dados, otimizar o valor comercial e simplificar o gerenciamento do desenvolvimento de software. Verificando cada integração de código inserido por desenvolvedores em um repositório compartilhado, criando uma construção automatizada, CI testa e gera uma trilha de documentos, fornecendo soluções importantes para engenheiros de software envolvidos no código do processo de desenvolvimento:

– Permite a detecção rápida e antecipada de bugs introduzidos na base de código;

– Permite sincronização e consolidação eficazes;

– Garante que o software esteja continuamente pronto para implantação a qualquer momento;

– Aprimora o processo de modificação do código de um pacote ou aplicativo;

– Automatiza a integração de alterações de código de vários colaboradores;

– Permite que várias equipes de desenvolvimento trabalhem em conjunto e incorporem facilmente novos recursos melhorias contínuas, permitindo que as organizações atendam rapidamente às necessidades em evolução de seu mercado;

– Complementa os sistemas de controle de versão com verificações adicionais, como testes de qualidade de código automatizados, ferramentas de revisão de estilo de sintaxe e muito mais.

“A integração contínua não elimina bugs, mas os torna dramaticamente mais fácil de encontrá-los e removê-los.” Martin Fowler, cientista-chefe, ThoughtWorks.

O pipeline de CI é um processo simples de três etapas

PUSH – Envio de código para um repositório compartilhado (develop branch) para teste de integração;

TESTE – Teste com um processo automatizado que constrói o aplicativo em um servidor dedicado para confirmar e validar a integração do novo código no código atual;

CORREÇÃO – Correção de quaisquer bugs, mal funcionamentos ou anomalias detectadas, antes de continuar a adicionar mais recursos e implantação contínua (CD – Continue Deployment);

O uso de CI no desenvolvimento de software é um processo simples de 3 etapas – ou seja, enviar, testar e corrigir.

CI é ideal para o teste e implantação de software funcional em uma base repetível, permitindo que as equipes reduzam os riscos e custos de desenvolvimento de software enquanto melhoram a qualidade do software e o tempo de lançamento no mercado. E ao implantar e utilizar CI, os desenvolvedores de software garantem que se mantenham relevantes, adquirindo as habilidades essenciais para o desenvolvimento de software hoje e no futuro. Consequentemente, CI é parte integrante do cenário de desenvolvimento de software de hoje.

“O futuro é CI – CD (integração contínua, implantação contínua), com lançamentos menores mais frequentes que contribuem com menos valor individualmente, mas juntos, ao longo do tempo, criam mais valor para todas as partes interessadas de cidadãos e clientes para empresas e seus fornecedores.”  Gartner, The Key to a Successful Digital Transformation.

Embora este processo pareça simples, ele requer uma mudança na cultura organizacional de trabalho, suporte  da gestão, e a participação de todos os membros da equipe.

Push está relacionado ao envio frequente do código escrito para um novo recurso para o compartilhamento do repositório. Isso exige uma mudança maior na cultura de trabalho, porque requer engenheiros de software para modificar a maneira como funcionam, para enviar frequentemente o código para o branch de desenvolvimento para teste. Este push contínuo ativa testes de integração contínua.

O teste se baseia em testes automatizados e confiáveis ​​para validar o novo código conforme ele é enviado a cada vez para o repositório. Pode-se incluir qualquer número de testes considerados críticos, mas o circuito de CI deve ser o mais curto possível para que o feedback possa ser fornecido o mais rápido possível. Naturalmente, esta detecção automática de erros inclui o recebimento de mensagens / alertas relevantes, garantindo assim velocidade, aumentando a produtividade e eliminando o erro humano.

Quando uma compilação é interrompida, corrigí-la é a principal prioridade da equipe de desenvolvimento. Isso ocorre porque ninguém pode continuar enviando alterações de código até que a correção seja concluída. E, claro, se a build não pode ser corrigida rapidamente, a equipe pode decidir remover o código. O princípio aqui é que a construção irá sempre produzir código funcional que possa ser lançado.

Uma analogia com CI: desenvolvimento de uma nova peça para um veículo

Considere o desenvolvimento de uma nova roda para um veículo existente. Semelhante a um novo recurso de software, a nova roda é composta por uma série de peças, como cubo, raios, aro e pneu. Então, quando o desenvolvimento da nova roda estiver completo, ela deve ser “empurrada” (push) para a linha de fabricação para ser testada. Isso envolve uma série de testes de integração, desde a verificação se a roda pode realmente ser conectada ao veículo e se outros sistemas do veículo inter-relacionados – como freios, sensores de pressão de ar, limpadores e luzes de advertência – ainda estão operacionais com a nova roda.

Nesse cenário, PUSH está “empurrando” a peça do veículo para a linha de fabricação. TEST está testando a roda com testes de integração estática. E FIX é a correção de problemas detectados, como se o os freios não funcionam, há um problema de integração. Uma vez que a correção foi realizada, o ciclo começa novamente a partir do PUSH.

O significado é claro. O teste ideal da roda e a eliminação de bugs e mau funcionamento são realizados durante e imediatamente após o processo de montagem do veículo, evitando problemas muito mais sérios no futuro. Da mesma forma, um novo recurso de software que chega à produção com um bug  torna muito mais difícil localizar a origem do bug.

Vantagens e benefícios da CI

Martin Fowler afirmou uma vez que uma de suas frases de efeito favoritas é “se doer, faça mais vezes”.

Ele explica a relevância particularmente em relação aos testes de integração. Testando com mais frequência, é possível reduzir a “dor” no desenvolvimento. Usando CI para integrar (push) novas compilações todos os dias, o problema da integração é significativamente reduzido.

Como uma parte importante e integral do DevOps hoje, a CI oferece liberdade para desenvolvedores e tranquilidade para a gestão.

Liberdade para desenvolvedores

-Detecção antecipada e rastreamento de bugs de integração, eliminando integrações longas e tensas;
– Compatibilidade entre versões;
– A confirmação frequente de código para testes de integração evita problemas de integração; apenas algumas alterações perdidas ao reverter para um estado livre de erros;
– Concentração no desenvolvimento de código funcional e de qualidade e no apoio ao desenvolvimento da dinâmica da equipe;
– Máquina de construção de integração dedicada usando mecanismos de feedback contínuo;
– Menos tempo necessário para testar e depurar;
-Feedback imediato sobre o impacto das mudanças locais em todo o sistema.

Tranquilidade para a gestão

Economiza tempo e dinheiro no ciclo de vida do projeto;
– Evita o caos de última hora nas datas de lançamento;
– Leva os desenvolvedores a criar código modular,  menos complexo;
– Conscientização do status do projeto através da geração automática de métricas, como cobertura de código, complexidade e recursos concluídos;
– Melhor visibilidade e comunicação
– Mais tempo disponível para adicionar recursos
– Disponibilidade constante de uma versão “atual” para fins de teste, demonstração ou lançamento;

Saiba mais sobre Magic e CI

Se você sempre faz o que sempre fez, você sempre obterá o que sempre obteve. ” Henry Ford

A CI oferece a oportunidade de transformar esforços de desenvolvimento e entregar software de forma rápida, segura e confiável para um ambiente de produção. A mudança envolvida oferece a liberdade exigida pelos desenvolvedores e a tranquilidade necessária para a gerência.

Com isso em mente, a Magic está integrando a metodologia CI/CD em seu roadmap atual e futuro. Isso permitirá que os desenvolvedores da plataforma Magic xpa aproveitem as vantagens da CI e melhorem a maneira como escrevem, testam e integram o código. Com base em um repositório Git, que permite a construção e o teste de integração de todos os novos códigos, os fluxos de trabalho típicos do Magic CI incluem:

-Verificações de código (compilação de código e verificador de aplicativo no Magic xpa

-Análise de código estático

-Construções de aplicativos e componentes

 

Quer aprender com nossos especialistas como o CI está sendo usado em ambientes de desenvolvimento Magic?

Contate-nos para mais detalhes ou para agendar uma demonstração

 

(*)Branching (de desenvolvimento ou árvore de desenvolvimento de um software) é uma versão que está em desenvolvimento e ainda não foi lançada oficialmente.

Magic Software Brasil
Equipe de Marketing – Magic Software Brasil

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *