O Fluxo de Gerência de Configuração e Mudança © Alexandre Vasconcelos [email protected] [email protected] Centro de Informática da UFPE/ Qualiti Software Processes 1/33 Objetivo Compreender a importância do uso de mecanismos de gerência de configuração e de mudança, seus métodos, processos e ferramentas. 2/33 Tópicos Introdução A necessidade de controle do código fonte Controle do código fonte Builds Controle de defeitos Gerência de mudança 3/33 Introdução SEI CMM/CMMI: Gerência de Configuração (CM) e de Solicitações de Mudança (CRM) controlam as mudanças e mantêm a integridade dos artefatos de um projeto. CM e CRM envolvem: identificar itens de configuração restringir as modificações nesses itens auditar modificações nesses itens (porque, quando e por quem um artefato foi modificado) definir e administrar configurações desses itens, ao longo do processo de desenvolvimento. 4/33 Introdução Parte essencial do processo de desenvolvimento. Visa eliminar problemas de atualizações simultâneas existência de múltiplas versões do sistema (produção, desenvolvimento, teste etc.) 5/33 Introdução Ao longo do ciclo de vida de um software, seus artefatos sofrem diversas alterações, causadas por correção de defeitos no produto melhorias de funcionalidades do produto Estas alterações afetam todos os tipos de artefatos: documentos de requisitos documentos de análise e projeto código fonte programas e scripts de testes 6/33 Introdução Vamos nos referir nesta aula ao código fonte, que é o artefato em que é mais modificado. Mas a gerência de configuração pode e deve ser usada para todos os artefatos, dependendo do tamanho e complexidade do projeto. 7/33 A necessidade de controle do código fonte Software desenvolvido por uma equipe Programas precisam ser acessados e alterados por várias pessoas da equipe. Modularização do projeto normalmente não é suficiente para resolver este problema. Como controlar o acesso aos programas? Como saber qual a versão mais atualizada dos arquivos? Como voltar para uma versão anterior do programa? 8/33 Check-in Ação de inserir/atualizar o conteúdo de um arquivo no sistema de controle de código fonte. verifica permissão de acesso ao arquivo verifica e incrementa identificador de versão do arquivo guarda data, hora e autor da alteração Informações são guardadas no próprio arquivo ou junto com ele. Desenvolvedor Repositório 9/33 Check-out Ação de ler/copiar a (última) versão de um arquivo guardada no sistema Tipos de checkout somente para leitura (read-only) para edição (read/write) Desenvolvedor Repositório 10/33 Locking Sistemas de controle de versão e configuração usam um mecanismo de locking para evitar que mudanças acidentais ou intencionais ocorram em momentos inapropriados. Evita alterações simultâneas permite check-out, mas somente para leitura. prog1.c Desenvolvedor prog2.c prog3.c Repositório 11/33 Tagging Permite “marcar” um conjunto de arquivos com um nome (tag). Um tag representa um ou mais arquivos em um ou mais diretórios. Ex: Tagging de versão de projeto: controla uma dada versão do projeto, em determinada data ou com determinada funcionalidade. 12/33 Branching Uso de locks limita o trabalho dos programadores. Estratégias de branching são regras que definem como ocorrerão atividades de mudança em paralelo no código fonte. Sem uma estratégia bem definida, pode-se esperar pelo caos. 13/33 Branching Em um sistema sem branches, um arquivo começa com sua versão 1, e a cada check-in sua versão é incrementada. Se a versão mais recente é 5, você não pode fazer checkout para editar a versão 2, por exemplo. 14/33 Branching Branching tenta reduzir estas limitações, permitindo a criação de caminhos separados (linhas) de desenvolvimento para um mesmo arquivo ou conjunto de arquivos. Cada branch tem o seu conjunto de alterações e versões. Um branch guarda ligação com seu nó (versão do “ramo” principal) de origem. Extremamente poderoso, e perigoso! 15/33 Branching file.c 1 2 3 4 2.1 2.2 16/33 Merging Merging é o processo de combinar múltiplas versões de um arquivo para criar uma nova versão. o desafio é garantir que a funcionalidade do código antes do merge seja preservada após o merge. 17/33 Merging Situações a serem tratadas: funcionalidades diferentes, sem conflito. funcionalidades em conflito, que não podem ser combinadas. Neste caso, os desenvolvedores têm que entrar em acordo. 18/33 Política de gerência de configuração Deve haver uma política clara sobre: convenção de formato de nomes, extensões. responsabilidade por mudanças. documentação de mudanças (ex: comentários). criação e nomes de diretórios. 19/33 Builds “Build” é um termo usado para identificar as atividades associadas com o processamento dos fontes para gerar um executável. Ações verificar dependências compilar linkar gerar outros arquivos (se necessário) 20/33 Controle de Defeitos “Bug tracking” composto de relato análise atualização de status 21/33 Gerência de Mudança Define o mecanismo de aprovação de mudanças no sistema. Normalmente não é implementado completamente até o primeiro release (ou próximo dele). Pode ser mais ou menos formal, dependendo do tamanho do projeto. 22/33 Grupo de Controle de Mudança Avalia: o impacto na funcionalidade do produto. validade técnica da mudança consistência, uniformidade Aprova, rejeita, ou põe em espera Segue um Cronograma 23/33 Componentes de um pedido de mudança Descrição da mudança Alternativas Complexidade Cronograma Impacto Custo Relação com outras mudanças Testes 24/33 RUP - Conceitos Baseline snapshot dos artefatos do modelo de implementação, a partir do qual trabalhos futuros serão desenvolvidos. ponto estável dos artefatos (para criação de branches etc.) artefatos devidamente marcados (tag) ponto para possível rollback ponto para reproduzir bugs produzido ao fim de cada fase (major milestone), ou ao final das iterações (minor milestones) 25/33 RUP - Conceitos Método de promoção como migrar artefatos do workspace individual para o workspace global (integração de (sub)sistemas, build, teste, release). 26/33 O Fluxo Gerência de Configuração do RUP Gerente de Configuração e Ambiente Definir ferramentas e equipamentos Estruturar ambiente Planejar gerência de configuração Implantar e administrar ambiente 27/33 Atividade: Definir Ferramentas e Equipamentos Objetivos Definir ferramentas de suporte ao desenvolvimento, controle de versões e softwares em geral Definir hardwares e suas configurações Definir regras para atualizações de hardware e software 28/33 Atividade: Estruturar Ambiente Objetivos Determinar a estrutura de diretórios que será adotada para o projeto Definir os diferentes ambientes (desenvolvimento, integração, testes, produção) Definir a política de uso do ambiente 29/33 Atividade: Planejar Gerência de Configuração Objetivos Definir os papéis e responsabilidades dos membros da equipe responsável pelas atividades de gerência de configuração (GC) Definir os baselines que deverão ser estabelecidos Definir o cronograma das atividades de GC Definir as políticas, procedimentos e padrões que guiarão essas atividades Identificar os itens de configuração 30/33 Atividade: Implantar e Administrar Ambiente Objetivos Implantar o ambiente com base na estrutura definida na atividade anterior Gerenciar a utilização do ambiente de acordo com as normas propostas Avaliar e revisar o ambiente 31/33 Referências Descrição do workflow de gerência de configuração e mudanças do RUP Configuration Management Today http://cmtoday.com Software Release Methodology, M.E.Bays, Prentice Hall, 1999. 32/33 O Fluxo de Gerência de Configuração e Mudança © Alexandre Vasconcelos [email protected] [email protected] Centro de Informática da UFPE/ Qualiti Software Processes 33/33