terça-feira, 23 de agosto de 2011

Gerência de configuração de software

1 - Introdução
 
A configuração de software engloba todos os artefatos que são confeccionados para se produzir um sistema computacional, e estes deverão ser controlados, incluindo desde a documentação, passando pelo escopo inicial, até a fase de manutenção. Como todo software deve evoluir para atender às necessidades mutáveis do cliente, é certo que toda essa documentação deverá sofrer muitas alterações no decorrer do ciclo de vida. Se essas mudanças não forem bem gerenciadas a equipe terá grandes problemas e poderá até perder o controle sobre o sistema.

A seguir temos
os fundamentos da gerência de configuração de software, seus benefícios e as ferramentas automatizadas que podem contribuir para sua implementação.

2 – O Problema da Manutenção de Software
 
Para compreender o aspecto de configuração de sistemas, é preciso entender como eles são originados. A rotina de trabalho diária de milhares de pessoas em todo o mundo está condicionada à execução de tarefas que demandam tempo e atenção para serem realizadas. É o caso, por exemplo, de um funcionário que precisa fechar o movimento de caixa de uma loja no final do dia. Utilizando o formulário de papel próprio e que não pode ser rasurado, ele começa o trabalho. Lá pelas tantas, comete um erro e é obrigado a começar tudo de novo. Não é raro essas pessoas terem que refazer o preenchimento uma dezena de vezes até que esteja tudo correto e sem rasuras. Problemas como o descrito acima levaram à busca de soluções que culminaram na informatização de processos, pois os computadores poderiam auxiliar em muito as pessoas, uma vez que facilitam a execução de tarefas repetitivas. Agora, com um clique de botão é possível gerar todo o movimento de caixa.

Da mesma forma, centenas de milhares de rotinas foram racionalizadas de forma que pudessem ter suas tarefas executadas ou auxiliadas por sistemas computacionais. Esse fato leva a muitas vantagens, destacando a economia de mão-de-obra, de tempo e de dinheiro. Entretanto, no intuito de informatizar as tarefas, os sistemas tornaram-se extremamente dependentes delas, ou seja, se a regra de negócio de uma rotina de trabalho sofrer modificações, sua contraparte informatizada também deverá ser alterada.

Modificações nas rotinas de trabalho podem acontecer a qualquer época e por vários motivos. O que deve ser compreendido é que elas são um fato normal no desenvolvimento do programa. Clientes querem modificar requisitos, desenvolvedores querem modificar a abordagem técnica e gerentes querem modificar a estratégia do projeto. Com o passar do tempo, as partes envolvidas ficam sabendo mais sobre o que necessitam. Esse conhecimento adicional é a origem da maioria das modificações.

Reunindo as causas mais comuns de alterações pode-se destacar:
·Novas condições do negócio ou do mercado alteram os requisitos da tarefa. Exemplo: um plano de saúde passar a aceitar um número limitado de dependentes quando antes era ilimitado;
·Mudanças nas leis que regulamentam o processo. Um novo dispositivo em uma lei que regulamenta um processo gera um novo requisito que deve ser implementado no sistema;
·Novas necessidades do cliente exigem modificações nos dados produzidos;
·Reorganização, aumento ou diminuição dos negócios causam modificações nas prioridades do projeto.

3 – Gerenciamento de Configuração de Software
 
Como visto no capítulo anterior, alterações em sistemas são inevitáveis no decorrer do seu ciclo de vida. O problema é que elas aumentam o grau de confusão entre os analistas que estão trabalhando em um projeto quando as modificações não são analisadas antes de serem feitas; quando as modificações não são registradas antes de serem implementadas; não são relatadas para aqueles que têm necessidade de saber delas e não são controladas para melhorar a qualidade e reduzir os erros.

Gerência de Configuração de Software, ou simplesmente GCS, é um conjunto de atividades desenvolvidas para administrar modificações ao longo do ciclo de vida do sistema computacional. As principais atividades da GCS são: 
· Identificar os produtos de trabalho que podem ser modificados, estabelecendo relacionamento entre eles;
· Definir mecanismos para administrar as diferentes versões desses produtos de trabalho; 
· Controlar as modificações impostas e fazendo auditoria e preparando relatórios sobre as modificações realizadas.
· Garantir que os procedimentos e políticas para criar, modificar e testar o código estejam sendo seguidos; 
· Tornar acessíveis as informações sobre o projeto.

A GCS pode ser vista como uma atividade de garantia de qualidade de software aplicada ao longo de todo seu processo de desenvolvimento.

