Introdução ao Controle de Versões › ~leomurta › courses › 2012.2 › labgc ›...
Transcript of Introdução ao Controle de Versões › ~leomurta › courses › 2012.2 › labgc ›...
Introdução ao Controle de Versões
Leonardo Murta ([email protected])
Introdução
• A Engenharia de Software...
– Abordagem disciplinada para o desenvolvimento de software
– Grande diversidade de metodologias
Leonardo Murta Introdução ao Controle de Versões 2
Introdução
• Ponto em comum nas metodologias:
– refinamentos sucessivos de artefatos
Leonardo Murta Introdução ao Controle de Versões 3
http://www.colegiosaofrancisco.com.br
Mas onde ficam esses artefatos?
Leonardo Murta Introdução ao Controle de Versões 4
Tarefas de Engenharia de
Software
Artefato novo
Repositório
Artefato modificado
Artefato
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 ao Controle de Versões 5
Gerência de Configuração
Desenvolvimento Liberação Implantação Produção
Leonardo Murta Introdução ao Controle de Versões 6
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)
Leonardo Murta Introdução ao Controle de Versões 7
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
Item de configuração
• Agregação de hardware e/ou software que será passível de gerência de configuração e tratado como um elemento único
• Tipos de ICs
– Produtos de trabalho do projeto
– Produtos de trabalho de processos
• Exemplos: plano de GC, requisitos, modelos, código-fonte, etc.
Leonardo Murta Introdução ao Controle de Versões 8
Versão
• Instâncias de um mesmo item de configuração que diferem entre si em algo (tipos: revisões e variantes)
Leonardo Murta Introdução ao Controle de Versões 9
IC
1.0
IC
1.1
IC
1.2
IC
1.1.1
IC
1.1.2
IC
1.3
IC
2.0
IC
1.4
IC
2.1
Configuração
• Um conjunto de versões de Itens de Configuração (IC), onde existe somente uma versão selecionada para cada IC do conjunto
• Uma configuração pode ser vista como a versão de um IC composto de outros ICs
• Exemplos – Configuração do sistema – Configuração do processo – Configuração do módulo X – Configuração dos requisitos do sistema – Configuração do código fonte
Leonardo Murta Introdução ao Controle de Versões 10
Leonardo Murta Introdução ao Controle de Versões 11
Etiqueta (tag) • Mecanismo usado para identificar uma configuração
– As diversas versões de ICs marcadas com um rótulo constituem uma configuração
do sistema
• Permite identificar níveis de qualidade dos ICs
• Sinônimo: rótulo (label)
1.1
1.2
1.3
AloMundo.java
1.1
1.2
1.3
BemVindo.java
1.1
1.2
build.xml
1.1
1.2
Usuario.java
1.0.0
1.0.1
Etiqueta
Leonardo Murta Introdução ao Controle de Versões 12
Configuração x versão
Configuração
Versão
IC composto IC primitivo
IC
• Genericamente
– O sistema S é composto pelos arquivos X, Y e Z
• Concretamente
– A configuração 5 do sistema S é composta pela versão 2 do arquivo X, versão 4 do arquivo Y e versão 6 do arquivo Z
Configuração x versão
Leonardo Murta Introdução ao Controle de Versões 13
IC composto
Conf. 1
Conf. 2
Conf. 3
IC primitivo 1 IC primitivo 2 IC primitivo 3
V.1
V.2
V.3
V.4
V.1
V.2
V.1
V.2
V.3
Sistema de Gerência de Configuração
Leonardo Murta Introdução ao Controle de Versões 14
Versão 1
Versão 2
Versão 3
Versão 4
Versão 5
Sistema de Gerência de Configuração
Leonardo Murta Introdução ao Controle de Versões 15
Versão 1
Versão 2
Versão 3
Versão 4
Versão 5
Sistema de Gerência de Configuração
Leonardo Murta Introdução ao Controle de Versões 16
Versão 1
Versão 2
Versão 3
Versão 4
Versão 5
Sistema de Gerência de Configuração
Leonardo Murta Introdução ao Controle de Versões 17
Artefatos
Controle de Versões
Construção e Release
Controle de Modificações
Solicitações
Sistema de Gerência de Configuração
Leonardo Murta Introdução ao Controle de Versões 18
Artefatos
Controle de Versões
Construção e Release
Controle de Modificações
Solicitações
Controle de versões
Leonardo Murta Introdução ao Controle de Versões 19
Armazenamento?
Colaboração?
Consulta?
Topologia?
Repositório
Item de Configuração
Topologia
Leonardo Murta Introdução ao Controle de Versões 20
Repositório
Espaço de Trabalho
Centralizado Distribuído
check-in /
com
mit
check-o
ut / u
pdate
Repositório
Espaço de Trabalho c
heck-in
check-o
ut / u
pdate
Repositório
Espaço de Trabalho
clo
ne / p
ull
push
Armazenamento
Leonardo Murta Introdução ao Controle de Versões 21
v.3
v.2
v.1
Completo
delta 12
v.1
Forward
delta 23
delta 32
v.3
Reverse
delta 21
In-line
v.1 v.2/3
v.1/2 v.3
Colaboração
Leonardo Murta Introdução ao Controle de Versões 22
m.3
m.2
m.1
Pessimista
junção
m.1
Otimista Misto
m.2 m.3
junção
m.1
m.2 m.3
Consulta
Leonardo Murta Introdução ao Controle de Versões 23
Artefato 5
Versão 1
Versão 2
Versão 4
Modificação 4
Artefato 2
Artefato 5
Artefato 7
Artefato
Versão
1
*
Modificação
*
1
•Informações
–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)
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 ao Controle de Versões 24
Leonardo Murta Introdução ao Controle de Versões 25
Ramos (exemplo 1) • Manutenção em série
– Ramo principal: evolução
– Ramos auxiliares: correções
Sistema
Rel. 1
1.0 1.1 1.2
Rel. 2
2.0 2.1
Verif. Verif.
RC1 RC2 Evolução Evolução Desenv.
Correção Correção Correção
Leonardo Murta Introdução ao Controle de Versões 26
Ramos (exemplo 2) • Organização por requisições
– Ramo principal: integração
– Ramos auxiliares: requisições
• Permite que cada requisição seja identificada (change sets)
• Torna possível a remoção de uma requisição do produto
Integração
Requisição 1
RM1
Requisição 3
RM3
Requisição 2
RM2
Junção
• Processo de migração de
– Espaços de trabalho
– Ramos
Leonardo Murta Introdução ao Controle de Versões 27
X Y Z
A Y
<X> ou <A>? Y <Z> ou nada?
X Y Z
A Y
X Y
A Y Z
2-way merge 3-way merge
Leonardo Murta Introdução ao Controle de Versões 28
Conflitos
• Situação onde não é possível executar a junção de forma automática
• Tipos – Físico (linha do arquivo)
– Lógico (sintaxe do arquivo)
– Semântico (conteúdo do arquivo)
• O suporte atual concentra no nível físico!
• Exemplos de conflitos físicos – Alterações em paralelo de uma mesma linha
– Remoção e alteração em paralelo de uma mesma linha
– Adições de linhas em paralelo na mesma região do arquivo
Introdução ao Controle de Versões 29
Exemplo (junção no Eclipse)
Leonardo Murta
Leonardo Murta Introdução ao Controle de Versões 30
Exemplo de ferramentas de controle de versões
• Livre – Git – Mercurial – Subversion
• Comercial – BitKeeper (BitMover) – ClearCase (IBM Rational) – Perforce – PVCS (Serena) – StarTeam (Borland) – Synergy/CM (Telelogic) – Team Foundation Server (Microsoft)
Introdução ao Controle de Versões
Leonardo Murta ([email protected])