Analisar a integração contínua

Concluído

A integração contínua é uma das oito funcionalidades na taxonomia de DevOps.

Descubra por que a integração contínua é necessária

Em 23 de setembro de 1999, o Orbitador Climático de Marte guardou seus painéis solares para protegê-los de uma descida temporária na atmosfera superior de Marte.

Depois de entrar em órbita com sucesso, o satélite deveria retransmitir fotos de Marte para a Terra por vários anos. Mas o orbitador queimou na atmosfera marciana.

Um bug no software de controle de solo, que foi fornecido por terceiros, calculou o valor em uma unidade Imperial, libra-segundos. O software criado pela NASA esperava que o valor estivesse em uma unidade métrica, newton-segundos. Como esses valores não foram convertidos corretamente, pequenas discrepâncias na posição da nave espacial foram combinadas ao longo do curso de milhões de milhas.

A garantia de qualidade não observou o uso de uma unidade imperial no software externo, apesar de os padrões de codificação da NASA na época exigirem o uso de unidades métricas. Os cálculos também foram feitos manualmente em vez de usando o software fornecido, devido a erros de formato de arquivo e bugs diversos. Essa situação é um exemplo da necessidade da integração contínua.

Explorar a integração contínua

A integração contínua é uma mentalidade e uma estratégia de equipe. Além disso, o autor e palestrante Martin Fowler afirma que a 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 faz a integração pelo menos diariamente, levando a várias integrações por dia.

Cada integração é verificada por um build automatizado (incluindo o teste) para detectar erros de integração o mais rápido possível.

Quando feita corretamente, essa abordagem leva a problemas de integração reduzidos ao capturá-los anteriormente no processo.

Diagram shows the difference between continuous delivery and continuous deployment. The stages are the same in both cases: code done - unit tests - integrate - acceptance test - deploy to production. For continuous delivery, deployment to production happens manually. For continuous deployment, it's automatic. Continuous integration spans the first three stages for both continuous delivery and continuous deployment.

As metas da integração contínua são para:

Observação

Observe como as metas de integração contínua incluem a colaboração contínua, a entrega contínua e a qualidade contínua!

Mas o que acontece quando não há integração contínua? A falta de esforços de integração contínua geralmente pode resultar em:

  • Ciclos de desenvolvimento longos
    • Código sem compilação
    • Em qualquer momento, o código-fonte pode não ser funcional
    • Congelamento de código
  • Falhas de build altas/contagens de bugs
    • Branches de longa vida, causando esforços de mesclagem de vários dias
    • Código ausente do controle do código-fonte
    • Falhas de segurança encontradas tarde no ciclo de desenvolvimento
    • Grande quantidade de dívidas técnicas
    • Números de cobertura de código baixos ou ausentes
    • Qualidade reduzida geral
  • Comunicação e colaboração limitadas
    • Código que não segue os padrões de codificação
    • Nenhuma ou poucas revisões de código
    • Testes feitos tardiamente no ciclo de desenvolvimento
    • Em muitos casos, manual, se houver

Os pontos de integração são o loop de comentários rápidos usado para aprimorar o sistema. Quando o tempo dos pontos de integração tem um lapso, o projeto está com problemas. Veja o que Dantar Oosterwal diz sobre eles no livro The Lean Machine:

A epifania dos pontos de integração é que eles controlam o desenvolvimento de produtos. Eles são os pontos de aproveitamento para aprimorar o sistema. Quando o tempo dos pontos de integração tem um lapso, o projeto está com problemas.

Dantar Oosterwal, The Lean Machine

© Scaled Agile, Inc.

Caso tenha se perguntado se a sua equipe está realmente fazendo a integração contínua, essas perguntas podem ajudá-lo a determinar a resposta.

  • Todos os desenvolvedores estão fazendo o desenvolvimento baseado em tronco?
  • Todas as alterações em um tronco iniciam um processo de build?
  • Quando o build e o teste falham, a equipe corrige o build em alguns minutos?

O desempenho também é influenciado pela presença ou ausência da integração contínua. Os dados coletados e analisados para o livro The Science Of DevOps – Accelerate – Building and scaling high performing technology organizations de Nicole Forsgren, Jez Humble e Gene Kim mostram que, quando a velocidade de comercialização de equipes de baixo desempenho aumenta, a qualidade diminui.

Mas equipes de alto desempenho podem manter a qualidade enquanto aumentam a velocidade de comercialização. Elas têm ciclos de implantação menores (e menos complexos) e usam a integração contínua para corrigir problemas imediatamente, aumentando o fluxo e a eficiência.

2017 Equipes de alto desempenho Equipes de desempenho médios Equipes de baixo desempenho
Frequência de implantação Vários por dia 1 semana a 1 mês 1 semana a 1 mês
Prazo de entrega de alteração < 1 hora 1 semana a 1 mês 1 semana a 1 mês
MTTR < 1 hora < 1 dia 1 dia a 1 semana
Taxa de falha de alteração 0 a 15% 0 a 15% 31 a 45%