Boa pedida – Um pouco de gestão de configuração

Antes de ingressar na carreira acadêmica, trabalhei um bom tempo como programador. Colecionei várias experiências, algumas boas e outras não tanto. Neste post relato uma delas:

Contexto da experiência: No desenvolvimento de um software para controle tributário de uma cidade, uma de minhas atribuições era imprimir o carnê de cobrança de todos os contribuintes. Ressalto que o calculo do carnê era feito por outro programador, que neste caso vou denominá-lo como programador X. No desenvolvimento do programa de calculo, X utilizou um campo A para calcular uma determinada alíquota. Paralelamente a este fato, um terceiro programador, classificado como Y, tinha duplicado o campo A (o campo duplicado será chamado de B) na referida tabela. Importante: B não era atualizado pelos usuários do software, a atualização ocorria somente em A, o que era óbvio. Para imprimir o carnê de cobrança eu utilizei B. Resultado: Dos 30 mil carnês impressos e entregues, cerca de 10 mil estavam com erro.

Se tivéssemos utilizados os princípios básicos da gestão de configuração, não teríamos cometido tal erro.

A partir dos fatos, podemos enumerar algumas questões: I) O que é gestão de configuração? II) Quando utilizar a gestão de configuração? III) Como estabelecer um conjunto de tarefas para configurar esse tipo de gestão? IV) Como gerenciar a configuração em uma pequena empresa de produção de software?

I) O que é a gestão de configuração?

A gestão de configuração pode ser encarada como um conjunto de ações (ou tarefas) que possibilitam identificar os produtos, em nosso caso todos os artefatos gerados pelo processo de software, estabelecendo um relacionamento entre eles. A gc também é responsável por subsidiar a atividade de gerenciamento de projetos, pois esta necessita controlar as diferentes versões geradas para um mesmo produto. Em suma, a gc tem como objetivo responder as seguintes perguntas:

Qual artefato do processo foi mudado?

Quando ocorreu a mudança?

Quem foi o responsável pela mudança?

Qual o impacto que a mudança irá gerar?

II) Quando utilizar gestão de configuração?

A gestão de configuração deve ser utilizada em qualquer projeto de software, ou seja em qualquer situação, neste texto enumero duas:

1 – Todos nós sabemos que um produto caracterizado como software possui uma grande instabilidade no que diz respeito aos seus requisitos. Partindo dessa premissa, podemos afirmar que a gestão de configuração será aplicada paralelamente a execução de todas as atividades de um processo de produção de software. Como exemplo, vamos partir do princípio que um processo de software possui como atividades: o levantamento de requisitos; a análise de sistemas; o projeto de software; a implementação; o teste e; a implantação. Vamos supor, também, que estamos implementando um software de controle tributário de uma cidade; em uma seção, a câmara municipal promove uma alteração na legislação com o objetivo de diminuir uma alíquota qualquer. Resultado: mudança nos requisitos do software. Neste caso, com certeza, vários artefatos (incluindo os programas) serão alterados, e isso irá gerar um impacto em outros artefatos que dependem das informações daqueles que foram alterados. Essas informações devem ser delineadas e as questões acima levantadas devem ser respondidas.

2 – Vamos supor que estamos desenvolvendo um sistema operacional que deverá rodar em várias arquiteturas computacionais. Temos uma versão do sistema rodando em uma máquina CISC e outra versão rodando em uma máquina RISC, lembre-se que neste caso conjunto de instruções das máquinas são diferentes. Estaremos desenvolvendo as mesmas funcionalidades em dois produtos (ou subprodutos). Durante o desenvolvimento do projeto podemos compartilhar vários componentes, por exemplo: o algoritmo de escalonamento de processos (do SO) será o mesmo para ambos. Em um determinado momento, o algoritmo a ser implementado para a máquina RISC pode necessitar de uma codificação mais elaborada, visto que o seu conjunto de instruções é menor. Neste caso um pouco de gestão de configuração também é bem vindo. As alterações efetuadas irão gerar um novo componente, esse fato deve ser explicitado de alguma forma. As responsabilidades pela mudança, a data que as mesmas ocorreram e o impacto que elas geraram, devem ser mapeadas pela gc. Em tempo, não podemos nos esquecer de gerar um baseline para todo projeto de software, ele será de fundamental importância para o estabelecimento de uma gestão eficaz da configuração.

