Ir para o conteúdo principal
Background Image

A métrica para descobrir se a sua equipe realmente faz Integração Contínua

··6 minutos·
Rafael Issao
Autor
Rafael Issao
Apaixonado por tecnologia, programação e inovação. Adoro compartilhar conhecimento e aprender coisas novas todos os dias.
Tabela de conteúdos

A métrica é simples.

É só fazer uma pesquisa qualitativa com três perguntas:

  1. Todos os engenheiros estão fazendo push de seu código diretamente para o trunk ou master (não para feature branches) diariamente?
  2. Cada commit aciona a execução dos testes automatizados, principalmente unitário?
  3. Quando o build está quebrado, ele costuma ser corrigido em até 10 minutos?

Se sua equipe responder sim para todas as perguntas, o seu time está praticando a Integração Contínua.

Neste artigo, tentarei explicar por que estas perguntas mostram se sua equipe pratica ou não o famoso CI - Integração Contínua

Por que fazer Integração Contínua?
#

Para explicar o problema que CI resolve, precisamos entender como as pessoas trabalham dentro de uma equipe de desenvolvimento.

A maioria das equipes trabalham em paralelo, criando e alterando códigos do mesmo projeto.

Em algum momento, o trabalho de todos deve ser combinados no mesmo lugar, no mesmo repositório.

Este processo de combinar o trabalho de todos é difícil e desafiador. Uma modificação em um arquivo pode ter consequências não intencionais, comprometendo a estabilidade do software.

Para evitar este problema, algumas equipes isolam o trabalho de cada um em branches próprias para manter o branch principal (trunk/master) estável.

Fazem de tudo para isolar o trabalho de cada um, mas ao fazer isso as branches começam a divergir entre elas e começam a ter longas durações, exigindo retrabalho significativo para resolver conflitos.

Podemos perceber também comportamentos como “code freeze” ou alguma fase de integração e estabilização para fazer um lançamento seguro da funcionalidade.

E este problema se intensifica exponencialmente com o tamanho da equipe e a longevidade das branches.

A prática de CI foi criada para atacar este problema.

CI segue o princípio do XP (extreme programming) que diz o seguinte:

Se algo é doloroso, devemos fazê-lo com mais frequência e resolver o problema o quanto antes.

Não devemos postergar com branches isoladas e que duram mais de um dia.

Logo, quando é praticado o CI, o time deve integrar todo o trabalho no branch principal (trunk/master) diariamente.

Assim entendemos por que a resposta da primeira pergunta deve ser “sim”:


  1. Todos os engenheiros estão fazendo push de seu código diretamente para o trunk ou master (não para feature branches) diariamente?

Como começar com push diário no time
#

A minha sugestão é praticar os seguintes passos:

  1. Aprender a dividir uma funcionalidade em mudanças pequenas que podem ser integradas no branch principal
  2. Aprender a escrever código incompleto mas que não quebra a estabilidade do sistema.
  3. Para cada mudança pequena, praticar a escrita de testes. Principalmente unitário.

O primeiro ponto é o passo inicial para começar com CI.

Times que nunca praticaram CI tem uma dificuldade em criar design tático, criar uma funcionalidade em pequenos passos.

Esta dificuldade reflete também na escrita dos testes unitários, ja que uma das partes desafiadoras de um teste unitário é definir a “unidade” testável, parte de uma funcionalidade.

O segundo ponto é para atacar a falta de criatividade e conhecimento para escrever funcionalidade incompleta mas que pode estar presente no branch principal.

Quem está acostumado com “Feature Branch” ou Branches de Longa Duração não consegue imaginar um código “na metade” em produção.

E não confundam esta etapa com “Feature Toggles” ou “Feature Flags”. Estas técnicas existem para ligar ou desligar uma feature em produção.

O que queremos é a possibilidade de ter código que ainda não funciona em produção.

A última etapa é para garantir a regressão da nova funcionalidade.

