Continuous Integration — Integração Contínua

Jullyan Kleya Negromonte
4 min readMay 21, 2018

--

Jullyan Kleya e Danielle Cadete

Trabalhar num projeto onde várias funcionalidades são desenvolvidas e modificadas constantemente exige uma grande atenção ao integrar os códigos, pois as chances de haver conflitos entre as criações e modificações são grandes.

Como integrar todos os códigos quando tenho vários desenvolvedores trabalhando no mesmo projeto?

Calma, calma, não criemos pânico. Rsrsrrs…

A seguir, vamos mostrar a você o que é a Integração Contínua, seus benefícios, características e como funciona essa prática de desenvolvimento ágil.

De acordo com Martin Flower¹,

“Integração contínua é uma prática de desenvolvimento de software em que os membros de uma equipe integram seu trabalho com frequência. Geralmente, cada pessoa se integra, pelo menos, diariamente; levando-os a várias integrações por dia.”

Embora tenha surgido como parte das práticas da metodologia de desenvolvimento ágil XP (Extreme Programming), a Integração Contínua é utilizada em diversas metodologias.

Utilizar a integração contínua promove um feedback rápido sobre as mudanças que estão sendo realizadas na aplicação, pois são executados testes automaticamente, sempre que uma mudança é feita no código, fazendo com que os problemas sejam identificados e resolvidos rapidamente. Há um monitoramento na qualidade do código que possibilita uma melhor compreensão do andamento e resultados do projeto, fazendo com que a entrega do produto seja mais rápida.

PRINCIPAIS CARACTERÍSTICAS

Na CI, qualquer nova funcionalidade ou pequenas mudanças podem ser fundidas várias vezes ao dia.

Outra característica da Integração Contínua é refactor (melhorar a estrutura interna do código) constante. Isso garante um melhor gerenciamento do código validando sempre como está o funcionamento do mesmo; prática essa que facilita a detecção precoce de bugs; os quais, se descobertos tardiamente, poderá comprometer o prazo do projeto. Utilizar boas práticas da integração contínua agiliza todo o processo de desenvolvimento de software, utilizando ciclos curtos visando impactos de fácil resolução já que as falhas que venham a ser encontradas, logo sejam identificadas e corrigidas.

O Sistema de Controle de Versão (SCM) é o sistema que gerencia as alterações no código durante o processo de desenvolvimento. O funcionamento desse sistema possui estrutura de diretórios chamada de repositório. As revisões são divididas conforme esse repositório for alterado. Cada uma delas possui um identificador único, com isso é possível o rastreamento com a evolução do código. Um dos recursos da ferramenta de controle de versão é o Servidor de Integração Contínua que monitora a criação de novas revisões no repositório.

Builds Automatizados;

  • Mantém um repositório de fontes unificado;
  • Automatiza o Processo de Build;
  • Faz o Build auto-testável;
  • Todos devem salvar as modificações (commit) diariamente;
  • Cada modificação salva deve gerar um Build automaticamente;
  • Garante que o Build seja rápido;
  • Executa os testes num ambiente semelhante ao ambiente de produção;
  • Garante que qualquer um possa pegar o executável do último Build facilmente;
  • Garante que qualquer um possa ver o que está acontecendo;

Mas como funciona o ciclo da Integração Contínua?

Crédito imagem: José Araújo (https://centraldaengenharia.wordpress.com)
  1. O desenvolvedor realiza a atualização de seu branch (versão do código) com o código mais recente do servidor a partir de um repositório ou versionador;
  2. Realiza atividade de desenvolvimento (guiado por testes unitários e automatizados, de preferência);
  3. O desenvolvedor submete o código para o repositório onde informa sua alteração;
  4. É realizada a atualização dos códigos em seu local de trabalho com o repositório (uma vez que outros desenvolvedores podem ter atualizado o código fonte);
  5. Se necessário, é realizado o merge do código e todo conflito deverá ser solucionado;
  6. Gera-se o build localmente para se certificar que todos os testes passaram e nenhuma outra alteração possa ter influenciado na sua;
  7. É realizado o commit no repositório;
  8. O servidor de CI identifica que houve uma alteração no código do repositório e qualquer alteração desencadeia o ciclo de construção e testes automaticamente. Todos os membros são comunicados sobre o resultado de forma automatizada. Uma compilação é interrompida caso encontrado algum erro ou falha nos testes, e essa falha deve ser corrigida o mais rápido possível, tornando-se prioridade para que a construção do software volte a funcionar.

Segue abaixo algumas ferramentas de Integração Contínua (Automação e Gerenciamento de Build)

CruiseControl: é a ferramenta de Automação mais conhecida. Tem como principal objetivo oferecer um framework para a o Processo de Build.

Hudson: é uma alternativa para a Automação e Gerenciamento de Build.

Jenkins: é servidor de integração contínua open-source feito em java.

Team Foundation Server (TFS): oferece suporte a testes de unidade e integração contínua, permitindo definir testes de unidades que serão executados após o check-in, e receber o alerta de código que quebre o build.

Durante nossas pesquisas, encontramos tanto conteúdo que se dependesse da gente, esse post seria gigante. Mas decidimos parar por aqui. Então, vamos ao resumão?

Concluímos que a prática da Integração Contínua associada a ferramentas automatizadas traz consigo diversos benefícios fazendo com que os bugs não se acumulem, sejam identificados e corrigidos rapidamente. Há uma redução do riscos na entrega final do projeto e permite que a qualquer momento possa ser feita entregas parciais para validação do cliente.

¹:Autor conhecido na área de arquitetura de software, especializado em análise orientada a objetos, UML, padrão de projeto de software e metodologias de desenvolvimento ágil de software, incluindo Programação extrema.

--

--