III) Como estabelecer um conjunto de tarefas para configurar esse tipo de gestão?

A IEEE, por meio da 828-1998, estabelece um padrão para o gerenciamento de configuração. Vou partir dessa norma para delinear o referido conjunto:

T1 – Identificar quais são os itens (artefatos do processo) que serão geridos: Documento, código fonte, folhas de testes podem se configurarem nos itens que compõem o processo de gestão de configuração. Os pontos de controle dos itens dentro do ciclo de vida do processo e os requisitos necessários para a aprovação da mudança também devem ser delineados nessa tarefa.

T2 – Definir um padrão para nomear tais itens: Estabeleça nomes simples e que traduzam o que significa o item. Delimite um conjunto básico de regras para numerar as versões.

T3 – Estabelecer um controle de configuração: Nesta tarefa responda questões delineadas no item I deste post.

T4 – Configurar auditorias e revisões: Extrair as informações gerenciais para avaliar se a atividade de gestão de configuração está sendo executada de acordo com o planejado, configura a principal função desta tarefa.

T5 – Estabelecer uma ferramenta e um banco de dados que automatize a atividade em questão: Nesta tarefa os gestores da configuração devem propor a aquisição ou o desenvolvimento de uma ferramenta que agilize toda a atividade de gc. É importante que esta ferramenta ou banco sejam integrados com a ferramenta que propicie o controle de versão. 

IV) Como gerenciar a configuração em uma pequena empresa de produção de software?

Novamente saliento que a atividade de gc está ligada a todas as outras atividades de um processo de software. Em virtude deste fato, posso afirmar que não é possível estabelecer uma “boa” gestão sem a institucionalização de um processo. Se você possui uma pequena empresa de produção de software que tal:

Formalizar a atividade de implementação: Utilize um padrão de código, controle o tempo gasto para produzir um determinado componente, verifique quem está produzindo o que.

Formalizar a atividade de teste: Utilize alguns critérios e técnicas para estabelecer os casos de testes que serão utilizados nesta atividade. O particionamento de classe de equivalência, a análise do valor limite e o teste funcional sistemático, são técnicas simples de se implementar. Gere dados consistentes para a execução dos testes, respeitando sempre o que foi delineado pelos casos. Institucionalize o preenchimento da folha de teste. Controle quem está testando, quanto tempo está sendo gasto e os problemas encontrados.

Importante: Institucionalizando as atividades, você estará definindo os itens que serão inseridos no processo de gestão de configuração.

Organize a gestão do projeto em sua empresa: Vejas as considerações sobre este item em: https://engenhariasoftware.wordpress.com/2009/04/13/empinando-um-software-ou-programando-uma-pipa/. Faça que a atividade de gestão de projetos contribua para responder de maneira rápida e dinâmica as seguintes perguntas:

Qual artefato do processo foi mudado?

Quando ocorreu a mudança?

Quem foi o responsável pela mudança?

Qual o impacto (efeito cascata) que a mudança irá gerar?

Por fim, gostaria de salientar que a institucionalização dessas duas atividades é um bom começo para se implementar um processo de software. Quando elas estiverem estáveis, procure definir e institucionalizar a atividade de gestão de projetos. Importante: organize o processo de maneira gradativa.

Por favor, fique a vontade para efetuar qualquer comentário sobre o tema deste post. Lembre-se que de 09 de março a 10 de maio, ao enviar um comentário para o blog, você estará concorrendo a uma assinatura da revista Engenharia de Software. Confira as regras do concurso em: https://engenhariasoftware.wordpress.com/2009/03/11/envie-um-comentario-e-concorra-a-assinatura-gratuita-da-revista-engenharia-de-software/

Aproveito a oportunidade para convidar a todos a participar do Engenharia de Software Conference, lá teremos a oportunidade de discutir com pesquisadores e profissionais de mercado vários temas relacionados à área da engenharia de software. Espero encontrar muitos de vocês neste evento.

 Abraços

J.A. fabri@femanet.com.br

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: