Gerência de Projetos e Manutenção de Software Aula 9 Gerência de Configuração e Mudanças Andréa Magalhães Magdaleno andrea@ic.uff.br 2017.01
Agenda O Problema Gerência de Configuração Conceitos Básicos Processos Controle de Versões Gestão de Mudanças Construção e Release 2
O PROBLEMA
Problema da Quebra de Comunicação Falhas de comunicação em equipes Ocorre pelas mais diversas razões: Vocabulários incompatíveis Culturas de desenvolvimento diferentes Distância geográfica Dificuldade de expressão Quando este problema acontece: Os sistemas produzidos não atendem aos requisitos Força de trabalho é desperdiçada Desenvolvedor A Desenvolvedor B Desenvolvedor C 4
Problema dos Dados Compartilhados Desenvolvedor A Desenvolvedor B Programa de A A1 A2 A3 Componente Compartilhado Programa de B B1 B2 B3
Problema dos Dados Compartilhados Cenário O desenvolvedor A modifica o componente compartilhado Mais tarde, o desenvolvedor B realiza algumas alterações no mesmo Ao tentar compilar o componente, erros são apontados pelo compilador, mas nenhum deles ocorre na parte que B alterou O desenvolvedor B não tem a menor ideia sobre a causa do problema 6
Problema dos Dados Compartilhados Solução Cada desenvolvedor trabalha em uma cópia local do componente Resolve o Problema dos Dados Compartilhados, mas cria um novo problema... 7
Problema da Manutenção Múltipla Desenvolvedor A Desenvolvedor B Programa de A Componente Componente Compartilhado Compartilhado Programa de B A1 A2 A3 B1 B2 B3 Versão de A do Componente Compartilhado Versão de B do Componente Compartilhado
Problema da Manutenção Múltipla Cenário Ocorre quando cada desenvolvedor trabalha com uma cópia local do que seria o mesmo componente Dificuldade para saber: Qual a versão mais atualizada do componente? Que funcionalidades foram implementadas em quais versões do componente? Que defeitos foram corrigidos? Qual versão do componente deve ser utilizada? A situação torna-se mais crítica, quão maior for o tamanho da equipe. 9
Problema da Manutenção Múltipla Solução Criação de uma biblioteca central de componentes compartilhados Nesse esquema, cada componente é copiado para a biblioteca sempre que alterado Nessa biblioteca deve sempre estar disponível a versão mais nova do componente. Resolve o Problema da Manutenção Múltipla, mas... 10
Problema da Atualização Simultânea Biblioteca Central de Recursos Compartilhados Desenvolvedor A Desenvolvedor B Componente Compartilhado Programa de A Versão de A do Componente A1 A2 A3 B1 B2 B3 Compartilhado Versão de B do Componente Compartilhado Programa de B
Problema da Atualização Simultânea Cenário 1 O desenvolvedor A encontra e corrige um defeito em sua versão do componente compartilhado Uma vez corrigido, o componente modificado é copiado para a biblioteca central O desenvolvedor B encontra e corrige o mesmo defeito em sua versão do componente por não saber que A já tinha feito isso O trabalho de A é desperdiçado 12
Problema da Atualização Simultânea Cenário 2 O desenvolvedor A encontra e corrige um defeito em sua versão do componente compartilhado Uma vez corrigido, o componente modificado é copiado para a biblioteca central O desenvolvedor B encontra e corrige um outro defeito em sua versão do componente, sem saber do defeito corrigido por A O desenvolvedor B copia sua versão do componente para a biblioteca central Além de o trabalho de A ser desperdiçado, a versão do componente que se encontra na biblioteca central continua apresentando um defeito O desenvolvedor A julga o problema como resolvido 13
Problema da Atualização Simultânea Solução O problema da atualização simultânea não pode ser resolvido simplesmente copiando componentes compartilhados para uma biblioteca central Algum mecanismo de controle é necessário para gerenciar a entrada e saída dos componentes 14
GERÊNCIA DE CONFIGURAÇÃO
Gerência de Configuração (GC) Gerência de Configuração de Software (GCS) é uma disciplina para o controle da evolução de sistemas de software (Susan Dart, 1991) Desenvolvimento Liberação Implantação Produção Gerência de Configuração 16
Gerência de Configuração (GC) Engenharia de Software envolve refinamentos sucessivos de artefatos Tarefas de Engenharia de Software Artefato Artefato novo Artefato modificado Repositório 17
Objetivos de GC Definir o ambiente de desenvolvimento Definir políticas para controle de versões, garantindo a consistência dos artefatos produzidos Definir procedimentos para solicitações de mudanças Administrar o ambiente e auditar mudanças Facilitar a integração das partes do sistema 18
Histórico Anos 50 GC para produção de aviões de guerra e naves espaciais Anos 60 e 70 Surgimento de GCS (S = Software) Foco ainda em aplicações militares e aeroespaciais Anos 80 e 90 Mudança de foco Surgimento das primeiras normas internacionais Assimilação por organizações não militares 19
Sistema de Gerência de Configuração Solicitações Controle de Modificações Artefatos Controle de Versões Construção e Release 20
Problemas pela falta de GC Perda de código-fonte Impossibilidade de determinar o que aconteceu com um programa, ou parte dele Impossibilidade de determinar quem, porque e quando foram efetuadas modificações Requisitos já documentados desaparecem Requisitos implementados desaparecem do código O programa em execução e o seu código fonte estão em diferentes versões 21
CONCEITOS BÁSICOS
Conceitos Básicos Repositórios Lugar seguro onde versões de artefatos são depositadas Permitem armazenamento, busca e recuperação Servem como um ponto de referência Apoiam no aumento da memória organizacional 23
Check-Out Processo de requisição de modificações, aprovação e cópia de um item de configuração do repositório Check-out Cliente Repositório 24
Check-Out Recupera a (última) versão de um item de configuração guardada no repositório Escrita Verifica que ninguém detém o lock do item de configuração Obtém o lock do item Cria uma cópia, para edição, no cliente Leitura Verifica que alguém já detém o lock Cria uma cópia, apenas para leitura, no cliente 25
Check-In Processo de revisão, aprovação e cópia de um item de configuração para o repositório Check-in Cliente Repositório 26
Check-In Ação de inserir/atualizar um item de configuração no repositório Verifica o lock do item de configuração, caso o mesmo já exista Verifica e incrementa a versão do item Registra informações das mudanças (autor, data, hora, comentários) Inclui/atualiza o item 27
CONTROLE DE VERSÃO
Tipos de Versão Versão Revisão Variante Cooperação (Rascunho) (Conradi e Westfechtel 1998) 29
Revisões Gerações do imac (1998 2013) 30
Variantes Honda Civic Hatchback Sedan Coupe 31
Cooperação (versões rascunho) Versão base Espaço de trabalho do Pedro Espaço de trabalho da Maria Espaço de trabalho do João 32
Versões de rascunho podem ser combinadas (operação de merge) João Maria Pedro Revisões 33
Conflitos podem ocorrer durante o merge João Paulo Revisões 34
Outras duas operações importantes Diff = Patch = para guardar, transferir e compreender versões. 35
Mas afinal, para que servem versões? Sincronizar equipes Reproduzir configurações passadas Explorar possibilidades Segregar desenvolvedores Customizar produtos (LPS) Rastrear a introdução de bugs Entender a evolução de software Auditar mudanças 36
Tratamento de variantes em ramos (branches) Versões que não seguem a linha principal de desenvolvimento Fornecem isolamento para o processo de desenvolvimento Ramos usualmente são migrados para a linha principal de desenvolvimento A migração pode ser complicada no caso de isolamento longo Características dos ramos se comparados a espaços de trabalho compartilhados por outras pessoas (espaços de trabalho são isolados) residem no servidor (espaços de trabalho residem no cliente) históricos (espaços de trabalho são momentâneos) 37
Tratamento de variantes em ramos (branches) Recurso muito poderoso Branches normalmente se originam de correções em versões anteriores Devem existir regras bem definidas para criação de branches Por que e quando devem ser criados? Em que circunstâncias é justificável criar um novo branch? Apenas para correção de bugs? Para realizar melhorias solicitadas pelos usuários? Quais os passos? Que procedimentos devem ser seguidos para criar um branch? Deve ser feita uma solicitação formal? Um backup do item de configuração deve ser realizado? Algum membro da equipe deve ser notificado? Quando retornar ao fluxo principal? Quando pode se considerar o branch como encerrado? Se foi para remover defeitos, o branch deve acabar assim que esses defeitos tenham sido corrigidos, ou deve ser mantido para corrigir novos defeitos que foram descobertos? 38
Estratégia básica de Ramificação Manutenção em série Ramo principal: evolução Ramos auxiliares: correções Foco Desenvolvimento in-house Cliente único (e.g.: aplicações Web) Dificuldade de manutenção de várias liberações em paralelo Sistema Desenv. 1.0 RC 2.0 RC Evolução Evolução Rel. 1 Verif. Correção Correção 1.0 1.1 1.2 Rel. 2 Verif. Correção 2.0 2.1 39
Merge Unificação de diferentes versões de um mesmo item de configuração Integração dos itens de configuração de um branch com os itens de configuração do fluxo principal Checkout atualizando a área local Algumas ferramentas fornecem um mecanismo automático para realização de merges Mesmo com o uso de ferramentas, em vários casos há necessidade de intervenção humana 40
Exemplo (merge no Eclipse) 41
Baseline Configuração revisada e aprovada que serve como base para uma próxima etapa de desenvolvimento e que somente pode ser modificada via processo formal de GCS A atualização de uma baseline consiste em check-out seguido de modificações e check-in São estabelecidas ao final de cada fase de desenvolvimento Análise (functional) Projeto (allocated) Implementação (product) Momento de criar: Balanceamento entre controle e burocracia 42
Baseline (níveis de controle) Coordenação c/ auditoria Nível de controle Controle Pré baseline: Informal Sem requisição Sem aprovação Sem verificação Ágil Ad-hoc Pós baseline: Formal Com requisição Com aprovação Com verificação Burocrático Planejado e Controlado 43
Baseline (níveis de controle) Baseline 1: Requisito 1 Análise Projeto An. Req. 1 Baseline 2: An. Req. 1 Pr. Req. 1 An. Req. 2 Requisito 2 Análise Projeto Tempo Req. Análise Projeto Análise Projeto Análise Projeto 1 Inform. - Formal Inform. Formal Formal 2 - - Inform. - Formal Inform. 44
Plano de GC O plano de gerência de configuração de software é o documento utilizado para descrever como será utilizada a disciplina de gerencia de configuração no projeto em questão Pode ser definido um plano padrão para a organização Esse plano padrão deverá ser adaptado para cada novo projeto, levando em consideração as suas peculiaridades 45
Plano de GC - Exemplo Sist. ID Item Ext. Título Resp. Resp. Implantação BASELINE: Dt PREVISTA: Dt REAL: BASELINE: Dt PREVISTA: Dt REAL: BASELINES BASELINE: Dt PREVISTA: Dt REAL: BASELINE: Dt PREVISTA: Dt REAL: Incluído Versão Incluído Versão Incluído Versão Incluído Versão 46
Principais sistemas de controle de versão open-source 47
GESTÃO DE MUDANÇAS
Motivação Mudança é inevitável Mudar é fácil controlar diversas mudanças simultâneas é difícil A gerência de mudanças introduz controle sobre as mudanças de maior relevância Todas as mudanças são analisadas Apenas as aprovadas são realizadas Sempre se sabe quem modificou o que, onde e quando 49
Problemas Controle do escopo do projeto Modificações podem ampliar o leque de funcionalidades e aumentar significativamente o custo do projeto Atrasos em entregas planejadas Controle de consistência dos artefatos Uma mudança aparentemente localizada pode causar muito mais impacto do que o previsto Degradação da qualidade do software (ex: abandono dos testes automatizados devido à inconsistência dos dados de teste) Retrabalho 50
O que é Gestão de Mudanças? Gestão de Mudanças é o processo de avaliar, coordenar e decidir sobre a realização de mudanças propostas a itens de configuração (ICs) Mudanças aprovadas são implementadas nos itens de configuração e nos dados e documentos relacionados 51
Objetivos da Gestão de Mudanças Garantir que os artefatos do sistema alcançam e mantêm uma estrutura definida através do seu ciclo de vida Definir procedimentos e documentação necessários para realizar modificações nos itens de configuração Prover os mecanismos necessários para conduzir mudanças de uma maneira controlada 52
Change Control Board (CCB) Analisar as solicitações de mudança Controlar o escopo do projeto Reuniões com frequência adequada ao ritmo das solicitações de mudança Envolver stakeholders no processo de priorização e de decisão Balanço entre o nível de controle desejado e overhead suportado Questões menores devem ser resolvidas pelo líder do projeto junto à equipe, reduzindo o overhead do CCB Composição multidisciplinar SQA, gerente, cliente, arquiteto Profissionais com grande capacidade de comunicação e negociação 53
Análise de impacto Mudanças de grande impacto devem ser comunicadas aos stakeholders envolvidos Análises de custo x benefício produzidas pelos stakeholders Priorização de mudanças Mudança pode ser rejeitada se o CCB perceber que o custo será mais caro que o benefício percebido Por questões de eficiência, algumas solicitações de mudança podem ser agrupadas por tema, subsistema ou área de negócio 54
Gestão de Mudanças Tarefas Solicitação de modificação Classificação da modificação Análise da modificação Avaliação da modificação Implementação da modificação Verificação da modificação Geração de baseline 55
Gestão de Mudanças Solicitação de Modificação Identificação única Solicitante Sistema/Projeto Item a ser modificado Classificação (melhoria, correção de defeito, outra) Prioridade Descrição Situação (nova, atribuída, finalizada, verificada, fechada) 56
Gestão de Mudanças Solicitação de Modificação 57
Gestão de Mudanças O critério de classificação da modificação deve estar explicitado no plano de GC A classificação visa priorizar modificações mais importantes (críticas, fatais, não fatais, cosméticas) A análise visa relatar os impactos em custo, cronograma, funcionalidades, etc. da implementação da modificação Caso a análise conclua que não existe chance de aprovar a modificação (casos extremos), pode ocorrer rejeição antes da avaliação para poupar custos no processo 58
Gestão de Mudanças Análise de Modificação (Leon, 2000) 59
Gestão de Mudanças A avaliação utilizará a requisição de modificação e o laudo da análise para tomar a decisão A requisição pode ser aceita, rejeitada ou adiada A implementação deve ser seguida por testes de unidade Durante a verificação, devem ser aplicados testes de sistema Após a geração da nova baseline, deve ser decidido se ela será considerada uma nova liberação 60
Gestão de Mudanças Caso especial: Correções emergenciais No caso de correções emergenciais, podem ser criados ramos sem a necessidade do processo formal Em algum momento esses ramos deverão sofrer junção para a linha principal de desenvolvimento Esse procedimento deve estar explicitado no processo! Defeitos não são normalmente processados pelo CCB Mesmo nessas situações, porém, é muito importante que seja criada uma solicitação de mudança 61
Gestão de Mudanças Caso especial: Defeitos Alguns sistemas tratam defeitos de forma diferente das demais requisições A correção de defeitos é um tratamento sintomático É importante descobrir o real motivo para o acontecimento do defeito para possibilitar a prevenção de defeitos futuros A análise de causa é útil para descobrir falhas no processo de desenvolvimento Falta de treinamento, padrões inadequados, ferramentas inadequadas 62
Gestão de Mudanças Acompanhamento - Tarefas Armazenamento das informações geradas Propagação dessas informações aos interessados através de relatórios Permite que métricas sejam utilizadas com o intuito de melhoria do processo e estimativa de custos futuros Fornece relatórios gerenciais ad-hoc 63
Gestão de Mudanças Resultado do relatório no modo tabular no Bugzilla 64
Auditoria da configuração Deve ocorrer ao menos antes de uma liberação (release) Tarefas Verificação funcional, assegurando que a baseline cumpre o que foi especificado Verificação física, assegurando que a baseline é completa (todos os itens de configuração especificados) Auditorias servem para garantir que os procedimentos e padrões foram aplicados 65
Auditoria da configuração A auditoria funcional ocorre através da revisão dos planos, dados, metodologia e resultado dos teste, para verificar se são satisfatórios A auditoria física examina a estrutura de todos os itens de configuração que compõem a baseline A auditoria física é efetuada após a auditoria funcional Podem ocorrer auditorias no próprio sistema de GC pelos mantenedores do plano de GC, para verificar se as políticas e procedimentos estão sendo cumpridos 66
Gestão de Mudanças Ferramentas Livre Bugzilla Mantis Redmine Trac Comercial ClearQuest (IBM Rational) JIRA (Atlassian) StarTeam (Borland) Synergy/Change (Telelogic) TeamTrack (Serena) Team Foundation Server (Microsoft) 67
CONSTRUÇÃO E RELEASE
Terminologia Construção (Building): processo de compilação do sistema a partir dos itens fonte para uma configuração alvo; Utiliza arquivo de comandos que descreve como deve ocorrer a construção Exemplo: makefile Os arquivos de comandos também devem ser considerados itens de configuração 69
Terminologia Release: Conjunto de produtos que deve ser entregue ao cliente Releases diferem de versões, pois versões podem ser somente para uso interno ao projeto 70
Problemas na Geração de Builds Fazer os builds do sistema manualmente é muito demorado Pode ser difícil saber qual a versão correta de um arquivo Os pedaços do sistema podem estar em diversos locais diferentes Alguns arquivos podem ser esquecidos A integração das partes de um sistema em desenvolvimento normalmente é: Realizada poucas vezes, apenas perto de sua implantação Feita em frequência inversamente proporcional à complexidade do sistema Integrar as partes de um sistema é uma tarefa trabalhosa e sujeita a erros Quanto maior o sistema, mais difícil 71
Problemas na Geração de Builds Consequência: problemas de integração tornam-se difíceis de detectar cedo no desenvolvimento Costumam ser encontrados muito depois de sua introdução É muito difícil rastrear suas causas 72
Geração de Builds através da Integração Contínua Geração frequente (pelo menos diária) de builds do sistema As partes do sistema são integradas constantemente Problemas de integração passam a ser encontrados logo que introduzidos, na maioria dos casos Considerada uma das melhores práticas no desenvolvimento de software A geração de builds deve ser automatizada e realizada com frequência adequada 73
Gerenciamento de releases Descrição de como construir, liberar e entregar o sistema Linguagem natural (conhecimento) Linguagem computacional (automação) Manter os descritores e documentos sob gerência de configuração! Definição das situações onde o processo pode ser temporariamente desviado Cuidado: Releases muito curtas podem levar a círculovicioso de defeitos... 74
Exemplo de ferramentas de build e release Livre Ant NAnt Make Maven Rake Comercial ClearMake (IBM Rational) MSBuild (Microsoft) Synergy/CM Object Make (Telelogic) 75
Application Lifecycle Management (ALM) Out 2013 COS 823 - Aula 6 76 76
Collaborative Lifecycle Management (CLM) Out 2013 COS 823 - Aula 6 77 77
Collaborative Lifecycle Management (CLM) Requisitos Planejamento de Testes Gerenciamento de Defeitos Gerência de Configuração Out 2013 COS 823 - Aula 6 78 78
Exercício Elaborar o plano de configuração do projeto informando no mínimo: Quais artefatos serão colocados sob gerência de configuração? Quais baselines serão estabelecidas e quais os itens de configuração de cada uma dela? Como deve funcionar o processo de gestão de mudanças? 79
Dúvidas? 80
Principais Referências Bibliográficas Alexis Leon, A Guide to Software Configuration Management, Artech House Publishers, 2000. Anne Hass, Configuration Management Principles and Practices, Boston, MA, Pearson Education, Inc. Conradi, R. and Westfechtel, B. Version Models for Software Configuration Management. ACM Computing Surveys, v.30, n.2, p. 232-282, 1998. Dart, S., 1991, Concepts in Configuration Management Systems, International Workshop on Software Configuration Management (SCM), Trondheim, Norway (June), pp. 1-18. Pressman, R. S. (1997). Software Engineering: A Practitioner's Approach, McGraw-Hill. 81
Próxima Aula Atividades Gerenciais Aquisição Planejamento de Projetos Comunicação Monitoramento e Controle Gerência de Riscos Atividades de Desenvolvimento Levantamento de Requisitos Análise de Requisitos Projeto Codificação Atividades de Apoio Garantia de Qualidade Gerência de Configuração Medição e Análise Verificação, Validação e Testes Reutilização 82
Gerência de Projetos e Manutenção de Software Aula 9 Gerência de Configuração e Mudanças Andréa Magalhães Magdaleno andrea@ic.uff.br 2017.01