38
Metodologia de Metodologia de Desenvolvimento Desenvolvimento de Software de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de Pernambuco

Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

Embed Size (px)

Citation preview

Page 1: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 2: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.

Page 3: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 4: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.

Page 5: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.)

Page 6: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.

Page 7: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 8: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 9: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.

Page 10: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 11: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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?

Page 12: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 13: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 14: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 15: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 16: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 17: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 18: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.

Page 19: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 20: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.

Page 21: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.

Page 22: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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!

Page 23: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

BranchingBranching

1 42 3file.c

2.2

2.1

Page 24: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.

Page 25: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.

Page 26: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.

Page 27: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.

Page 28: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 29: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

Gerenciamento de BranchingGerenciamento de Branching

Tipos de merge merge no tronco principal merge (a partir) do tronco principal

branch de merge

Page 30: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

BranchingBranching

1hello.c 2 3 4

1hello.h 2 3

5 6

4

Jan 5 Jan 10 Jan 20

Page 31: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 32: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 33: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 34: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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)

Page 35: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 36: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

Ambiente de desenvolvimentoAmbiente de desenvolvimento

Objetivo: reproducibilidade Especificar ambiente de build

hardware software procedimentos

Verificar reproducibilidade

Page 37: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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

Page 38: Metodologia de Desenvolvimento de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade

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.