As mudanças são constantes e inevitáveis no que tange o desenvolvimento de software. Isso ocorre porque o entendimento dos usuários mudam conforme as suas necessidades, o ambiente muda constantemente, a legislação está em constante mudança e os requisitos também sempre mudam. Com tantas mudanças necessitamos de alguma forma de gerenciamentos para que o desenvolvimento não siga em direção ao caos.

Dessa forma, surgiu a Gerência de Configuração de Software (GCS), ou em inglês Software Configuration Management (SCM), que é um conjunto de atividades de apoio que permitem controlar as mudanças que ocorrem no desenvolvimento de software, mantendo a estabilidade na evolução do projeto.

Entre outras coisas a Gerência de Configuração de Software responde a algumas questões como: Quais mudanças aconteceram no sistema? Por que essas mudanças aconteceram? O sistema continua íntegro mesmo após as mudanças?

Para entendermos um pouco mais o que vem a ser a Gerência de Configuração de Software é interessante definirmos o que vem a ser configuração. Configuração de um sistema é uma coleção de versões específicas de itens de configuração como hardware ou software que são combinados de acordo com procedimentos específicos de construção para servir a uma finalidade particular. A Gerência de Configuração de Software por sua vez é uma disciplina que identifica a configuração de um sistema em diferentes pontos no tempo com a finalidade de controlar sistematicamente as mudanças realizadas, mantendo a integridade e rastreabilidade da configuração através do ciclo de vida do sistema.

Alguns dos produtos que podemos colocar sobre o gerenciamento de configuração incluem: Hardware e equipamentos, desenhos ou modelos, especificação de produtos, ferramentas, códigos e bibliotecas, compiladores, ferramentas de testes e scripts de testes, log de instalação, publicações técnicas de produtos, planos, histórias de usuários, backlog das iterações, descrições dos processos, requisitos, documentação de arquitetura, processos, etc.

Portanto, a configuração é o estado do conjunto de itens que formam o sistema em um determinado momento e a Gerência de Configuração de Software é quem controla a evolução dessas configurações durante o ciclo de vida do projeto.

Quer se aprofundar mais na Engenharia de Software? Não deixe de conferir nossos cursos online de Engenharia de Software.

A importância da Gerência de Configuração de Software é comprovada quando analisamos os diversos modelos de maturidade de desenvolvimento. Alguns modelos como o CMMi, MPS-Br e o SPICE incluem a disciplina de Gerência de Configuração de Software. Se observarmos o RUP podemos notar que a Gerência de Configuração e Mudanças é uma disciplina dentro do processo de desenvolvimento. Esta disciplina explica como controlar e sincronizar a evolução do conjunto de Produtos de Trabalho que compõem o sistema de software. Entre as tarefas realizadas dentro da disciplina de Gerência de Configuração e Mudanças temos a atividade Gerenciar Solicitações de Mudanças em que é dada uma consideração adequada ao impacto de mudanças no projeto e é onde as mudanças aprovadas são feitas de maneira consistente em um projeto. A tarefa Planejar Controle de Mudança e Configuração do Projeto estabelece um plano adequado para gerenciar e controlar mudanças para os artefatos desenvolvidos como produtos de trabalho do processo de desenvolvimento do software. A tarefa Criar Ambientes para CM do Projeto estabelece um ambiente, no qual o produto geral possa ser desenvolvido, construído e disponibilizado aos envolvidos. A tarefa Monitorar e Relatar o Status de Configuração fornece visibilidade para a atividade de alteração de configuração pelo monitoramento e relatório contínuos. A tarefa Alterar e Liberar Itens de Configuração gerencia os artefatos do projeto e o trabalho envolvido a partir da criação inicial como artefatos particulares por meio da entrega e da disponibilidade geral para a equipe do projeto e dos envolvidos. A tarefa Gerenciar Baselines e Releases garante que conjuntos consistentes de artefatos dependentes ou relacionados possam ser identificados como parte de uma "baseline" para várias partes de uma "baseline" para várias finalidades, como a identificação de release, versões do produto, maturidade do artefato ou integralidade.

