Introdução à Gerência de Configuração Leonardo Gresta Paulino Murta leomurta@ic.uff.br
Introdução A Engenharia de Software... Abordagem disciplinada para o desenvolvimento de software Grande diversidade de metodologias Leonardo Murta Introdução à Gerência de Configuração 2
Introdução Ponto em comum nas metodologias: refinamentos sucessivos de artefatos http://www.colegiosaofrancisco.com.br Leonardo Murta Introdução à Gerência de Configuração 3
Mas aonde ficam esses artefatos? Tarefas de Engenharia de Software Artefato Artefato novo Artefato modificado Repositório Leonardo Murta Introdução à Gerência de Configuração 4
O que são repositórios? Repositórios Lugar seguro onde artefatos são depositados Permitem armazenamento, busca e recuperação de artefatos Servem como um ponto de referência Apóiam no aumento da memória organizacional Leonardo Murta Introdução à Gerência de Configuração 5
Gerência de Configuração Gerência de configuração de software é 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 Leonardo Murta Introdução à Gerência de Configuração 6
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 (MIL EIA, IEEE, ISO, etc.) Surgimento das primeiras normas internacionais Assimilação por organizações não militares Leonardo Murta Introdução à Gerência de Configuração 7
Sistema de Gerência de Configuração Versão 1 Versão 2 Versão 3 Versão 4 Versão 5 Leonardo Murta Introdução à Gerência de Configuração 8
Sistema de Gerência de Configuração Versão 1 Versão 2 Versão 3 Versão 4 Versão 5 Leonardo Murta Introdução à Gerência de Configuração 9
Sistema de Gerência de Configuração Versão 1 Versão 2 Versão 3 Versão 4 Versão 5 Leonardo Murta Introdução à Gerência de Configuração 10
Sistema de Gerência de Configuração Solicitações Controle de Modificações Artefatos Controle de Versões Construção e Release Leonardo Murta Introdução à Gerência de Configuração 11
Sistema x Funções de GC Espaço de trabalho: Processos: Sistemas: Ambiente de Desenvolvimento de Software Identificação Controle Contabilização Avaliação Liberação Controle de Modificações Controle de Versões Gerenciamento de Construção Perspectiva de integração Perspectiva gerencial Perspectiva de desenvolvimento Este curso será guiado pelos sistemas de controle de modificações e versões! Leonardo Murta Introdução à Gerência de Configuração 12
Exercício 1. Apresentar, na próxima aula, as 5 funções de gerência de configuração, citando exemplos 2. Apresentar, na próxima aula, o sistema de gerenciamento de construção e release, dando algum exemplo usando uma ferramenta (make, ant, maven, etc.) 3. Apresentar, na próxima aula, o que é integração contínua, dando algum exemplo usando uma ferramenta (Cruise Control, Apache Continuum, Hudson, etc.) Leonardo Murta Introdução à Gerência de Configuração 13
Sistema de Gerência de Configuração Solicitações Controle de Modificações Artefatos Controle de Versões Construção e Release Leonardo Murta Introdução à Gerência de Configuração 14
Controle de versões Topologia? Armazenamento? Colaboração? Consulta? Leonardo Murta Introdução à Gerência de Configuração 15
check-in check-in / commit push Topologia Espaço de Trabalho Repositório Espaço de Trabalho check-out / update Repositório Repositório Espaço de Trabalho clone / pull check-out / update Centralizado Distribuído Leonardo Murta Introdução à Gerência de Configuração 16
Armazenamento v.3 v.2 delta 2 3 delta 1 2 v.3 v.1 v.2/3 v.1 v.1 delta 3 2 delta 2 1 v.1/2 v.3 Completo Forward Reverse In-line Leonardo Murta Introdução à Gerência de Configuração 17
Colaboração m.3 m.2 m.1 m.1 junção m.2 m.3 junção m.1 m.2 m.3 Pessimista Otimista Misto Leonardo Murta Introdução à Gerência de Configuração 18
Consulta Repositório (versão 0) 1ª modificação Repositório (versão 1) Artefato1 (versão 1) Artefato2 (versão 1) Artefato3 (versão 1) Repositório (versão 2) Artefato1 (versão 2) Artefato2 (versão 1) Artefato3 (versão 1) 2ª modificação Repositório (versão 3) Artefato1 (versão 2) Artefato2 (versão 3) Artefato3 (versão 1) Artefato4 (versão 3) 3ª modificação 4ª modificação Repositório (versão 4) Artefato1 (versão 4) Artefato2 (versão 3) Artefato3 (versão 4) Artefato4 (versão 3) Consulta por artefato Artefato1 Versão 1 Versão 2 Versão 4 Artefato2 Versão 1 Versão 3 Artefato3 Versão 1 Versão 4 Artefato4 Versão 3 Leonardo Murta Introdução à Gerência de Configuração 19
Consulta Repositório (versão 0) 1ª modificação Repositório (versão 1) Artefato1 (versão 1) Artefato2 (versão 1) Artefato3 (versão 1) Repositório (versão 2) Artefato1 (versão 2) Artefato2 (versão 1) Artefato3 (versão 1) 2ª modificação Repositório (versão 3) Artefato1 (versão 2) Artefato2 (versão 3) Artefato3 (versão 1) Artefato4 (versão 3) 3ª modificação 4ª modificação Repositório (versão 4) Artefato1 (versão 4) Artefato2 (versão 3) Artefato3 (versão 4) Artefato4 (versão 3) Consulta por modificação 1ª modificação Artefato1 adicionado Artefato2 adicionado Artefato3 adicionado 2ª modificação Artefato1 modificado 3ª modificação Artefato2 modificado Artefato4 adicionado 4ª modificação Artefato1 modificado Artefato3 modificado Leonardo Murta Introdução à Gerência de Configuração 20
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 à 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) permanentes (espaços de trabalho temporários) Leonardo Murta Introdução à Gerência de Configuração 21
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. RC1 Evolução RC2 Evolução Rel. 1 Verif. Correção Correção Rel. 2 1.0 1.1 1.2 Verif. Correção 2.0 2.1 Leonardo Murta Introdução à Gerência de Configuração 22
Junção Processo de migração de Espaços de trabalho Ramos Linha 1 Linha 2 Linha 1 Linha 2 Linha 3 Linha 1 Linha 2 Linha 1 Linha 2 Linha 3 Linha 1 Linha 2 <Linha 1> ou <Linha 1 >? Linha 2 <Linha 3> ou nada? 2-way merge Linha 1 Linha 2 Linha 3 3-way merge Leonardo Murta Introdução à Gerência de Configuração 23
Exemplo (junção no Eclipse) Leonardo Murta Introdução à Gerência de Configuração 24
Exemplo de ferramentas de controle de versões Livre Bazaar Git Mercurial Subversion Comercial BitKeeper (BitMover) ClearCase (IBM Rational) Perforce PVCS (Serena) StarTeam (Borland) Synergy/CM (Telelogic) Team Foundation Server (Microsoft) Leonardo Murta Introdução à Gerência de Configuração 25
Sistema de Gerência de Configuração Solicitações Controle de Modificações Artefatos Controle de Versões Construção e Release Leonardo Murta Introdução à Gerência de Configuração 26
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 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 Leonardo Murta Introdução à Gerência de Configuração 27
Baseline (níveis de controle) Coordenação c/ auditoria Nível de controle Controle Informal: Pré baseline Sem requisição Sem aprovação Sem verificação Ágil Ad-hoc Formal: Pós baseline Com requisição Com aprovação Com verificação Burocrático Planejado Leonardo Murta Introdução à Gerência de Configuração 28
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. Leonardo Murta Introdução à Gerência de Configuração 29
Tarefas Controle de modificações 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 Leonardo Murta Introdução à Gerência de Configuração 30
Controle de modificações [Leon, 2000] Requisição de modificação Leonardo Murta Introdução à Gerência de Configuração 31
Controle de modificações [White, 2000] Janela de criação de formulários do ClearQuest Leonardo Murta Introdução à Gerência de Configuração 32
Controle de modificações 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 Leonardo Murta Introdução à Gerência de Configuração 33
Controle de modificações [Leon, 2000] Análise de modificação Leonardo Murta Introdução à Gerência de Configuração 34
Controle de modificações 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 Leonardo Murta Introdução à Gerência de Configuração 35
Controle de modificações 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! Leonardo Murta Introdução à Gerência de Configuração 36
Controle de modificações 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 (e.g. falta de treinamento, padrões inadequados, ferramentas inadequadas) Leonardo Murta Introdução à Gerência de Configuração 37
Contabilização da situação Tarefas Armazenamento das informações geradas Propagação dessas informações aos interessados através de relatórios Metáfora de conta bancária para item de configuração Permite que métricas sejam utilizadas com o intuito de melhoria do processo e estimativa de custos futuros Fornece relatórios gerenciais ad-hoc Leonardo Murta Introdução à Gerência de Configuração 38
Contabilização da situação Resultado do relatório no modo tabular no Bugzilla Leonardo Murta Introdução à Gerência de Configuração 39
Contabilização da situação Resultado do relatório no modo de gráfico de pizza no Bugzilla Leonardo Murta Introdução à Gerência de Configuração 40
Contabilização da situação Resultado da consulta sobre séries no Bugzilla Leonardo Murta Introdução à Gerência de Configuração 41
Exemplo de ferramentas de controle de modificações Livre Bugzilla Mantis Redmine Trac Comercial ClearQuest (IBM Rational) JIRA (Atlassian) StarTeam (Borland) Synergy/Change (Telelogic) TeamTrack (Serena) Team Foundation Server (Microsoft) Leonardo Murta Introdução à Gerência de Configuração 42
Sistema de Gerência de Configuração Solicitações Controle de Modificações Artefatos Controle de Versões Construção e Release Leonardo Murta Introdução à Gerência de Configuração 43
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 Leonardo Murta Introdução à Gerência de Configuração 44
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 Leonardo Murta Introdução à Gerência de Configuração 45
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írculo-vicioso de defeitos... Leonardo Murta Introdução à Gerência de Configuração 46
Gerenciamento de releases Necessidade de novas releases Releases Curtas + Testes manuais + Equipe pequena Baixa cobertura dos testes Solicitações de correção dos defeitos Defeitos no produto final Leonardo Murta Introdução à Gerência de Configuração 47
Exemplo de ferramentas de controle de construção e liberação Livre Ant NAnt Make Maven Rake Comercial ClearMake (IBM Rational) MSBuild (Microsoft) Synergy/CM Object Make (Telelogic) Leonardo Murta Introdução à Gerência de Configuração 48
Analisando mais a fundo uma ferramenta popular... Leonardo Murta Introdução à Gerência de Configuração 49
Histórico Projeto iniciado em 2000 Iniciativa da CollabNet Open-Source Intuito de substituir o CVS Similar no uso Melhor na implementação Auto controlado desde agosto de 2001 Leonardo Murta Introdução à Gerência de Configuração 50
Características Versionamento de diretórios Copia, renomeação e movimentação com histórico Check-ins atômicos Versionamento de meta-dados Acesso via http/https Uso extensivo de deltas Delta de binários Delta bidirecional na comunicação cliente/servidor Leonardo Murta Introdução à Gerência de Configuração 51
Problema da concorrência Leonardo Murta Introdução à Gerência de Configuração 52
Política pessimista Leonardo Murta Introdução à Gerência de Configuração 53
Política pessimista Problemas administrativos Bloqueios esquecidos podem atrasar o andamento do projeto Problemas de serialização desnecessária Em alguns casos, as modificações atuam sobre partes independentes dos arquivos bloqueados Falsa sensação de segurança Dependências semânticas podem cruzar a fronteira de arquivos Bloqueios são necessários Quando se trata de arquivos que não podem ser combinados Leonardo Murta Introdução à Gerência de Configuração 54
Política otimista (1/2) Leonardo Murta Introdução à Gerência de Configuração 55
Política otimista (2/2) Leonardo Murta Introdução à Gerência de Configuração 56
Controle de concorrência no Subversion Política pessimista e otimista em conjunto Qualquer artefato pode ser sujeito a bloqueio Artefatos podem ser demarcados com necessita de bloqueio Artefatos bloqueados por um desenvolvedor podem ser editados por outros O commit dos outros somente ocorrerá depois do término do bloqueio Os outros deverão fazer merge Artefatos bloqueados podem ser roubados Bloqueio apoia à comunicação Bloqueio não engessa o processo Leonardo Murta Introdução à Gerência de Configuração 57
Repositório Sistema de arquivos versionado Check-in equivale a uma foto do sistema de arquivos num dado momento Versionamento global Número de versão dado por commit Identificador implícito de conjunto de modificações Algoritmo Bubble up Economia de espaço Velocidade na atualização Controle do histórico Leonardo Murta Introdução à Gerência de Configuração 58
Dimensão ESPAÇO Sistema de arquivos tradicional Leonardo Murta Introdução à Gerência de Configuração 59
Dimensão ESPAÇO Sistema de arquivos versionado Dimensão TEMPO Leonardo Murta Introdução à Gerência de Configuração 60
Versionamento global O repositório é mais que um conjunto de arquivos independentes Mudança de versionamento de arquivos para versionamento do repositório Versão N é o estado do repositório depois do commit N Versão 5 do arquivo X passa a ser lido como arquivo X na versão 5 do repositório Leonardo Murta Introdução à Gerência de Configuração 61
Comando log Fornece um relatório sobre as versões do repositório Por arquivo Por commit Exibe, para cada versão Identificação (número da modificação) Quem (autor) Quando (data) Onde (caminhos) Como (ação nos caminhos) O que (mensagem) Por que (número da solicitação de modificação) Leonardo Murta Introdução à Gerência de Configuração 62
Comando log Sintaxe svn log [-q] [-v] [-r VERSÃO] [URL] Exemplo svn log -q https://reuse.cos.ufrj.br/svn/brecho/trunk/build.xml r92 ronaldo 2007-04-01 17:28:55-0300 (dom, 01 abr 2007) r91 paulacibele 2007-03-19 12:53:47-0300 (seg, 19 mar 2007) r90 paulacibele 2007-03-19 12:44:20-0300 (seg, 19 mar 2007) r51 marinho 2006-01-18 19:03:39-0200 (qua, 18 jan 2006) r47 alexrd 2006-01-07 10:44:46-0200 (sáb, 07 jan 2006) r37 mlopes 2005-09-27 00:46:04-0300 (ter, 27 set 2005) r31 alexrd 2005-09-12 11:15:33-0300 (seg, 12 set 2005)... Leonardo Murta Introdução à Gerência de Configuração 63
Comando log Sintaxe svn log [-q] [-v] [-r VERSÃO] [URL] Exemplo svn log -v -r 92 https://reuse.cos.ufrj.br/svn/brecho r92 ronaldo 2007-04-01 17:28:55-0300 (dom, 01 abr 2007) 1 line Caminhos mudados: M /trunk/build.xml M /trunk/src/br/ufrj/cos/reuse/biblioteca/category/categoryutil.java A /trunk/src/br/ufrj/cos/reuse/biblioteca/category/suggestions.java M /trunk/src/br/ufrj/cos/reuse/biblioteca/category/dao/hibernatecategorydao.java Issue #234: Troca do algoritmo de sugestão de categorias Leonardo Murta Introdução à Gerência de Configuração 64
Algoritmo Bubble up Mecanismo interno do Subversion para controle do repositório Entender esse mecanismo ajuda a entender o funcionamento do Subversion Para um dado commit as ações são Aplicadas nas folhas Propagadas para os diretórios pais Arquivos e diretórios não afetados pelas modificações são preservados Algoritmo utilizado para armazenamento Reverse delta Leonardo Murta Introdução à Gerência de Configuração 65
Repositório inicial 1 Repositório Diretório 1 Arquivo 1 Diretório 2 Arquivo 2 Arquivo 3 Leonardo Murta Introdução à Gerência de Configuração 66
Commit: modificação em um único arquivo 1 Repositório Diretório 1 Arquivo 1 Diretório 2 Arquivo 2 Arquivo 3 Arquivo 3 Leonardo Murta Introdução à Gerência de Configuração 67
Propagação para o diretório pai 1 Repositório Diretório 1 Arquivo 1 Diretório 2 Diretório 2 Arquivo 2 Arquivo 3 Arquivo 3 Leonardo Murta Introdução à Gerência de Configuração 68
Criação da nova versão 1 2 Repositório Diretório 1 Arquivo 1 Diretório 2 Diretório 2 Arquivo 2 Arquivo 3 Arquivo 3 Leonardo Murta Introdução à Gerência de Configuração 69
Commit: adição de um novo arquivo 1 2 Repositório Diretório 1 Arquivo 1 Arquivo 4 Diretório 2 Diretório 2 Arquivo 2 Arquivo 3 Arquivo 3 Leonardo Murta Introdução à Gerência de Configuração 70
Propagação para o diretório pai 1 2 Repositório Diretório 1 Arquivo 1 Diretório 1 Arquivo 4 Diretório 2 Diretório 2 Arquivo 2 Arquivo 3 Arquivo 3 Leonardo Murta Introdução à Gerência de Configuração 71
Criação da nova versão 1 2 Repositório 3 Diretório 1 Arquivo 1 Diretório 1 Arquivo 4 Diretório 2 Diretório 2 Arquivo 2 Arquivo 3 Arquivo 3 Leonardo Murta Introdução à Gerência de Configuração 72
Cópia barata O projeto interno do Subversion visa prover cópias baratas de diretório Os dados não são duplicados Conceito semelhante a hard-link do unix Somente quando há mudanças, o link é quebrado Tempo constante gasto para cópias Mecanismo utilizado para Etiquetas (tags) Ramos (branches) Leonardo Murta Introdução à Gerência de Configuração 73
Versão atual do repositório 5 Repositório Diretório 1 Arquivo 1 Diretório 2 Arquivo 2 Arquivo 3 Diretório 3 Arquivo 4 Leonardo Murta Introdução à Gerência de Configuração 74
Diretório 2 copiado para dentro do Diretório 1 com outro nome 5 Repositório Diretório 1 Arquivo 1 Diretório 2 Diretório 2 Arquivo 2 Arquivo 3 Diretório 3 Arquivo 4 Leonardo Murta Introdução à Gerência de Configuração 75
Conteúdo idêntico ao original 5 Repositório Diretório 1 Arquivo 1 Diretório 2 Diretório 2 Arquivo 2 Arquivo 3 Diretório 3 Arquivo 4 Leonardo Murta Introdução à Gerência de Configuração 76
Propagação para o diretório pai 5 Repositório Diretório 1 Diretório 1 Arquivo 1 Diretório 2 Diretório 2 Arquivo 2 Arquivo 3 Diretório 3 Arquivo 4 Leonardo Murta Introdução à Gerência de Configuração 77
Criação da nova versão 5 6 Diretório 1 Repositório Diretório 1 Arquivo 1 Diretório 2 Diretório 2 Arquivo 2 Arquivo 3 Diretório 3 Arquivo 4 Leonardo Murta Introdução à Gerência de Configuração 78
Layout do repositório Layout é uma convenção Permite mais de um projeto por repositório Ajuda a organizar cada projeto Layout sugerido Um diretório por projeto na raiz do repositório Layout para cada projeto Um diretório para o ramo principal: trunk Um diretório para os ramos: branches Um diretório para as etiquetas: tags Leonardo Murta Introdução à Gerência de Configuração 79
Layout do repositório https://svn.ic.uff.br/ proj1/ trunk/ branches/ tags/ dissertacoes/ fulano/ trunk/ branches/ tags/ beltrano/ trunk/ branches/ tags/... Leonardo Murta Introdução à Gerência de Configuração 80
Etiquetas e Ramos Etiquetas (tags) Cópias baratas do trunk para o diretório tags Troca de nome pelo nome da etiqueta Por convenção, nenhuma edição é feita sobre esse diretório copiado Ramos (branches) Cópias baratas do trunk para o diretório branches Troca de nome pelo nome do ramo Edição no diretório copiado Leonardo Murta Introdução à Gerência de Configuração 81
Comando copy Copia um arquivo ou diretório com histórico entre caminhos no repositório ou espaço de trabalho Casos típicos URL URL: cópia executada atomicamente no servidor, utilizada usualmente para criar etiquetas e ramos Diretório local diretório local: cópia feita no cliente e adição (com histórico) agendada para o próximo commit Leonardo Murta Introdução à Gerência de Configuração 82
Comando copy Sintaxe svn copy ORIGEM DESTINO [-m MENSAGEM] Exemplo svn copy dir1 dir2/novo_dir_1 svn copy https://svn.ic.uff.br/proj1/trunk https://svn.ic.uff.br/proj1/branches/1.0.x -m Criação do ramo 1.0.x svn copy https://svn.ic.uff.br/proj1/branches/1.0.x https://svn.ic.uff.br/proj1/tags/1.0.1 -m Criação da etiqueta 1.0.1 Leonardo Murta Introdução à Gerência de Configuração 83
Espaço de trabalho Diretório comum no sistema de arquivos local Guarda uma cópia limpa do checkout (.svn) Permite algumas operações off-line Permite transmissão de diffs para o servidor Área isolada das modificações de outros desenvolvedores Suas modificações podem ser publicadas com commit Modificações de outros podem ser incorporadas com update Um usuário pode ter vários espaços de trabalho para um mesmo projeto Leonardo Murta Introdução à Gerência de Configuração 84
Comando check-out Constrói um espaço de trabalho a partir de uma versão do repositório (ou parte dela) Leonardo Murta Introdução à Gerência de Configuração 85
Comando check-out Sintaxe svn checkout [-r VERSÃO] URL [CAMINHO] Exemplo svn checkout https://svn.ic.uff.br/proj1/trunk svn checkout -r 15 https://svn.ic.uff.br/proj1/trunk svn checkout https://svn.ic.uff.br/proj1/tags/1.0.3 rel1.0.3 Leonardo Murta Introdução à Gerência de Configuração 86
Comando commit Envia modificações do espaço de trabalho para o repositório Detecta automaticamente o que mudou Libera todos os bloqueios Aplica a modificação de forma atômica no repositório Pode não conseguir enviar caso algum outro usuário tenha dado commit Necessário um update Leonardo Murta Introdução à Gerência de Configuração 87
Comando commit Sintaxe svn commit [-m MENSAGEM] [CAMINHO] Exemplo svn commit -m Adição da versão 1.4.5 do modelo svn commit -m Issue #34: Correção de erro de digitação src Leonardo Murta Introdução à Gerência de Configuração 88
Comando update Atualiza o espaço de trabalho com as últimas modificações existentes no repositório Pode encontrar conflitos durante a atualização É importante verificar cada um dos arquivos atualizados Ações sobre o espaço de trabalho Adição de arquivos (A) Remoção de arquivos (D) Atualização de arquivos (U) Arquivos com conflito (C) Arquivos combinados (G) Leonardo Murta Introdução à Gerência de Configuração 89
Comando update Sintaxe svn update [-r VERSÃO] [CAMINHO] Exemplo svn update svn update -r 12 svn update dir1 Leonardo Murta Introdução à Gerência de Configuração 90
Comportamento dos comandos Arquivo modificado localmente Arquivo modificado no repositório Comando commit Não Não Nenhuma ação Não Sim Nenhuma ação Sim Não Publica a versão local no repositório Sim Sim Falha, avisando que o arquivo está desatualizado Commando update Nenhuma ação Versão local substituída pela versão do repositório Nenhuma ação Versão local combinada com a versão do repositório Leonardo Murta Introdução à Gerência de Configuração 91
Ciclo básico de trabalho Implementação Construção do espaço de trabalho svn checkout svn update svn switch svn add svn delete svn copy svn move svn lock svn blame svn log Verificação svn status svn diff svn revert Integração svn update svn resolved svn commit Leonardo Murta Introdução à Gerência de Configuração 92
Junção de ramos Deve ser feita em um espaço de trabalho limpo Check-out do destino da junção Deve ser entendida como diff & apply Diff é dependente de ordem Diff(A, B): ações necessárias para transformar o caminho A no caminho B O diff pode atuar tanto no espaço quanto no tempo Espaço: diff entre dois diretórios (copiados de um lugar comum) Tempo: diff entre duas versões de um mesmo diretório Leonardo Murta Introdução à Gerência de Configuração 93
Merge no tempo Normalmente usado para ramos trunk 1 2 6 8 11 13 14 15 branches/1.0.x 3 1 = diff(v4, v10) 4 5 7 9 10 12 apply: 1 Espaço de trabalho Leonardo Murta Introdução à Gerência de Configuração 94
Merge no espaço Normalmente usado para etiquetas trunk 1 2 6 8 11 13 14 15 branches/1.0.x 3 4 5 7 9 10 12 tags 1.0.0 1 = diff(1.0.0, 1.0.1) 1.0.1 apply: 1 Espaço de trabalho Leonardo Murta Introdução à Gerência de Configuração 95
Comando merge Aplica a diferença entre dois caminhos no espaço de trabalho svn merge A B Calcula as ações que precisam ser feitas para transformar o caminho A no B Aplica essas ações no espaço de trabalho Leonardo Murta Introdução à Gerência de Configuração 96
Sintaxe Exemplo Comando merge svn merge [-c VERSÃO -r VERSÃO1:VERSÃO2] CAMINHO svn merge CAMINHO1 CAMINHO2 svn merge -c 23 https://svn.ic.uff.br/proj1/branches/1.0.x svn merge -c -23 https://svn.ic.uff.br/proj1/branches/1.0.x svn merge -r 23:29 https://svn.ic.uff.br/proj1/branches/1.0.x svn merge https://svn.ic.uff.br/proj1/tags/1.0.1 https://svn.ic.uff.br/proj1/tags/1.0.2 Leonardo Murta Introdução à Gerência de Configuração 97
Ciclo básico de junção Construção do espaço de trabalho svn checkout svn update svn switch Junção svn merge svn blame svn log Verificação svn status svn diff svn revert Integração svn update svn resolved svn commit Leonardo Murta Introdução à Gerência de Configuração 98
Propriedades Cada diretório ou arquivo pode ter metadados anexados a ele Tuplas <nome, valor> Versionados Algumas propriedades built-in svn:mime-type: tipo do arquivo svn:ignore: elementos que não devem ser versionados em um diretório svn:needs-lock: indica que o arquivo precisa de política de controle de concorrência pessimista Leonardo Murta Introdução à Gerência de Configuração 99
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. 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. http://svnbook.red-bean.com/en/1.4 http://subversion.tigris.org/design.html Leonardo Murta Introdução à Gerência de Configuração 100
Introdução à Gerência de Configuração Leonardo Gresta Paulino Murta leomurta@ic.uff.br