Você está na página 1de 17

Pró-Reitoria Acadêmica

Escola de Tecnologia
Lato Sensu em Engenharia de Software
Trabalho de Sistematização

GERENCIAMENTO DE CONFIGURAÇÃO:
DESCRIÇÃO DE UMA FERRAMENTA

Brasília - DF
2017
SUMÁRIO

INTRODUÇÃO ............................................................................................................ 3
1 O GERENCIAMENTO DA CONFIGURAÇÃO ..................................................... 4
1.1 CONTROLE DE VERSÃO .................................................................................................................................... 5
2 APRESENTAÇÃO DA FERRAMENTA ............................................................... 6
3 O GERENCIAMENTO DOS ITENS DE CONFIGURAÇÃO ................................. 8
4 O GERENCIAMENTO DO CONTROLE DE VERSÕES .................................... 10
5 FUNCIONAMENTO DO BANCO DE DADOS DE GERENCIAMENTO DE
CONFIGURAÇÃO..................................................................................................... 12
6 NÍVEL DE SEGURANÇA DA FERRAMENTA .................................................. 13
7 RELAÇÃO DA FERRAMENTA COM O GERENCIAMENTO DE MUDANÇAS 15
REFERÊNCIAS......................................................................................................... 17
INTRODUÇÃO
O gerenciamento da configuração é uma importante abordagem para o
desenvolvimento de software. Ela envolve a concepção de catalogar através da
identificação e documentação todas as etapas e artefatos da construção do software
além de acompanhar através do monitoramento e controle toda a produção e as
entregas com o intuito de garantir a qualidade. Como apoio para o processo de
gerência da configuração existem várias ferramentas e softwares que auxiliam a
garantir a eficácia do processo.
Para este trabalho foi escolhida uma ferramenta open source que
apresenta a solução de gerenciar projetos de software de maneira descentralizada e
colaborativa, garantindo que a equipe desenvolva em uma mesma versão de software
e permitindo o controle de todos os artefatos produzidos e também que o trabalho da
equipe possa ser realizado remotamente, caso necessário, no projeto. Dentre as
características para a escolha da ferramenta foram identificadas as seguintes:
 Disponibilidade do código-fonte e de todas as suas versões;
 Visualização do código independe do sistema operacional utilizado;
 Catalogação de todas as alterações realizadas;
 Rastreamento de todas as alterações através dos registros catalogados;
 Comparação de diferenças entre as versões de código;
 Possibilidade de restauração a um ponto anterior, em casos de problema; e
 Adoção de um fluxo de trabalho que permita a aprovação das mudanças.
O GERENCIAMENTO DA CONFIGURAÇÃO

O ambiente de desenvolvimento de software está em constante evolução e


mudança e o processo de gerenciamento de configuração tem fundamental
importância para a qualidade do desenvolvimento de software. O gerenciamento da
configuração permite que durante o processo de desenvolvimento do software, tanto
o produto do desenvolvimento quanto os processos, documentos e artefatos que
compõem a construção e manutenção, sejam identificados, controlados,
acompanhados e auditados proporcionando assim uma garantia da qualidade nas
entregas e no processo.
De acordo com a norma ISO 12207, o processo de gerência de configuração é
um processo de aplicação de procedimentos administrativos e técnicos, por todo o
ciclo de vida de software, destinado a: identificar e definir os itens de software em um
sistema, e estabelecer suas baselines; controlar as modificações e liberações dos
itens; registrar e apresentar a situação dos itens e dos pedidos de modificação;
garantir a completeza, a consistência e a correção dos itens; e controlar o
armazenamento, a manipulação e a distribuição dos itens. Segundo Pressman (2006
p. 606), o processo de gestão de configuração de software define uma série de tarefas
que têm quatro objetivos principais:
 Identificar todos os itens de configuração;
 Gerir modificações em um ou mais destes itens;
 Facilitar a construção de diferentes versões de um mesmo produto;
 Garantir que a qualidade do software seja mantida à medida que a configuração