No modelo CMMi, o nível dois trás o “Configuration Management (CM) (CMMI-DEV)” que é responsável por estabelecer e manter a integridade dos produtos de trabalho usando a identificação da configuração, controle de configuração, status da configuração e auditoria da configuração. Entre as atividades envolvidas temos a identificação da configuração de um produto de trabalho selecionado que compõe a baseline em um dado ponto do tempo, o controle de mudanças, a construção ou especificação para construir produtos de trabalho do sistema de gerenciamento de configuração, manter a integridade da baseline e prover status e informação da configuração atual para desenvolvedores, usuários e clientes.

Nas próximas seções veremos as atividades e ferramentas de gerência de configuração de software.

Atividades e Ferramentas de Gerência de Configuração de Software

A Gerência de Configuração de Software é formada pelas atividades de Controle de Versão, Controle de Mudanças e Integração Contínua. Nas próximas seções detalharemos mais cada uma dessas atividades bem como as ferramentas envolvidas em cada uma delas.

Controle de Versão

Esta atividade é responsável por apoiar as atividades de controle de mudanças e integração contínua. Basicamente o Controle de Versão fornece os seguintes serviços:

  • Identifica, armazena e gerencia os itens de configuração e as suas versões durante todo o ciclo de vida do software;
  • Mantém o histórico de todas as alterações realizadas nos itens de configuração;
  • Cria os rótulos e ramificações no projeto;
  • Recupera uma configuração em um determinado momento desejado tempo.

Entre os aplicativos Open Source disponíveis para o controle de versão temos o Mercurial, Git, Subversion e o CVS. Os aplicativos comerciais disponíveis temos o Team Foundation Server da Microsoft, Team Concert da IBM/Rational, StarTeam, entre outros.

As ferramentas mais utilizadas na indústria de software atualmente têm sido o SVN e o Mercurial que tem crescido bastante. O CVS já foi bastante utilizado, mas há anos tem sido substituído pelo SVN.

Controle de Mudanças

Esta atividade é responsável por fornecer um serviço complementar ao serviço oferecido pelo sistema de controle de versão onde o foco desse tipo de ferramenta está nos procedimentos pelos quais as mudanças de um ou mais itens de configuração são propostas, avaliadas, aceitas e aplicadas. O Controle de Mudanças fornece os seguintes serviços:

  • Identificar as mudanças nos itens de configuração;
  • Rastrear as mudanças nos itens de configuração;
  • Analisar as mudanças nos itens de configuração;
  • Controlar as mudanças nos itens de configuração;

Entre os aplicativos Open Source disponíveis para o controle de mudanças temos o Trac, Redmine, Mantis e o Bugzilla. Os aplicativos comerciais disponíveis temos o JIRA, FogBUGZ, CaliberRM, Perforce.

As ferramentas mais utilizadas na indústria de software atualmente têm sido o Mantis, Redmine e o Bugzilla. Todas essas ferramentas tem uma excelente aceitação sendo consideradas bastante robustas, mas ao mesmo tempo objetivas e com uma interface limpa.

Integração Contínua

Esta atividade é responsável por garantir que as mudanças no projeto são construídas, testadas e relatadas tão logo quanto possível depois de serem introduzidas. Todo esse processo é executado geralmente após cada mudança publicada no sistema de controle de versão ou em intervalos de tempo pré-definidos.

A integração contínua é realizada através da combinação de duas ferramentas separadas onde uma faz a construção do software e a outra monitora alterações no controle de versão e dispara a primeira para a construção.

Entre os aplicativos Open Source disponíveis para a integração contínua temos o Bitten, SCons, Ant, Maven, CruiseControl, Gump, TinderBox, entre outros. Os aplicativos comerciais disponíveis temos o AntHill Pro, FinalBuilder, e o BuildForge.

As ferramentas mais utilizadas na indústria de software atualmente têm sido o Ant, mas que tem sido substituído cada vez mais pelo Maven. O CruiseControl e o Jenkins tem sido bem utilizado também, mas ainda estão em crescimento.

Escolhendo a ferramenta

