Esse artigo faz parte da revista Engenharia de Software 7 edição especial. Clique aqui para ler todos os artigos desta edição

Projeto

Ferramentas de Integração Contínua tornando o Trabalho de Equipes mais Organizado

Conhecendo os Bastidores

 

Diversas razões definem a presença de grandes grupos de desenvolvedores em uma mesma equipe para a criação de sistemas, tais como, tamanho, prazo de entrega solicitado pelo cliente, etc. Assim, a necessidade de desenvolvedores trabalharem em conjunto de forma organizada está presente em nosso dia a dia. Pensando nisso, como um projeto pode ter uma equipe organizada enquanto que um mesmo código fonte é compartilhado? Existem ferramentas que auxiliem nesse processo? Caso existam, quais seriam?

Para responder todas essas perguntas, podemos citar o conceito de integração contínua, bastante utilizado por processos ágeis, tais como Extreme Programming. A idéia principal consiste em integrar o trabalho realizado por várias pessoas durante diversos momentos do dia, e realizar testes que permitam assegurar que o código continue consistente ao final de cada integração.

A forma ideal para aplicar integração contínua é através do uso de diversas ferramentas, tais como, controle de versões (ex: CVS, Subversion e Clear Case), sistemas de build (ex: Ant, NAnt e Maven), além de notificações para usuários a partir de execuções realizadas (ex: email, MSN e SMS). Execuções, como, por exemplo, builds de projetos, são chamados de Jobs em diversos pontos no artigo.

Na Figura 1 ilustramos uma arquitetura que representa a idéia de integração contínua. Observe que nesse exemplo temos uma equipe com três desenvolvedores realizando mudanças em um mesmo arquivo ou em um conjunto de arquivos que constituem um projeto, compartilhado por um repositório localizado em outra máquina. No exemplo, consideramos que uma ferramenta própria para integração contínua instalada em outra estação é utilizada. A partir dela, poderíamos definir uma hora do dia para executar o build da última versão do projeto em desenvolvimento. Além disso, dependendo da ferramenta utilizada, podemos definir que uma notificação por e-mail deve ser enviada para toda a equipe de desenvolvimento informando se a execução foi realizada com sucesso ou se falhou.

 

Figura 1.  Arquitetura para representar integração Contínua.

 

Nesse artigo, apresentamos inicialmente uma visão geral de sistemas de build e de controle de versão. Em seguida, são apresentadas as principais características de três ferramentas de integração contínua: Cruise Control, Continuum e Hudson, e ao final do artigo é realizada uma comparação entre elas. A partir dessa comparação, será possível identificar quais suas principais vantagens e desvantagens.

Sistemas para Build

Sistemas de build são usados para agilizar e automatizar execuções de projetos, através da automatização de tarefas, como: compilação do código do sistema; compilação e execução dos testes unitários e de aceitação; geração de relatórios dos testes, de cobertura e de análise estática do código; e quaisquer outras atividades necessárias. Exemplos de ferramentas de build usadas hoje em dia são: Ant, Maven 1, Maven 2, NAnt, entre outras.

Sistemas para controle de versão

Um sistema de controle de versão é usado para armazenar e manter versões de arquivos, assim como, todo o código fonte de um sistema. Também conhecido por repositório, é responsável por automatizar tarefas como: identificação de mudanças locais; exibição das diferenças entre o código de um arquivo local e uma de suas versões armazenadas no repositório; identificação de quem realizou uma determinada alteração; incorporação de uma mudança em um arquivo local a uma versão do mesmo arquivo armazenada no repositório; sincronizar o código local com uma das versões do sistema ou de um arquivo armazenadas no repositório. Ferramentas muito usadas para desenvolvimento são as seguintes: Subversion, CVS, Clear Case.

Para realizar a integração contínua, é importante utilizar um sistema de controle de versões. Caso não haja um sistema desse tipo, torna-se difícil permitir que equipes com diversos desenvolvedores trabalhem juntos e compartilhem o código fonte de um mesmo projeto.

Imagine dois desenvolvedores alterando um mesmo arquivo. Duas grandes preocupações estariam presentes: a primeira refere-se a garantir que cada desenvolvedor esteja ciente que o mesmo arquivo está sendo alterado por outras pessoas, enquanto que a segunda seria entender quais mudanças foram feitas por cada desenvolvedor para que uma versão integrada possa ser gerada. A partir de sistemas que realizam controle de versão, tais preocupações podem ser mais facilmente gerenciadas.

Cruise Control

 

Instalação

Pré-requisito: Considerando a linguagem Java, instale o JDK 5.x ou superior.

Acesse o link ast-language: PT-BR">value="${env.CCDIR}/checkout/${project.name}"/>

  <property name="testdir"

value="${projectdir}/build/junit-reports"/>

...

  <project name="project1"/>

         ...

      <log>

            <merge dir="${testdir}">

 </log>

 

 <modificationset quietperiod="1" >

            <compound includeTriggerChanges="false"> ...

Quer ler esse conteúdo completo? Tenha acesso completo