Gerência de configuração de software, gerência de configuração ou ainda gestão de configuração de software é uma área da engenharia de software responsável por fornecer o apoio para o
desenvolvimento de software. Suas principais atribuições são o controle de versão, o controle de mudança e a auditoria das configurações. Roger Pressman, em seu livro Software Engineering: A Practitioner's Approach, especifica que a gerência de configuração de software (GCS) é o:“
conjunto de atividades projetadas para controlar as mudanças pela identificação dos produtos do trabalho que serão alterados, estabelecendo um relacionamento entre eles, definindo o mecanismo para o gerenciamento de diferentes versões destes produtos, controlando as mudanças impostas, e auditando e relatando as mudanças realizadas.
”
Mudanças durante o desenvolvimento de software são inevitáveis; o ambiente no qual o sistema opera muda, o entendimento dos usuários e desenvolvedores sobre o sistema muda, os requisitos mudam. Com tantas mudanças assim, como evitar que o desenvolvimento fique caótico? A área da Engenharia de Software que trata esse assunto é a Gerência de Configuração de Software: Gerência de Configuração de Software (GCS) é
um conjunto de atividades de apoio que permite a absorção ordenada das mudanças inerentes ao desenvolvimento de software, mantendo a integridade e a estabilidade durante a evolução do projeto. As atividades da GCS e as respectivas ferramentas de apoio são:
Controle e Acompanhamento de Mudanças
Mudanças aparecem durante todo o desenvolvimento e devem ser registradas, avaliadas e agrupadas de acordo com sua prioridade. Com base nessas informações, é possível planejar melhor o escopo, prazo e o custo de cada iteração. Em seguida, à medida que o desenvolvimento acontece, pode-se acompanhar o estado da solicitação da mudança até sua implementação e até o lançamento de uma versão em produção.
Existem várias ferramentas disponíveis que executam essas ações. Alguns exemplos (em ordem alfabética) são:
- BitBucket
- Bugzilla
- GitHub
- Jira
- Phabricator
- Redmine
- Trac
Registro da Evolução do Projeto
Cada vez que uma solicitação de mudança é implementada, acontece um incremento na evolução do projeto que deve ser registrado no histórico. Este incremento corresponde a uma configuração:
Configuração é o estado do conjunto de itens que formam o sistema em um determinado momento.
As funcionalidades oferecidas pelo controle de versão vão além do simples registro do histórico das configurações. O controle de versão tem outras responsabilidades importantes: possibilitar a edição concorrente sobre os arquivos e a criação de variações no projeto.
O controle de versão é a parte principal da GCS. É o elo comum entre o controle de mudança e a integração do projeto.
Exemplos de ferramentas de controle de versão:
- Git
- Mercurial
- Subversion
Verificação da Integridade do Sistema
O objetivo da integração é verificar se a construção do sistema a partir dos itens registrados em uma configuração é bem sucedida.
Integrar o sistema consiste em construir o sistema a partir dos itens registrados em uma configuração.
Em termos práticos, a integração é feita através de scripts que automatizam a construção, testes e também a coleta de métricas de qualidade. As ferramentas de integração contínua acompanham o controle de versão e disparam os scripts cada vez que uma nova configuração é registrada.
Exemplos de ferramentas de integração contínua:
- BuildBot
- CircleCI
- CodeClimate
- CodeShip
- Concourse
- Drone.io
- Jenkins
- Travis CI
GCS na Engenharia de Software
A Gerência de Configuração de Software é a base para as demais áreas de Engenharia de Software: Por isso, aparece como requisito de implementação já no nível inicial de diversos modelos de maturidade de processo de desenvolvimento tais como o CMMI-DEV, SPICE e o MPS-Br.
Do ponto de vista das ferramentas, a divisão entre as áreas não é muito nítida. As ferramentas de controle de mudança e integração contínua oferecem mais funcionalidades do que as exigidas pela GCS e avançam sobre áreas de Gerência de Projeto e Teste & Qualidade.
Fluxo de Trabalho
As solicitações de mudança ficam registradas no controle de mudança. Em seguida, um desenvolvedor se torna o responsável pela implementação de uma solicitação e registra a configuração resultante no controle de versão, o que dispara a integração contínua para execução da construção e testes automatizados, além da coleta de métricas da qualidade do código. Os resultados são apresentados imediatamente a toda equipe, que podem tomar as providências necessárias em caso de qualquer problema.
Considerações Finais
A Gerência de Configuração de Software é essencial para produzir software de qualidade. Existem diversas ferramentas open source de GCS disponíveis. Por isso, não há desculpa para não usar alguma. E sim, é preciso um esforço inicial para entender os conceitos, definir alguns processos, integrar e aprender a usar as ferramentas, mas é um investimento baixo pelo retorno que oferece.