Como você e outras pessoas do time começarão a integrar em um único branch, deve ter uma rede de segurança que diz se algo quebrou ou não.

Se sua funcionalidade é para melhorar o desempenho, deve ter um teste de desempenho que comprova o que você fez.

Se sua funcionalidade é para alterar um comportamento do sistema, deve ter um teste unitário que comprova o que você fez.

Sem a garantia dos testes automatizados, ficaremos com medo de colocar o nosso código diariamente no branch principal.

Ou seja, por isso existe a segunda pergunta:


2 - Cada commit aciona a execução dos testes automatizados, principalmente unitário?


Mesmo assim, vão ocorrer problemas
#

Com pushs diários, problemas vão ocorrer no branch principal.

Mas isso é normal. Principalmente no início, os problemas acontecem com frequência alta.

Mas lembre-se:

Se algo é doloroso, devemos fazê-lo com mais frequência e resolver o problema o quanto antes.

Quando isso acontecer, o time deve parar de fazer o que está acontecendo e resolver juntos o problema.

Pode parecer exagero mas é importante.

Imagine a pior situação:

Ocorreu um bug em produção que ninguém esperava. O cliente pode perder milhões por causa do bug. O time precisa resolver o mais rápido possível.

Não seria importante o seu time ser capaz de criar uma solução e integrá-lo no branch principal em minutos?

Então, quando acontece um problema na integração, todos devem agir sempre de acordo com o pior cenário possível.

O problema não será do autor que fez o push, mas o time terá a responsabilidade compartilhada.

Após a resolução do problema, verifique se todos entenderam a causa. Ajuda a aumentar o conhecimento do time!

Por isso temos a terceira pergunta e deve ser “sim” a resposta:


  1. Quando o build está quebrado, ele costuma ser corrigido em até 10 minutos?

Benefícios da Integração Contínua
#

Redução do risco de atrasos na entrega
#

Acontece quando o push feito pelo time é tão pequeno e diário que fica fácil de encontrar o problema e a causa do problema.

Diferente de quando o time deve juntar uma ou mais branches de longa duração.

Menos tempo desperdiçado com integração do código
#

Como o código feito é pequeno, outros processos como Code Review e testes manuais são rápidos melhorando o fluxo do trabalho no processo como um todo.

Menos Bugs
#

Contrariando a intuição comum, o estudo DORA demonstra que equipes que implantam mudanças com mais rapidez e frequência (evitando branches prolongados e integrando diariamente ao branch principal) têm menos falhas e maior confiabilidade.

Colocar em Produção é uma decisão puramente de negócio
#

Se você tem uma branch principal sempre estável e que quando ocorre problemas, eles são corrigidos em minutos, então significa que você sempre tem uma versão do seu sistema pronto para ser instalado em produção.

Conclusão
#

A Integração Contínua (CI) é definida por três critérios simples:

  1. Commits diários no branch principal (trunk/master), evitando branches de longa duração.
  2. Testes automatizados acionados a cada commit, garantindo estabilidade imediata.
  3. Correção de builds quebrados em até 10 minutos, priorizando a saúde do código.

A CI resolve o caos da integração tardia, substituindo branches divergentes por pequenas mudanças frequentes. Isso reduz conflitos, retrabalho e riscos de atrasos. Equipes que adotam CI:

  • Dividem funcionalidades em etapas menores e testáveis, mesmo que incompletas.
  • Priorizam testes automatizados como rede de segurança para mudanças contínua.
  • Corrigem problemas rapidamente, tratando falhas como prioridade coletiva.

Adotar CI não é só uma prática técnica, mas comportamental: exige colaboração, disciplina e foco em melhorias incrementais para entregar valor de forma consistente e segura.

O que você achou do artigo?

Comenta e vem falar comigo!

🥒🥒 Espero que tenham curtido e até o próximo artigo! 🥒🥒