Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio,...

Post on 07-Apr-2016

215 views 1 download

Transcript of Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio,...

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.