evolui ao longo do tempo.
O SWEBOK – Guia sobre conhecimento a Engenharia de Software, define que
o gerenciamento de configuração de software é a disciplina de identificar a
configuração de um sistema em momentos distintos, com o objetivo de controlar
sistematicamente as mudanças na configuração e manter a integridade e
rastreabilidade da configuração ao longo do ciclo de vida do sistema. Ou seja, tem a
finalidade de estabelecer e manter a integridade dos produtos de software durante
todo seu ciclo de vida, através da identificação da configuração do software; do
controle sistemático das mudanças de configuração; da manutenção da integridade e
a rastreabilidade da configuração ao longo do ciclo de vida do software; do controle
da integridade dos artefatos compostos, levando em conta cada um dos componentes
do software; e do registro e controle do estado do processo de alteração.
Além dos processos, existem modelos, ferramentas e métodos de engenharia
de software que apoiam a qualidade no processo de gerenciamento de configuração.
A existência de ferramentas de apoio torna a implantação e automatização do
processo mais sistematizado e controlado. Ferramentas de desenvolvimento de
software são ferramentas criadas para auxiliar no ciclo de vida do software. Essas
ferramentas normalmente automatizam algumas atividades do processo de
desenvolvimento, fazendo com que o analista se concentre nas atividades que exigem
maior trabalho intelectual (SWEBOK, 2004). Existem diversas ferramentas disponíveis
no mercado, entretanto é importante salientar que alguns fatores influenciam a
seleção de uma ferramenta de GCS, como por exemplo, as características do projeto
IEEE 1987, pg 15). Outras características também importantes são:
 Histórico de todas as alterações efetuadas nos itens de configuração;
 Criação de rótulos e ramificações no projeto;
 Recuperação de uma configuração em um determinado momento desejado do
tempo.

1.1 CONTROLE DE VERSÃO

O termo versionamento implica em suporte ao desenvolvimento paralelo, por


meio do qual o sistema evolui em diferentes variações para a adequação do software
a diferentes ambientes de operação, satisfazendo assim os requisitos do usuário
[Chang, Hung 1997]. O gerenciamento de versões é o principal processo do
gerenciamento de configuração de desenvolvimento de software, pois o papel desse
processo é disponibilizar os dados referente as diferentes versões dos componentes
de software através do registro de todas as alterações realizadas no contexto do
processo de evolução do software.
O controle de versões é usado no suporte à proliferação de itens gerados no
processo de desenvolvimento de software, provendo o gerenciamento deles,
gravando seus relacionamentos e suas propriedades comuns [Estublier 2002, pg 3].
O controle de versão serve para resolver três problemas:
 Registrar a evolução do projeto
 Possibilitar o trabalho em equipe
 Criar e manter variações do projeto
O principal objetivo do processo de gerenciamento do controle de versões é
registrar a evolução do projeto. As solicitações de mudanças implementadas além de
incrementar a evolução, são também registradas no histórico. De acordo com Dias
(2007), através do controle de revisão é possível coordenar atividades paralelas de
desenvolvedores através das seguintes funcionalidades:
 Disponibilização de todas as versões já produzidas de cada IC;
 Gerencia de diferentes ramos de desenvolvimento, possibilitando a
existência de diferentes versões ao mesmo tempo;
 Existência de políticas de sincronização de mudanças que evita a
sobreposição de mudanças;
 Fornecimento de um histórico completo de alterações sobre cada item
do projeto.
O armazenamento de versões dos artefatos no desenvolvimento de softwares
deve ser feito com a utilização de sistemas de controle de versões que possibilitam
um melhor domínio sobre as operações realizadas (Sommervile,1995) tais como:
rastreamento automático dos artefatos, garantia da integridade e registros históricos
das operações durante o desenvolvimento do artefato (quem, quando, o quê e por que
foi modificado).
Devido à complexidade das múltiplas versões, pessoas, e configurações em
desenvolvimento, uma gerência de mudanças é uma necessidade. Por essa razão, o
processo de Gerenciamento de Mudanças juntamente com o controle de versões
apoia o gerenciamento da configuração. É um processo de extrema relevância, pois
controla todas as alterações realizadas em desenvolvimento para que sejam
efetivamente disponibilizadas em produção visando garantir que todas as alterações
sejam realizadas de forma a gerar o menor impacto possível. Através da identificação,
documentação e relacionamentos dos itens de configuração é possível rastrear o
impacto que uma mudança pode causar. Essa análise, permite um melhor controle
do processo de desenvolvimento visando garantir que as mudanças não gerem
impacto significativo na continuidade do sistema.

