Continuous Integration — Integração Contínua
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?
- 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;
- Realiza atividade de desenvolvimento (guiado por testes unitários e automatizados, de preferência);
- O desenvolvedor submete o código para o repositório onde informa sua alteração;
- É 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);
- Se necessário, é realizado o merge do código e todo conflito deverá ser solucionado;
- Gera-se o build localmente para se certificar que todos os testes passaram e nenhuma outra alteração possa ter influenciado na sua;
- É realizado o commit no repositório;
- 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.