Integração Contínua é uma prática de desenvolvimento de software onde os membros de uma equipe integram seu trabalham frequentemente, usualmente uma vez por dia. Cada integração é verificada por uma rotina automatizada que detecta erros de integração tão cedo quanto possível. A adoção dessa abordagem em projetos de desenvolvimento de software resulta na redução significativa dos problemas de integração e permite que a equipe produza de forma consistente mais rapidamente.
O aumento da complexidade dos projetos de desenvolvimento de software tem exigido um aumento quantitativo de membros das equipes. A experiência mostra que esse crescimento demográfico dentro das equipes, frequentemente, resultam em problemas de integração. Em equipes grandes é comum, e muitas vezes necessário, que os desenvolvedores tenha que trabalhar simultaneamente no mesmo módulo de software ou em módulos interdependentes. Essa situação exige uma atividade eventual (mas complexa) de integração do trabalho que foi realizado paralelamente para que não hajam defeitos no produto gerado. Infelizmente, o trabalho de integração em software é um gargalo difícil de ser gerenciado, pois é difícil de ser previsto e mensurado. Além disso, esse é um trabalho, como qualquer outro que seja manual, é sujeito a falhas e pode comprometer a qualidade do produto gerado.
A Integração Contínua é uma solução simples para esse tipo de problema. A essência dessa prática está percepção de que o trabalho de integração não deve ser tratado como uma atividade isolada, mas como uma parte inerente as demais atividades de desenvolvimento. O termo “Integração Contínua” tem sua origem na metodologia de desenvolvimento ágil Extreme Programming, como uma de suas 12 práticas essenciais.
Introdução
Um pré-requisito importante para implementar um processo de Integração Contínua é a utilização de um repositório centralizado para o código-fonte do produto que está sendo desenvolvido, geralmente esse repositório é controlado através de um sistema de gerenciamento de configuração, como CVS, Subversion, Microsoft Visual SourceSafe ou IBM Rational ClearCase. Cada membro da equipe conecta-se ao repositório para obter uma cópia de trabalho do código-fonte do software que está sendo desenvolvido, e após a implementação de novas funcionalidades ou melhorias, o desenvolvedor atualiza o repositório com as modificações realizadas. Esse processo, em tese, é simples, contudo a prática mostra que o desenvolvimento paralelo (necessário para muitas equipes) aumenta a complexidade do projeto e o grau de dificuldade em manter o trabalho integrado.
Em um ambiente típico com múltiplos desenvolvedores trabalhando no mesmo código-fonte, mesmo com o uso de um sistema de gerenciamento de configuração, é comum que ocorram conflitos em que a produção de um membro da equipe tem efeitos indesejados sobre o trabalho de outro. Em alguns casos, o conflito só será resolvido após um minuncioso trabalho de integração, que juntará todo o código gerado pelos diversos membros da equipe em uma unidade coesa e estável do software que está sendo produzido. Quanto mais o trabalho de integração é postergado, maior se torna o esforço para conciliar os diversos componentes do software.
A idéia subjacente da Integração Contínua é antecipar ao máximo o trabalho de integrar o que é produzido pelos diversos membros da equipe de desenvolvimento.O que é necessário para fazer Integração Contínua em um projeto?Martin Fowler, um dos principais expoentes no tema, enumera dez práticas que são fundamentais para implementar a Integração Contínua em um projeto de software:
- Manter um repositório de código-fonte unificado.
- Automizar a construção do executável (build).
- Usar testes automatizados.
- Todos os membros da equipe devem atualizar o repositório diariamente.
- Cada atualização do repositório deve iniciar a construção do executável (build).
- Manter a construção do executável rápida.
- Testar em um clone do ambiente de produção.
- Tornar fácil que qualquer um obtenha o mais recente executável.
- Transparência (qualquer pode saber o que está acontecendo).
- Implantação automatizada.
Como implementar a Integração ContínuaA implementação efetiva da Integração Contínua em um projeto de desenvolvimento de software implica na utilização de um servidor de Integração Contínua, um combinado de hardware e software responsável pela automatização das rotinas de integração. Atualmente, a mais conhecida dessas ferramentas é o CruiseControl, que foi originalmente desenvolvido para projetos baseados em tecnologia Java, mas que foi portado para outras plataformas como .NET (da Microsoft) e Ruby on Rails.
A Unibrain oferece consultoria e treinamento para a implantação do CruiseControl. Se você precisa de ajuda para fazer seu projeto acontecer, entre em contato.
Referências
- Continuous Integration, por Martin Fowler – cientista-chefe da ThoughtWorks.
- Continuous integration, na Wikipedia.
- Extreme Programming, na Wikipedia.
- Integração Contínua com CruiseControl, por Luthiano Vasconcelos – consultor da Unibrain.