APRESENTAÇÃO DA FERRAMENTA
O é um sistema de controle de versão distribuído e de gerenciamento
de código fonte criado por Linus Torvalds. É um software livre e sua distribuição é
realizada sob o termo da versão 2 da GNU – General Public License. As principais
características do Git são:
 Proporciona um melhor desempenho
 Permite trabalhar de forma distribuída
 Facilidade para a criação de branches
Na distribuição do Git, além da ferramenta de execução por linha de comando
também são disponibilizadas algumas ferramentas para o uso com interfaces gráficas,
como o Git Gui e o Gitweb e o Gitk.Também existem plugins para o uso com as IDEs
Eclipse (egit) e NetBeans (NetBeans Git Module).
Como integração do Git existe o GitHub que é um serviço web que oferece
diversas funcionalidades extras. O GitHub é uma plataforma de hospedagem de
código para controle de versão e colaboração. Esse serviço permite centralizar os
dados sobre o desenvolvimento facilitando assim o acesso as informações de
qualquer lugar e em tempo real e também dá suporte ao rastreamento de mudanças
no projeto. Além de servir como um repositório central também oferece alguns
recursos como, documentação, rastreamento de issues, notificações de ações por
email, wikis, histórico de commits, log de edições, opção de seguir um determinado
usuário ou repositório e acompanhar evolução, possibilidade de integração com outras
ferramentas, entre outras.
O Git pode ser obtido através do link: https://git-scm.com/downloads. Com o
intuito de melhorar a demonstração e facilitar a explicação, foram usados o Git Gui, o
Gitk e o GitHub, este último pode ser acessado através do link: https://github.com/. A
versão do Git usada para este trabalho está disponível na imagem abaixo:

Figura 01 – Sobre a ferramenta Git Gui


O GERENCIAMENTO DOS ITENS DE CONFIGURAÇÃO

No Git, os itens de configuração podem ser criados, armazenados, ramificados


e controlados, geralmente são os artefatos como código-fonte, arquivos e
documentos. A ferramenta gere todas as informações referentes ao item de
configuração além das modificações e também permite a pesquisa dos itens de
configuração disponíveis no repositório e mostra também a diferenças entre as
alterações realizadas. O Git armazena todas as versões dos itens de configuração. E
por meio dos registros é possível recuperar versões antigas de itens de configuração
de forma prática e eficiente.
Na figura 1 é demonstrado o histórico de alterações que foram realizadas no
arquivo README.md. No lado direito em azul, é mostrado os quatro primeiros campos
do commit no qual foi realizado a alteração, na frente é demonstrada a alteração que
foi realizada dentro do arquivo. Ao selecionar qualquer uma dessas linhas será
demostrado no espaço abaixo sinalizado pela seta, as informações pertinentes ao
item de configuração, que são o código hash SHA-1 completo do commit que gerou a
alteração, a informação de quando e quem realizou a ação e o tipo de ação realizada.
As ações sobre os itens de configuração podem ser de criação, atualização ou
exclusão. Através da exibição dessas informações é possível comparar as alterações
realizadas no item de configuração.
Na tela em questão foi selecionada a linha correspondente ao número 1 e no
campo abaixo, a ação de criação do item de configuração. Esse item sofreu 2
alterações após a sua criação, exibidos nas linhas 2 e 3 sinalizadas.

Figura 2 - Gerenciamento do item de configuração

Para visualizar quais os relacionamentos desse item de configuração, basta


clicar com o botão direito do mouse na linha desejada e selecionar a opção Show
History Context. Essa é a informação que permite rastrear e avaliar o impacto que
pode ser gerado com a alteração desse item de configuração.
Usando como base os dados do item de configuração apresentado na figura 1,
após selecionar a opção Show History Context da linha 3, a figura 2, exibe os
relacionamentos desse item de configuração após a última alteração realizada.
Figura 3 - Relacionamentos do item de configuração