Cada uma das ferramentas tem uma quantidade de funcionalidades, maturidade, documentação e suporte, além da sua própria popularidade. Embora as ferramentas comerciais normalmente possuam mais funcionalidades e um suporte diferenciado, nem sempre isso é uma verdade determinante em relação às ferramentas Open Source no caso das ferramentas para a gerência de configuração e mudanças. Isso porque as ferramentas Open Source disponíveis atualmente possuem alta qualidade, muitas funcionalidades integradas e um suporte grande da comunidade ou suporte de uma empresa especializada em casos que esse suporte seja necessário, o que torna uma opção muito viável e utilizada por grandes organizações atualmente.

No restante do artigo veremos na prática como funciona uma das ferramentas para o controle de mudanças mais utilizados e conhecidos nas organizações, o Bugzilla. Veremos como podemos criar um novo usuário, criar novos bugs, buscar por um bug através de pesquisas simples e complexas, entre outras funcionalidades e aspectos da sua interface.

Ferramenta de Controle de Mudanças Bugzilla

O Bugzilla é uma ferramenta de controle de mudanças baseada na Web que dá suporte ao desenvolvimento de software. O Bugzilla é utilizado em diversas empresas, entre elas o projeto Mozilla. De forma geral tem-se que o Bugzilla é utilizado por mais de 1268 projetos, organizações e empresa ao redor do planeta. O Bugzilla rastreia defeitos e serve como uma plataforma de solicitação de recursos. Em algumas empresas, por exemplo, os clientes tem acesso ao Bugzilla e podem solicitar mudanças, funcionalidades, reportar bugs, etc.

Além disso, o Bugzilla é um projeto de software livre mantido por diversos voluntários e organizações internacionais como a NASA, NBC, entre outros.

O Bugzilla está licenciado sob a MPL (Mozilla Public License) e foi desenvolvida na linguagem Perl com uso dos bancos de dados MySQL, Oracle, PostgreSQL e SQLite.

Nas próximas seções veremos como podemos navegar pelo Bugzilla criando usuários que terão acesso ao sistema, realizando pesquisas simples e avançadas, e por fim como cadastrar bugs no sistema. A versão utilizada na próxima seção não necessita de instalação, podendo ser utilizada apenas para testar as funcionalidades do Bugzilla.

Para instalar a ferramenta numa máquina podemos visitar o site oficial,onde se encontra todo o passo a passo para realizar a instalação do Bugzilla versão 4.4.5.

Existem também demos para outras ferramentas de controle de mudanças, como o DEMO para o Mantis, e o DEMO para o JIRA.

Navegando no Bugzilla

Para testar a ferramenta Bugzilla podemos visitar o seu site oficialque contém um demo para que possamos testar a ferramenta. Segue na Figura 1 a tela inicial do Bugzilla.

Tela inicial do Bugzilla
Figura 1. Tela inicial do Bugzilla

O primeiro passo para utilizar o Bugzilla é criarmos um novo usuário. Para isso devemos selecionar a opção “Open New Account”. Após isso deveremos informar nosso endereço de e-mail, pois receberemos uma confirmação se realmente queremos abrir uma conta no Bugzilla e uma URL para finalizar o cadastro. Segue na Figura 2 a tela de solicitação de e-mail para criar a conta na ferramenta.

Preenchendo os dados do endereço eletrônico para acessar a ferramenta
Figura 2. Preenchendo os dados do endereço eletrônico para acessar a ferramenta

Agora devemos ir até o nosso e-mail e verificar o e-mail recebido. Na descrição do e-mail clique na URL indicada para continuar o processo de criação da conta. Segue nas Figuras 3 e 4 o e-mail recebido.

E-mail recebido pelo Bugzilla
Figura 3. E-mail recebido pelo Bugzilla
Descrição do e-mail para criação da conta
Figura 4. Descrição do e-mail para criação da conta

Após clicar na primeira URL acima seremos encaminhados para a tela de prosseguimento do cadastro. Basta colocarmos o nome e uma senha de seis caracteres. Após isso basta clicar em “Create”. Segue na Figura 5 a tela.

Tela de cadastramentos de dados
Figura 5. Tela de cadastramentos de dados

Após isso receberemos uma tela de confirmação que a conta foi corretamente criada conforme indica a Figura 6 abaixo.