Um dos principais mecanismos para permitir o controle sobre as modificações de código é fazer com que o usuário preencha uma solicitação oficial de manutenção. Esta deverá ser avaliada por uma comissão de controle de modificações que será responsável por aprovar e autorizar as modificações. Um histórico da evolução dos componentes do sistema deverá ser mantido junto com um registro das razões para sua modificação.

A Gerência de Configuração de Software também é conhecida pelo seu acrônimo em língua inglesa SCM (Software Configuration Menagement).

3.1 - Itens de Configuração de Software
 
Itens de configuração de software são todos os artefatos confeccionados durante o projeto de um software que serão controlados pela gerência de configuração. Há três categorias principais de itens de configuração:
· Programas de computador, tanto na forma de código fonte quanto de arquivos executáveis;
· Aplicativos que auxiliam tanto técnicos quanto usuários;
· Os dados manipulados e/ou gerados por sistemas computacionais.

3.2 - Processo de Gerência de Configuração
 
Para se alcançar os benefícios da tecnologia da gerência de configuração, há que se conhecer seu processo que é dividido em uma série de tarefas que tem quatro objetivos principais: identificar os itens que definem coletivamente a configuração do software; gerir modificações em um ou mais desses itens; facilitar a construção de diferentes versões de uma aplicação e garantir que a qualidade do software seja mantida à medida que a configuração evolui ao longo do tempo.

Podem-se estabelecer quatro tarefas básicas para a gerência de configuração: identificação, controle de versão, controle de modificação e auditoria de configuração. Isso significa que após a criação de cada elemento de software, chamado também de item de configuração, este deverá ser identificado, ter suas solicitações de modificações registradas, ter suas versões controladas, possibilitar consultas (relatórios) e conferências.

3.2.1 - Identificação dos Itens de Configuração

Quando um novo item de configuração é criado, deve-se identificá-lo unicamente no contexto, dando-lhe um nome, uma descrição e uma lista de recursos. É importante ainda considerar os relacionamentos existentes com outros objetos.

3.2.2 – Controle de Versão 
 
É uma operação que combina procedimentos e ferramentas para gerenciar versões diferentes de objetos de configuração criados durante o processo. Um sistema de controle de versões precisa de:
· Um banco de dados de projeto que armazene todos os itens de configuração relevantes;
· Um gerenciador de versionamento que deve permitir o registro histórico de cada item de configuração e fornecer informações de diferenças entre versões.

3.2.3 – Controle de Modificações
 
Como visto anteriormente, modificações são inevitáveis e precisam ser realizadas. Mas modificações feitas sem controle podem levar a uma série de erros. Para evitar a confusão as modificações solicitadas precisam ser analisadas (quanto aos impactos causados), relatadas, autorizadas, revisadas e auditadas. Um controle de modificações formal que utilize tanto processos manuais quanto ferramentas automatizadas de controle de versão é de vital importância para que o processo de gerência de configuração seja implantado.

3.2.4 – Auditoria de Configuração
 
Mesmo fazendo uso de mecanismos de controle bem-sucedidos, os gerentes podem acompanhar as modificações somente até determinado ponto, esquecendo de verificar se as mesmas são realmente implementadas. Para garantir que as modificações sejam adequadamente implementadas, pode-se utilizar duas técnicas:

a) Revisão técnica formal: enfoca a correção técnica do item de configuração que foi modificado, determinando sua consistência em relação a outros itens, omissões e efeitos colaterais em potencial;

b) auditoria de configuração de software: complementa a revisão técnica formal, avaliando também se alguma modificação adicional foi incorporada, se o processo de software foi seguido, se os documentos formais foram preenchidos corretamente e se todos os itens relacionados foram adequadamente atualizados.

4 – Ferramentas de Auxílio na Gerência de Configuração
 
Embora não esteja disponível no mercado uma ferramenta que possibilite automatizar todas as tarefas da gerência de configuração, pode-se elencar algumas que possuem recursos para gerenciar as principais atividades da GCS, como gerenciamento dos itens de configuração, disponibilidade de informação para a equipe e controle de versões. Nesses quesitos, destacaremos três ferramentas bastante conhecidas: o Visual SourceSafe da Microsoft, o StarTeam da Borland e o Subversion. Apenas o último possui código aberto e é gratuito para uso comercial.

De uma forma simplista, pode-se dizer que o objetivo principal desse tipo de ferramenta é o armazenamento dos itens de configuração e o posterior controle da versão dos mesmos durante o processo de desenvolvimento. É possível armazenar vários tipos de itens de configuração como códigos-fonte de programas, formulários, scripts de banco de dados, tabelas, consultas, planilhas, entre outros, em suas diversas versões . Isto permite uma comparação  de qualquer objeto para cada versão, ou seja, é possível comparar o código de uma classe da versão 1.0 com o código da mesma classe já na versão 2.0. Pode-se recuperar um objeto de uma versão anterior ou bloquear um objeto que está sendo usado por um dos integrantes da equipe, de forma que os demais não tenham acesso a ele.