Avaliando as informações apresentadas na figura 2, é possível identificar que


o item de configuração do tipo arquivo chamado README.md foi alterado na branch
master e que esse item também está incluso nas branches e tags sinalizadas no
retângulo vermelho.
É importante ressaltar que as modificações dos itens de configuração são
realizadas através da cópia desses itens para um ambiente de desenvolvimento local,
onde são realizadas e registradas as atividades de alterações e enviadas ao
repositório central.

O GERENCIAMENTO DO CONTROLE DE VERSÕES

O Git adota o versionamento nos diretórios dos projetos o que possibilita um


maior controle sobre o projeto, pois ao invés de alterar apenas o arquivo em questão
é alterada a cadeia lógica de referência desse arquivo o que garante que as
informações pertinentes desse arquivo não serão sobrescritas.
Entre os benefícios que o Git pode oferecer como apoio a esse processo estão
o controle e gerenciamento de históricos de alterações; identificação e restauração de
versões estabilizadas; ramificações que facilitam a divisão do projeto possibilitando o
trabalho de desenvolvimento em paralelo e a sincronização das atividades realizadas
pela equipe.
Como a sua filosofia é trabalhada em sistemas distribuídos, essa característica
permite que o desenvolvedor tenha em sua máquina de trabalho, uma cópia fiel do
projeto que se encontra no repositório central. Essa cópia é armazenada no repositório
local da máquina do usuário. Isso proporciona maior liberdade no desenvolvimento de
software, já que permite ao desenvolvedor armazenar diversas cópias de versão do
seu trabalho e as alterações serão realizadas primeiramente apenas no ambiente
local, ou working directory e onde podem ser criadas múltiplas variações no projeto,
ou seja, é o espaço de rascunho. As alterações realizadas no workspace podem ser
enviadas para um ambiente temporário chamado de staging area, para só então
serem enviados para o repositório local, ou local repository. E posteriormente serem
enviados para o repositório central (remote repository), nessa fase, as alterações
precisarão de aprovação para integrarem o código disponível no repositório central do
projeto, mostrado na figura abaixo:

Figura 4 – Relacionamento dos repositórios

A principal diferença do git para outras ferramentas de versionamento é o


modelo de ramificações (também conhecido como branch) que permite que o
desenvolvimento seja realizado em múltiplas branches diferentes e totalmente
independentes uma da outra.
A visualização do histórico completo de alterações, também conhecido como
commit e das ramificações ou branches, marcações e demais detalhes podem ser
visualizadas na tela abaixo:

Figura 5 -

Na figura, os círculos em azul representam as alterações realizadas, o círculo


amarelo indica o estado atual do repositório e o círculo vermelho indicam as
modificações no working directory.

FUNCIONAMENTO DO BANCO DE DADOS DE GERENCIAMENTO DE


CONFIGURAÇÃO

No git o banco de dados é chamado de repositório, que é o local onde a


ferramenta armazena todos os arquivos gerenciados. Esse repositório geralmente é
alocado em um servidor central permitindo assim fácil acesso aos dados. Além da
versão atual dos arquivos, são armazenados também seus históricos, que é a coleção
de registros das alterações realizadas nos arquivos conforme visualizado na figura
xxxxx.
Conforme já explicado anteriormente, a ferramenta realiza uma cópia do banco
de dados para a máquina do desenvolvedor, permitindo assim que as manipulações
sejam realizadas sem que haja interferência imediata nos dados disponíveis no banco
de dados central.
A integração com o GitHub pode ser usada como banco de dados de
Gerenciamento de Configuração, porque além de servir como repositório central do
código fonte para o git e exibir exatamente todos os dados, hospeda também qualquer
arquivo que haja a necessidade de versionamento, contribuindo assim para o
gerenciamento dos itens de configuração e consequentemente para o gerenciamento
da configuração. Um exemplo é o histórico ou versionamento de documentos na Wiki
do GitHub:

Figura -

