Entenda o que é Continuous Integration - Gaea
Com qual frequência seu time de desenvolvedores de software falha ao não ser capaz de prover entregas no prazo acordado previamente com outros setores da empresa? Qual o percentual de bugs a cada entrega? Por fim, quantos dos projetos de TI de sua empresa extrapolam o custo previsto inicialmente?
Continuous Integration é o nome de uma prática de desenvolvimento de software que visa eliminar percalços como esses, comuns nos departamentos de TI.
Se você é gerente de TI e vive pressionado por outros gestores a garantir entregas mais rápidas e mais eficientes, entenderá, ao final deste post, por que você não pode abrir mão dessa estratégia fundamental no processo de desenvolvimento de aplicações. Confira agora!
Seus projetos de TI estão em linha com as expectativas dos CEOs?
Antes de conceituar Continuous Integration, é preciso entender o que é integração. Integração é uma etapa no desenvolvimento de software na qual todo o trabalho de uma equipe de desenvolvedores é agregado e validado, o que permite então a realização de testes para que o projeto avance a outras fases/features.
Até alguns anos, essa integração era feita após o cumprimento de longas etapas, em periodicidades que ultrapassavam semanas ou até meses.
O resultado dessa imobilidade no workflow, muitas empresas conhecem bem: segundo um relatório global da Standish Group, 31,1% dos projetos de TI são cancelados antes de serem completados e apenas 9% são entregues dentro do prazo e do custo estimados na fase de planejamento.
A chamada Integração Contínua (CI) objetiva justamente aumentar a produtividade da equipe de TI, reduzir custos de projetos e potencializar a velocidade de entregas com os requisitos mínimos de qualidade.
Afinal, o que é, então, Continuous Integration?
Integração Contínua é uma metodologia moderna de desenvolvimento, em que os desenvolvedores envolvidos em um projeto integram seus trabalhos continuamente. Cada integração é consolidada por uma ferramenta chamada de automatização de tarefas, que inclusive pode executar diversos testes para identificar erros de digitação de códigos, incompatibilidades entre comandos dados por desenvolvedores diferentes etc.
Dessa forma, essa prática exige que os profissionais façam commit do código, ao menos 1 vez ao dia, em um repositório compartilhado. O alvo dessa sistemática é evitar a descoberta de erros em fases posteriores, uma vez que quanto mais adiantado estiver o projeto, maiores serão os custos de correção.
Qual a relação entre Continuous Integration e redução de custos?
Imagine que sua empresa esteja trabalhando no desenvolvimento de um aplicativo mobile de missão crítica (para seu cliente mais importante). A complexidade de integrações e funcionalidades exigiu o envolvimento direto de diversos designers, seus melhores arquitetos de softwares, inúmeros analistas de banco de dados, além, é claro, de 40 desenvolvedores, cujo trabalho será feito simultaneamente e dividido por features.
Agora, pense como seria a organização desse trabalho se todos esses profissionais tivessem a liberdade de integrar seus códigos apenas 1 vez por mês. Consegue imaginar a quantidade de conflitos e/ou bugs de difícil localização, a baixa coesão do trabalho executado, bem como o tamanho do esforço para conseguir entender o que saiu errado e onde estão os erros?
Na Integração Contínua, se houver um choque de versões entre dois desenvolvedores, por exemplo, essa inconsistência será detectada quando o segundo programador atualizar sua cópia local com os commits feitos pelos demais profissionais. A questão é que a cultura de detecção imediata do erro faz com que, de forma global, seus projetos de TI se tornem mais dinâmicos, menos custosos e dotados de muito mais qualidade. Ou seja, sem essa Torre de Babel citada acima.
Como funciona a Integração Contínua na prática?
Suponha que um desenvolvedor necessite construir um pequeno componente. Ele inicia sua atividade retirando uma cópia atual do código fonte, inserindo-a em sua máquina de desenvolvimento por meio de um sistema de controle de código.
A partir daí, já é possível promover alterações no código de produção ou iniciar uma série de testes, que serão executados de forma automatizada.
Uma vez que a build gerada seja considerada correta, é possível copiar suas alterações para um repositório. Na verdade, o que ocorre é, primeiramente, a atualização da cópia de trabalho dele com as versões feitas por outros programadores e, em seguida, a criação de uma nova build.
Se houver qualquer choque entre os trabalhos, as inconsistências serão exibidas na compilação e nos testes. Cabe ao profissional proceder às correções até que haja sincronia entre as tarefas executadas pelo time de TI.
Por fim, uma vez que um build esteja finalizado com sucesso, é possível lançar esta versão em ambiente de integração. Como boa parte dessas tarefas é automatizada, a CI configura-se como uma prática simples e que, se corriqueira, resultará em economia de tempo e de custos, além de muito mais velocidade nas entregas.
Detalhes fundamentais para o sucesso da Integração Contínua
O primeiro ponto que deve ser destacada é a relevância de ter um Sistema de Controle de Versão. Podendo destacar um Sistema de Controle de Versão Distribuído (SCVD) em que os desenvolvedores não apenas criam cópias das últimas versões dos fontes; em vez disso, cada desenvolvedor tem uma cópia completa do repositório.
Esse recurso garante que, se um servidor falhar, quaisquer das cópias geradas podem ser transferidas de volta a esse servidor.
Outra questão, não menos importante, que deve ser observado no chamado Continuous Integration é a importância de automatizar sua build, uma vez que, com isso, não será mais necessário clicar em caixas de diálogo, tampouco digitar comandos que só servem para gastar tempo e aumentar as chances de erros (compilação automática).
"Self-testing" build
Automatizações são essenciais em todos os processos de desenvolvimento. Dessa forma, é preciso incluir testes automáticos durante o processo de build, os quais podem detectar muitos bugs que, durante a pressão de produzir "a toque de caixa", podem não ser percebidos, mesmo pelos mais atentos desenvolvedores.
Testes unitários automatizados, integrados e funcionais ajudam a dar muito mais eficiência aos processos de trabalho em seu setor de TI.
Integração diária
A integração diária é essencial para reduzir o custo operacional de TI, melhorar a performance de sua equipe e, o mais importante, diminuir a pressão sobre os gerentes da área com relação aos erros na entrega de softwares.
Benefícios do processo de Continuous Integration
Falamos (em abundância), ao longo deste post, sobre as inúmeras vantagens dessa prática moderna de desenvolvimento de software. De todo modo, o que deve ficar claro é que o mais relevante benefício que a Integração Contínua provê aos gestores de equipes de TI é o de fazer o processo de correção de erros tornar-se significativamente mais fácil e rápido, uma vez que a detecção de falhas é precoce.
Além disso, a maior sinergia entre os membros da equipe auxilia no desenvolvimento de uma visão global do projeto por parte de cada profissional, o que contribui para entregas de softwares com muito mais qualidade.
O post de hoje objetivou introduzir Continuous Integration e suas vantagens para a gestão de projetos de Tecnologia da Informação. Todavia, você pode se aprofundar ainda mais em gerenciamento de excelência, baixando nosso e-Book Os segredos para otimizar a rotina da área de TI! Sucesso e boa sorte!