Tela de confirmação
Figura 6. Tela de confirmação

Agora que a nossa conta foi criada corretamente podemos começar a cadastrar bugs, pesquisa-los, etc. Para cadastrar um bug clique em “New” no canto inferior esquerdo da tela conforme ilustra a Figura 7 abaixo.

Selecionando a opção para criação de um bug no Bugzilla
Figura 7. Selecionando a opção para criação de um bug no Bugzilla

Agora devemos selecionar o produto onde o bug foi encontrado. A titulo de exemplo selecionamos o produto “WorldControl”, conforme mostra a tela da Figura 8.

Selecionando o produto para cadastrar o bug
Figura 8. Selecionando o produto para cadastrar o bug

Com isso já podemos cadastrar um bug no Bugzilla conforme ilustra a tela da Figura 9.

Cadastrando um bug no Bugzilla
Figura 9. Cadastrando um bug no Bugzilla

Na tela de cadastramento de bugs temos as opções “Component” que é um segundo nível de categoria que pertence a um produto em particular (Bugs são categorizados em Produtos e Componentes), “Version” que se refere à versão do sistema na qual o bug foi encontrado, “Severity” que é o nível de severidade do bug sendo cadastrado (ou se é uma melhoria), “Hardware” que é o hardware em que o bug foi encontrado, “OS” que se refere ao sistema operacional em que se manifestou o problema, “Summary” é uma pequena sentença que sucintamente descreve o que é o bug, “Description” que é uma descrição completa do bug e "Attachment"na qual podemos adicionar documentos, imagens capturadas, ou qualquer outra informação que ajude na identificação e resolução do bug. Por fim clicamos em "Submit Bug" para submeter o bug ao Bugzilla.

O interessante é que quando começamos a digitar qualquer coisa em “Summary” o Bugzilla nos apresenta possíveis duplicatas, o que ajuda a não inserirmos bugs repetidos na ferramenta. Segue na Figura 10 o Bugzilla apresentando algumas opções conforme vamos digitando os caracteres no campo Summary.

Opções de possíveis bugs duplicados são exibidos abaixo de “Summary” conforme vamos digitando
Figura 10. Opções de possíveis bugs duplicados são exibidos abaixo de “Summary” conforme vamos digitando

Após submeter o bug ainda podemos configurar diversas outras opções conforme ilustra a Figura 11 abaixo.

Outras configurações referentes ao bug sendo cadastrados
Figura 11. Outras configurações referentes ao bug sendo cadastrados

Entre as opções adicionais temos o "Assigned To" em que se define alguém para consertar o bug, "URL" onde o bug pode ser encontrado, "Keywords" para definir palavras chaves de forma a facilitar encontrarmos o bug no sistema de busca, entre outros.

Para mais informações sobre o significado dos campos disponíveis basta visitarmos o site do Bugzilla https://landfill.bugzilla.org/bugzilla-4.0-branch/page.cgi?id=fields.html, que contém diversas informações referente as opções disponíveis no Bugzilla.

Para fazer uma pesquisa aos bugs cadastrados podemos utilizar o menu principal clicando no ícone de pesquisa em “Search” ou então podemos utilizar o campo “Search” no canto superior conforme mostra a Figura 12.

Realizando uma busca no Bugzilla
Figura 12. Realizando uma busca no Bugzilla

Na tela de pesquisa procuramos pelo bug “controle de temperatura”, conforme ilustra a Figura 13 abaixo.

Pesquisando por bugs no sistema
Figura 13. Pesquisando por bugs no sistema

Após a pesquisa temos como resultado o nosso bug encontrado conforme ilustra a Figura 14.

Resultado da pesquisa realizada
Figura 14. Resultado da pesquisa realizada

Podemos melhorar a pesquisa clicando em “Advanced search” conforme mostra a imagem abaixo:

Selecionando a pesquisa avançada
Figura 15. Selecionando a pesquisa avançada

Na tela de pesquisa avançada podemos definir melhor a pesquisa de um bug conforme ilustra a Figura 16 abaixo.

Definindo opções para a busca avançada
Figura 16. Definindo opções para a busca avançada