NÍVEL DE SEGURANÇA DA FERRAMENTA

Para o gerenciamento da configuração o git oferece um alto nível de segurança,


já que trabalha com a garantia dos dados. O modelo de dados usado pela ferramenta
garante a integridade criptográfica de cada bit do projeto através do mecanismo de
hash SHA-1, na qual antes do armazenamento das informações, é realizado um
cálculo de checksum que é adicionado e referenciado na informação armazenada. Por
essa razão o git armazena as informações pelo hash do conteúdo e não pelo nome
do arquivo. O hash é uma frase de 40 caracteres composta de dígitos (0-9) e letras
(a-f) e é calculada conforme a estrutura do diretório ou o conteúdo do arquivo
armazenado. Portanto, o hash SHA-1 gerado pelo cálculo é o ID das informações
armazenadas. Portanto, qualquer alteração realizada gera um novo hash o que
inviabiliza que qualquer informação seja sobrescrita, ou seja, é impossível alterar
qualquer arquivo, data, mensagem de confirmação ou qualquer outro dado em um
repositório git sem alterar os IDs.
Na figura 1, é demonstrado o ID, ou seja, o hash SHA1 de um commit realizado
na branch iralhi-path-1.

Figura -

Figura 1 - Demonstrando o hash gerado em um commit

O GitHub proporciona uma melhor visualização, permitindo verificar todos os


IDs de forma rápida e fácil, entretanto é mostrado apenas os 7 primeiros campos do
hash SHA1 e para ter acesso ao hash SHA1 completo é necessário clicar em “Copy
the full SHA”.
Figura -

Figura 2 –Demonstração do hash no github

RELAÇÃO DA FERRAMENTA COM O GERENCIAMENTO DE MUDANÇAS

As informações descritas nos tópicos anteriores demonstram que o Git fornece


apoio ao processo de gerenciamento de mudanças, já que auxilia tanto no
gerenciamento dos itens de configuração quanto no gerenciamento de controle de
versões.
Na ferramenta o fluxo de trabalho é configurado para que antes das alterações
serem efetivamente integradas ao código-fonte do repositório central, as solicitações
de mudanças, ou o merge request, passem pelo processo de aprovação e só serão
efetivamente integradas caso sejam aprovadas. O catálogo com o registro dos itens
de configuração e seus relacionamentos fomentam a avaliação do impacto que essas
solicitações de mudanças podem gerar.
Convém ressaltar que a avaliação do impacto da mudança pode e deve ser
realizada ainda no working directory, já que a forma de trabalho da ferramenta
detalhada na figura xxx mostra que a integração no local repository só é realizada
após passar pela a staging area.
A integração do Git com o GitHub, esse processo é melhor delineado. A figura
xxx mostra que existe um merge request (ou pull request nome utilizado no GitHub)
pendente de avaliação para que seja integrado no repositório central.

Figura -
REFERÊNCIAS

Chan, A. K. F.; Hung, S. Software Configuration Management Tools, 8th


International Workshop on Software Technology and Engineering Practice
(STEP '97) (including CASE '97), 1997.

Dias, T.M.R. Estudo da viabilidade de práticas e valores do extreme


programming no processo de desenvolvimento de software baseado no
modelo MPS.BR, LAVRAS, 2007.

Estublier, J.; D. Leblang, G.; Clemm, R.; Conradi, W.; Tichy, A. van der Hoek, and
D. Wiborg-Weber, Impact of the Research Community on the Field of Software
Configuration Management, ACM Software Engineering Notes, vol. 27, no. 5, 2002.

GIT. Documentação Disponível em https://git-scm.com/doc. Acesso em 16/11/2017

IEEE - The Institute of Electrical and Electronics Engineers, IEEE Guide to Software
Configuration Management, ANSI/IEEE std 1042-1987, 1987.

Sommerville, I. Software Engineering, 5ed. AddisonWesley, 1995.

SWEBOK. Guide to the Software Engineering Body of Knowledge. 2004 Version.


A project of the IEEE Computer Society Professional Practices Committee.
Disponível em: https://www.computer.org/web/swebok. Acesso em: 21 nov. 2017.