Um resumo dos principais recursos disponíveis nas ferramentas gerenciadoras de configuração pode ser visto na tabela abaixo:

Recurso
Descrição
Get Latest Version
Copia a última versão do item de configuração presente no banco de dados da ferramenta para a máquina local
Check-out
Copia a última versão do item de configuração presente no banco de dados da ferramenta para a máquina local e bloqueia o mesmo para que ninguém mais possa alterá-lo
Check-in
Grava as alterações feitas no item de configuração no banco de dados
Undo Check-out
Desfaz o comando check-out
Label
Permite a criação de rótulos para versões (linhas de base)
History
Permite comparar versões diferentes de itens de configuração ou de versões inteiras de programas.

A seguir estão listados os passos mais comuns para montar uma estrutura de gerência de configuração de software automatizada:

a) criação de uma estrutura de diretórios

O primeiro passo é a criação de uma estrutura de diretórios para servir de repositório aos itens de configuração do projeto. Não há padronização para a criação dessa estrutura, mas é comum as equipes trabalharem com pastas diferentes para versões de desenvolvimento e produção e outra para armazenar versões fechadas do software. A estrutura é criada tanto na máquina local dos membros da equipe quanto no banco de dados da ferramenta de configuração. O Esquema abaixo ilustra uma proposta para criação de uma estrutura de configuração:

-nome_do_projeto
   -doc
   -gcs
      -desenv
         -prj
         -scr
      -producao
         -scr
      -release 

Diretório
Descrição
nome_projeto
Diretório raiz do projeto
doc
Diretório para documentos que não estão sob gerenciamento de configuração
gcs
Diretório raiz para itens de configuração que estão sob gerenciamento de configuração
gcs/desenv
Diretório principal para desenvolvimento
gcs/desenv /prj
Diretório para documentos relativos à disciplina projeto como por exemplo termos de abertura de projeto, declarações de escopo, cronogramas, documentos de especificação de requisitos, diagramas, dicionário de dados e outros
gcs/desenv /src
Diretório para os códigos fontes utilizados em ambiente de desenvolvimento
gcs/producao
Diretório principal para produção
gcs/producao/src
Diretório para os códigos fontes utilizados em ambiente de produção
gcs/release
Diretório para manter as versões fechadas que já estão em produção


b) inserção dos itens de configuração na estrutura 

Os responsáveis produzem os artefatos e os adicionam no banco de dados da ferramenta de configuração onde os outros membros possam copiá-los para suas respectivas estações através dos recursos da ferramenta.

c) manutenção das alterações nos itens de configuração

Significa utilizar o recurso de check-out quando for necessário alterar um objeto e após a modificação aplicar o recurso check-in para gravá-la no banco de dados de configuração.

d) criação de rótulos de versão (linhas de base)

Quando o projeto do software atingir um marco, que pode ser desde a entrega de um artefato importante até a liberação de uma versão estável do software para o cliente, é recomendada a criação de uma linha de base, ou seja, um rótulo para aquela versão do projeto. Depois que o recurso Label é aplicado, é possível comparar as diferenças entre duas versões e até mesmo retornar a uma versão anterior completa.

5 – Conclusão

A gerência de configuração de software é um processo crítico que pode definir o sucesso ou o fracasso de um projeto de sistema de informação. Ao mesmo tempo em que ela permite acesso aos artefatos produzidos aos membros da equipe, ela garante que todas as alterações que venham a ser feitas possam ser analisadas, controladas e submetidas a um gerenciamento de versão.

Justamente por oferecer mecanismos inteligentes que podem contribuir para a qualidade do projeto, a gerência de configuração também é vista como uma atividade de garantia de qualidade de software. Tanto é que um dos modelos de maturidade de processo de desenvolvimento de software mais difundidos no mundo, o CMMI-SW, insere a gerência de configuração como uma das sete áreas-chave para alcançar seu nível dois de maturidade (nível gerenciado), que é o primeiro degrau de maturidade no qual uma empresa almeja subir.

A implantação de um processo de gerência de configuração sempre traz grandes vantagens para as equipes de desenvolvimento, a um custo muito baixo. O custo está associado à aquisição da ferramenta que permita o controle eficaz dos itens de configuração do projeto, proporcionando acesso, controle de alterações e versionamento. Se o grupo optar pela utilização de uma ferramenta open source, o custo pode ser praticamente zero. A adoção de uma ferramenta de versionamento é imprescindível para o sucesso.

0 comentários:

Postar um comentário