Post on 07-Apr-2016
Metodologia de Metodologia de Desenvolvimento de Desenvolvimento de
SoftwareSoftwareAlexandre Vasconcelos, André Santos,
Augusto Sampaio, Hermano Moura, Paulo Borba
© Centro de InformáticaUniversidade Federal de Pernambuco
Gerência de Configuração e Gerência de Configuração e mudançamudançaAndré Santos
Objetivo
Compreender a importância do uso de mecanismos de gerência de configuração e gerência de mudança, seus métodos, processos e ferramentas.
TópicosTó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
IntroduçãoIntrodução
SEI CMM: 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 definir e administrar configurações desses itens, ao longo
do processo de desenvolvimento.
IntroduçãoIntrodução
Parte essencial do processo de desenvolvimento. Visa eliminar problemas de
atualizações simultâneas limitação de notificação existencia de múltiplas versões do sistema (produção,
desenvolvimento, teste etc.)
IntroduçãoIntrodução
Benefícios: suporte a metodologias de desenvolvimento mantém integridade do sistema garante completude e corretude do produto configurado provê um ambiente estável para o desenvolvimento do
produto restringe mudanças nos artefatos, baseado em uma
política provê formas de auditar porque, quando e por quem um
artefato foi modificado.
IntroduçãoIntrodução
Principais aspectos tratados em CM: Change Request Management (CRM) Configuration Status Accounting (Métricas) Configuration Management (CM) Change Tracking Version Selection Software Manufacture
IntroduçãoIntroduçã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 requisistos documentos de análise e projeto código fonte programas e scripts de tests
IntroduçãoIntrodução
Vamos nos referir no texto a código fonte, que é o artefato em que mais se usa essas técnicas.
Mas elas podem e devem ser usadas para todos os artefatos, dependendo do tamanho e complexidade do projeto.
TópicosTó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
A necessidade de controle do código fonteA 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?
A necessidade de mergingA necessidade de merging
Software desenvolvido por uma equipe serializar o acesso aos programas pode ser improdutivo.
Pequenas alterações não precisam exigir acesso exclusivo aos programas
Alterações em métodos diferentes de uma mesma classe não precisam na maioria das vezes ser feitos seqüencialmente.
como fazer para que mais de uma pessoa possa estar trabalhando em um mesmo arquivo ao mesmo tempo?
Merging automático viabiliza o desenvolvimento paralelo
TópicosTó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
Controle do Código FonteControle do Código Fonte
semelhante ao controle de integridade em um Banco de Dados moderno
Exige a instalação, configuração e manutenção de um produto especificamente para controlar o código fonte.
Possui um conjunto básico de ações de controle de código fonte a serem realizadas pelo desenvolvedor.
DesenvolvedorA
DesenvolvedorBRepositório
Check-in 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ção de mudança (comentário) commit do arquivo.
Informações são guardadas no próprio arquivo ou junto com ele.
Desenvolvedor Repositório
Check-out 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
LockingLocking Sistemas de controle de código fonte 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.
Desenvolvedor
prog1.c
prog2.c
prog3.c
Repositório
TaggingTagging Permite “marcar” um conjunto de arquivos com um
nome (tag). Um tag representa um ou mais arquivos em um ou
mais diretórios. Tagging de versão de projeto: controla uma dada
versão do projeto, em determinada data ou com determinada funcionalidade.
Tagging de arquivo de projeto: marca um conjunto de arquivos como pertencentes a um projeto, sem associação com a versão dos arquivos.
TaggingTagging
Arquivos marcados com tag A representamo projeto A:topdir/file1topdir/file2topdir/subdir1/file6topdir/subdir2/file8topdir/dubdir2/file9
file2topdir
subdir1
subdir2
file1
file3
file4
file5
file6
file7 file8 file9
BranchingBranching
Branching é a mais complicada das atividades básicas de controle de código fonte é fundamental ter estratégias de branching bem
definidas. 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 esperar
pelo caos.
BranchingBranching
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.
Uso de locks limita o trabalho dos programadores.
BranchingBranching
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!
BranchingBranching
1 42 3file.c
2.2
2.1
MergingMerging
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.
2-way merges, até 32-way merges.
MergingMerging
Situações a serem tratadas: funcionalidades diferentes, sem conflito. funcionalidades em conflito, que podem ser
combinadas. Exemplo: tamanho de array. funcionalidades em conflito, que não podem ser
combinadas. Neste caso, os desenvolvedores tem que entrar
em acordo.
MergingMerging
Merging é essencial se for permitida a criação de branches. Normalmente, os vários branches do sistema
retornarão ao branch principal de desenvolvimento.
Um dos critérios para criação de branches é o tempo necessário para realizar uma alteração.
Gerenciamento de BranchingGerenciamento de Branching
Estratégias de Branching define porque e quando branches são criados quais atividades ocorrem nos branches como os branches morrem ou migram para o
branch principal.
Gerenciamento de BranchingGerenciamento de Branching
Estratégias de Merging Objetivos conflitantes:
maximizar produtividade individual do desenvolvedor
maximizar a habilidade de um desenvolvedor se beneficiar do trabalho dos outros
Gerenciamento de BranchingGerenciamento de Branching
Tipos de merge merge no tronco principal merge (a partir) do tronco principal
branch de merge
BranchingBranching
1hello.c 2 3 4
1hello.h 2 3
5 6
4
Jan 5 Jan 10 Jan 20
BranchingBranching
1hello.c 2 3 4
1hello.h 2 3
5 6
4
3.j.1hello.c 3.j.2 3.j.3
2.j.1hello.h 2.j.2José
Maria3.m.1hello.c 3.m.2 3.m.3
2.m.1hello.h 2.m.2
•
•
MergingMerging
3hello.c 4
2hello.h 3
5
4
3.j.1hello.c 3.j.2 3.j.3
2.j.1hello.h 2.j.2José
Maria3.m.1hello.c 3.m.2 3.m.3
2.m.1hello.h 2.m.2
3.j.4
2.j.3
•
•
TópicosTó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
BuildsBuilds
“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 necesário)
No UnixNo Unix Makefile comando make
CC = gcc
OPTS = -O
hello: hello.o
$(CC) $(OPTS) hello.o -o hello
hello.o: hello.c
$(CC) ($OPTS) -c hello.c
Ambiente de desenvolvimentoAmbiente de desenvolvimento
Objetivo: reproducibilidade Especificar ambiente de build
hardware software procedimentos
Verificar reproducibilidade
Relatório de BuildRelatório de Build
Lista ambiente arquivos localização
necessários para gerar o build de uma versão específica do software
ReferênciasReferências
Descrição do workflow de gerência de configuração e mudanças - CD do RUP
Configuration Management Today - http://cmtoday.com
Software Release Methodology, M.E.Bays, Prentice Hall, 1999.