Gestão de Configuração de Software Ágil

112
Gestão Gestão de de Configuração Configuração de de Software Software - GCS GCS Ágil Ágil - ES06 – Especialização em Engenharia de Software Prof.: Misael Santos ([email protected]) Ago/2010

description

Aula de Gestão de Configuração de Software Ágil

Transcript of Gestão de Configuração de Software Ágil

Page 1: Gestão de Configuração de Software Ágil

GestãoGestão de de ConfiguraçãoConfiguração de de SoftwareSoftwareSoftwareSoftware-- GCS GCS ÁgilÁgil --

ES06 – Especialização em Engenharia de Software

Prof.: Misael Santos ([email protected])

Ago/2010

Page 2: Gestão de Configuração de Software Ágil

Agenda� Desenvolvimento Ágil

� Manifesto Ágil� Práticas

� Metodologias Ágeis� XP

� Integração Contínua� Integração Contínua

� GCS Ágil

� Padrões de Software� Conceitos

� Tipos de Padrões

� SCM Patterns

Copyright © 2010 Misael Santos2

Gestão de Configuração de Software

Page 3: Gestão de Configuração de Software Ágil

Desenvolvimento Ágil� O peso dos processos de software

� Busca pela formalização das práticas mais próximas do real

� Pensamento Nike (Just-Do-It)

Copyright © 2010 Misael Santos3

Gestão de Configuração de Software

Page 4: Gestão de Configuração de Software Ágil

Desenvolvimento Ágil� Origem dos métodos ágeis

�Anos 80 (Code-and-Fix)� Processos unificados (UP)� Processos seqüenciais e burocráticosProjeto C3 (Chrysler)� Projeto C3 (Chrysler)

�Manifesto ágil�Agile Alliance (http://www.agilealliance.org/)

Copyright © 2010 Misael Santos4

Gestão de Configuração de Software

Page 5: Gestão de Configuração de Software Ágil

Manifesto Ágil“Estamos evidenciando maneiras melhores de desenvolversoftware fazendo-o nós mesmos e ajudando outros a fazê-lo.

Através desse trabalho, passamos a valorizar:

Software em funcionamentomais que documentação abrangente

Indivíduos e interação mais que processos e ferramentas;

Colaboração com o clientemais que negociação de contratos;

Responder a mudanças mais que seguir um plano.

Ou seja, mesmo tendo valor os itens à direita, valorizamos mais os itens à esquerda.”

Copyright © 2010 Misael Santos5

Gestão de Configuração de Software

Page 6: Gestão de Configuração de Software Ágil

Métodos Ágeis� Extreme Programming

� Scrum

� OpenUp

� Pragmatic Programming

� Feature Driven Development (FDD)

� Crystal

� Adaptive Software Development

� Dynamic Systems Development Method (DSDM)

� Agile Lean Development (LD)

Copyright © 2010 Misael Santos6

Gestão de Configuração de Software

Page 7: Gestão de Configuração de Software Ágil

Extreme Programming (XP)

A imagem não pode ser exibida. Talvez o computador não tenha memória suficiente para abrir a imagem ou talvez ela esteja corrompida. Reinicie o computador e abra o arquivo novamente. Se ainda assim aparecer o x vermelho, poderá ser necessário excluir a imagem e inseri-la novamente.

Copyright © 2010 Misael Santos7

Gestão de Configuração de Software

Page 8: Gestão de Configuração de Software Ágil

Extreme Programming (XP)� É formado por um conjunto de valores, princípios e práticas

� Ao contrário do que os gurus pregam, o XP pode ser usado com CMM e UPs como atestam alguns estudos específicos nos últimos anosespecíficos nos últimos anos

� A preocupação não é com qualidade e sim com a saúde do sistema (Kent Beck)

Copyright © 2010 Misael Santos8

Gestão de Configuração de Software

Page 9: Gestão de Configuração de Software Ágil

Extreme Programming (XP)

� Humanidade� Economia� Benefício mútuo� Similaridade própria� Progresso� Diversidade� Reflexão

� Comunicação

� Simplicidade

� Feedback

Princípios

Valores

� Reflexão� Fluxo� Oportunidade� Redundância� Falha� Qualidade� Passos-de-bebê� Aceite� Responsabilidade

� Feedback

� Coragem

� Respeito

Copyright © 2010 Misael Santos9

Gestão de Configuração de Software

Page 10: Gestão de Configuração de Software Ágil

Extreme Programming (XP)

�Práticas Primárias (1)�Ambiente Informativo

� Build de Dez Minutos

�Ciclo Semanal�Ciclo Semanal

�Ciclo Trimestral

�Desenvolvimento Orientado a Testes (TDD)

�Design Incremental

Copyright © 2010 Misael Santos10

Gestão de Configuração de Software

Page 11: Gestão de Configuração de Software Ágil

Extreme Programming (XP)�Práticas Primárias (2)

� Equipe Integral� Folga�Histórias� Integração Contínua� Programação em Par� Sentar-se Junto� Trabalho Energizado

Copyright © 2010 Misael Santos11

Gestão de Configuração de Software

Page 12: Gestão de Configuração de Software Ágil

Extreme Programming (XP)

Copyright © 2010 Misael Santos12

Gestão de Configuração de Software

Page 13: Gestão de Configuração de Software Ágil

Extreme Programming (XP)� Práticas Corolárias (1)

� Análise da Raiz do Problema� Base de Código Unificada� Código Coletivo� Código e Testes� Continuidade da Equipe� Continuidade da Equipe� Contrato de Escopo Negociável� Envolvimento Real do Cliente� Equipes que Encolhem� Implantação Diária� Implantação Incremental

Copyright © 2010 Misael Santos13

Gestão de Configuração de Software

Page 14: Gestão de Configuração de Software Ágil

Extreme Programming (XP)� Práticas Corolárias (2)

� Pagar Por Uso� Metáforas� Refatoração (Refactoring)� Padrões de Projeto (Design Patterns)� Padrões de Projeto (Design Patterns)� 40 horas semanais� Jogo do Planejamento� Reuniões em Pé� Padrões de Codificação

Copyright © 2010 Misael Santos14

Gestão de Configuração de Software

Page 15: Gestão de Configuração de Software Ágil

Extreme Programming (XP)� Agile Change Management

�Não devemos tratar o processo de gestão de mudançascomo processo de prevenção de mundaças.

�Aceitar bem as mudanças nos requisitos, mesmo em fases avançadas do projeto.fases avançadas do projeto.

Copyright © 2010 Misael Santos15

Gestão de Configuração de Software

Page 16: Gestão de Configuração de Software Ágil

Integração Contínua� Código novo é integrado com o sistema atual em algumas horas. Na integração o sistema é “construído” e todos os testes devem ser bem sucedidos ou as mudanças serão descartadas.

Copyright © 2010 Misael Santos16

Gestão de Configuração de Software

Page 17: Gestão de Configuração de Software Ágil

Integração Contínua� Integração automatizada

� Testes automatizados

� Sempre atualizar o workspace e testar antes do “Checkin”

� Realizar “Checkin” com frequência

Copyright © 2010 Misael Santos17

Gestão de Configuração de Software

Page 18: Gestão de Configuração de Software Ágil

Integração Contínua

�Objetivo�Minimizar a existência de problemas de integração no código-base do sistema. Quanto mais cedo forem descobertos, mais fácil de identificá-los e corrigí-los.

Copyright © 2010 Misael Santos18

Gestão de Configuração de Software

Page 19: Gestão de Configuração de Software Ágil

Integração Contínua� Integração Contínua Síncrona�Apenas um par integra seu trabalho de cada vez e outros pares só são liberados para integrar ao serem informados do término da integração serem informados do término da integração corrente.

Copyright © 2010 Misael Santos19

Gestão de Configuração de Software

Page 20: Gestão de Configuração de Software Ágil

Integração Contínua� Integração Contínua Síncrona - Passos1. Assegurar que o projeto compila e todos os testes automatizados executam

com sucesso2. Conquistar a vez de integrar3. Criar um backup do projeto na estação de trabalho4. Fazer update do projeto4. Fazer update do projeto5. Assegurar que o software continua compilando e os testes executam com

sucesso6. Fazer commit do projeto7. Apagar o diretório do projeto na estação de trabalho e fazer checkout8. Assegurar que o software continua compilando e que os testes executam com

sucesso

Copyright © 2010 Misael Santos20

Gestão de Configuração de Software

Page 21: Gestão de Configuração de Software Ágil

Integração Contínua� Integração Contínua Assíncrona

� Projetos nos quais os desenvolvedores não trabalhem juntos em uma mesma sala.

� Em tais casos torna-se difícil ou impossível garantir que apenas um desenvolvedor irá integrar de cada vez. um desenvolvedor irá integrar de cada vez.

Copyright © 2010 Misael Santos21

Gestão de Configuração de Software

Page 22: Gestão de Configuração de Software Ágil

Integração Contínua� Integração Contínua Assíncrona – Passos

1. Assegurar que o projeto compila e todos os testesautomatizados executam com sucesso

2. Criar um backup do projeto na estação de trabalho3. Fazer update do projeto3. Fazer update do projeto4. Assegurar que o software continua compilando e os testes executam com sucesso

5. Fazer commit do projeto6. Realizar integração automatizada

Copyright © 2010 Misael Santos22

Gestão de Configuração de Software

Page 23: Gestão de Configuração de Software Ágil

Integração Contínua� Ferramentas:

�Hudson�Continuum (Apache)�CruiseControl� LuntBuild� LuntBuild� Bamboo (Atlassian)

Copyright © 2010 Misael Santos23

Gestão de Configuração de Software

Page 24: Gestão de Configuração de Software Ágil

Integração Contínua� Ex:�Continuum + Java + Maven + CVS

Copyright © 2010 Misael Santos24

Gestão de Configuração de Software

Page 25: Gestão de Configuração de Software Ágil

Copyright © 2010 Misael Santos25

Gestão de Configuração de Software

Page 26: Gestão de Configuração de Software Ágil

Integração Contínua

Servidor de IC(Continuum)

Notificações (Sucesso, Falha)

6 - Build de Integração

6.1 - Testes e Métricas

Publicação de Resultados

7 - Deploy

2 - Altera

Repositório(CVS)

Servidor de Relatórios

Equipe

3 - Build Privada

3.1 - Testes e Métricas

4 - Commit

5 – Update / Checkout

Resultados

1 – Checkout / Update

Copyright © 2010 Misael Santos26

Gestão de Configuração de Software

Page 27: Gestão de Configuração de Software Ágil

GCS Ágil“GCS Ágil” não é um oxímoro?

� Muitos consideram GCS como um processo pesado que impede o “trabalho real" do desenvolvimento

� Para muitos projetos GCS funciona bem� Alguns compensam evitando ferramentas e práticas que fazem com � Alguns compensam evitando ferramentas e práticas que fazem com que processo de GCS seja inerentemente limitante.

� Outros querem controlar e ter tantos processos de GCS que chegam a prejudicar a eles mesmos.

Copyright © 2010 Misael Santos27

Gestão de Configuração de Software

Page 28: Gestão de Configuração de Software Ágil

Desperdícios no Desenvolvimento de Software� Funcionalidades Extra/Não-utilizadas (Overproduction)

� Trabalho parcialmente desenvolvido não liberado para a produção (Inventory)

� Artefatos Intermediários/Não-Utilizados (Extra Processing)

� Busca de Informações (Motion)� Busca de Informações (Motion)

� Defeitos não capturados pelos testes/revisões (Defects)

� Espera (incluindo Espera do Cliente)

Copyright © 2010 Misael Santos28

Gestão de Configuração de Software

Page 29: Gestão de Configuração de Software Ágil

O que é GCS Ágil?� A aplicação pragmática de:

� Práticas e Princípios da Gestão de Configuração� de acordo com os Valores Ágeis� usando o “Pensamento Enxuto” (Lean Thinking)

para atender as necessidades de Negócios!

Copyright © 2010 Misael Santos29

Gestão de Configuração de Software

Page 30: Gestão de Configuração de Software Ágil

Requisitos da GCS Ágil�Servir aos profissionais e não vice-versa!

�Derrubar as paredes entre a GCS & desenvolvedores para que o time todo trabalhe junto para entregar software de qualidade utilizando uma abordagem ágil

�Responder às mudanças ao invés de prevení-las�Responder às mudanças ao invés de prevení-las

�Rastrear e coordenar o desenvolvimento ao invés de tentar controlar os desenvolvedores

�Se esforçar para ser transparente e automatizar o máximo possível

Copyright © 2010 Misael Santos30

Gestão de Configuração de Software

Page 31: Gestão de Configuração de Software Ágil

Características da GCS Ágil�GCS é uma responsabilidade do time inteiro

�Documentação & Rastreabilidade Enxutas

�Gerenciamento Agressivo de Dependências

�Feedback Contínuo e Visível � Sobre a Qualidade, Estabilidade e Integridade

�Coordenação e automação frequente + rápida

Copyright © 2010 Misael Santos31

Gestão de Configuração de Software

Page 32: Gestão de Configuração de Software Ágil

Respondendo à Mudanças� Gerenciar as espectativas dos interessados com comunicação próxima e poucas fronteiras � Tomadores de decisões devem estar disponíveis & acessíveis para dar respostas rápidas

� No início de cada iteração espectativas e prioridades são � No início de cada iteração espectativas e prioridades são (re)definidas e (re)calibradas

� CCB’s devem ser chamados de “encontros de replanejamento” para evitar o estigma de tentar “controlar” as mudanças

� Trabalhar somente com features da iteração corrente

Copyright © 2010 Misael Santos32

Gestão de Configuração de Software

Page 33: Gestão de Configuração de Software Ágil

Respondendo à MudançasA autorização para os desenvolvedores realizaremmudanças precisa ser instantânea:� Uma vez que o desenvolvedor foi atribuído a uma tarefa, ele não deve precisar esperar para obter os itens do repositório (checkout)(checkout)

� Se um erro “quebra” a build ou falha no teste o desenvolvimento deve ser ágil para efetivamente repará-lo sem ter que esperar pela notificação de autorização

� Nenhuma permissão adicional deve ser requerida para a refatoração (refactoring)

Copyright © 2010 Misael Santos33

Gestão de Configuração de Software

Page 34: Gestão de Configuração de Software Ágil

Automatização ApropriadaEventos automatizados que ocorrem frequentemente mudam raramente e requerem consistência.� Eventos relacionados a builds, publicação (deployment), releases formais, testes automatizados, builds de integração

� Por que?: Minimizar Artefatos & Espera� Documentar esses procedimentos via scripts, aumenta a produtividade no desenvolvimento e diminui custos de administração

Copyright © 2010 Misael Santos34

Gestão de Configuração de Software

Page 35: Gestão de Configuração de Software Ágil

As Três Builds� Private Developer Build

� Fornece uma forma consistente para o desenvolvedor construir o software (build) nos confins da sua área de desenvolvimento privada

� Team Integration Build� Sincronizar a equipe fornecendo feedback sobre a qualidade e a integridade

� Formal Release Build� Criar pacotes implantáveis

� Por que?:� Produtividade, previsibilidade, documentação, habilidade para a atividade de build sem comprometer a GC ou a qualidade.

Copyright © 2010 Misael Santos35

Gestão de Configuração de Software

Page 36: Gestão de Configuração de Software Ágil

PrivateBuild

Task

Developer

Multi-Task

Coordination

Development

Team

IntegrationBuild

Customer /

Test (V

&V)It

eration /

Release

ReleaseBuild

Task

Developer

Multi

Coordination

Development

Team

Customer /

(V&V)It

eration /

Release

The Three Builds

Copyright © 2010 Misael Santos36

Gestão de Configuração de Software

Page 37: Gestão de Configuração de Software Ágil

CMM x ÁgilCMM Ágil

O gerenciamento desempenha um papel fundamental para o sucesso do projeto

O gerenciamento é como uma função de coach, que ajuda a eliminar barreiras para o progresso do projeto

O foco é na organização (empresa) O foco é no projeto ou na equipe

O CMMI é amplamente benéfico, especialmente em mercados maduros

Métodos Ágeis tem maior benefício em mercados emergentes ou incompreendidos

O CMMI pressupõe uma visão de longo prazo

O Ágil foca no curto e médio prazo

O CMMI nasceu em domínios de falhas de alto custo

O Ágil Floresceu em domínios de falhas de baixo custo

O CMMI tem forte ênfase em “revisar enquanto desenvolve“

Métodos Ágeis pregam o desenvolvimento simultâneo

Copyright © 2010 Misael Santos37

Gestão de Configuração de Software

Page 38: Gestão de Configuração de Software Ágil

GCS Ágil e o Manifesto ÁgilValor 1

Individuals and Interactions over Processes and Tools� Processos e ferramentas de GCS devem suportar a maneira com que você trabalha e não o contrário.

“Processos não escrevem software. Pessoas sim!”

Copyright © 2010 Misael Santos38

Gestão de Configuração de Software

Page 39: Gestão de Configuração de Software Ágil

GCS Ágil e o Manifesto ÁgilValor 2

Working Software over Comprehensive Documentation� Minimizar artefatos intermediários

“Simple-size it!”“Simple-size it!”

� GCS pode automatizar as políticas e processos de desenvolvimento com conhecimento executável sobre o conhecimento documentado

“Automatização Apropriada”

Copyright © 2010 Misael Santos39

Gestão de Configuração de Software

Page 40: Gestão de Configuração de Software Ágil

GCS Ágil e o Manifesto ÁgilValor 3

Customer Collaboration over Contract Negotiation� A GCS deve facilitar a comunicação entre os interessados e ajudar a gerenciar as espectativas

Copyright © 2010 Misael Santos40

Gestão de Configuração de Software

Page 41: Gestão de Configuração de Software Ágil

GCS Ágil e o Manifesto ÁgilValor 4

Responding to Change over Following a Plan� GC diz respeito a facilitar mudanças, não prevení-las

� “Mudanças em requisitos em fases adiantadas do ciclo de vida são vantagens competitivas SE você consegue agir sobre elas!”

– Mary Poppendieck– Mary Poppendieck

� “Projetos ágeis não são controlados em conformidade com o planejamento mas em conformidade com valores do negócio.”

� Se aceitamos a noção de mudanças & turbulência constantes então planos são úteis como guias mas não como mecanismos de controle … porque eles tendem a punir ações corretas.”

– James Highsmith

“A Mudança não é o inimigo – estagnação é! Não tente prevenir mudanças! Se planeje para isso!”

Copyright © 2010 Misael Santos41

Gestão de Configuração de Software

Page 42: Gestão de Configuração de Software Ágil

Patterns

Soluções Comprovadas

Copyright © 2010 Misael Santos

Gestão de Configuração de Software42

Page 43: Gestão de Configuração de Software Ágil

Padrões de Software� O que é um padrão?

Um padrão é uma solução documentada para

um problema recorrente em um determinado

contexto.

Padrão (Pattern) ≠ Padronização (Standard)

Copyright © 2010 Misael Santos43

Gestão de Configuração de Software

Page 44: Gestão de Configuração de Software Ágil

Padrões de Software� Benefícios

� Aumentar a reutilização

� Documentar soluções

� Passar conhecimento para iniciantes

� Fornecer um vocabulário comum entre os desenvolvedores

� Aumentar a qualidade do produto

� ...

Copyright © 2010 Misael Santos44

Gestão de Configuração de Software

Page 45: Gestão de Configuração de Software Ágil

Padrões de Software� Padrões x Coleções de Padrões

� Padrões isolados resolvem problemas pontuais� Conjuntos de padrões podem construir um sistema inteiro, preenchendo todas as lacunas de um contexto inteiro

Copyright © 2010 Misael Santos45

Gestão de Configuração de Software

Page 46: Gestão de Configuração de Software Ágil

Tipos de Padrões de Software (1)� Atualmente existem padrões de software para as mais diversas áreas da Engenharia de Software

� Existem diversas formas de classificar os Padrões de Software.

Copyright © 2010 Misael Santos46

Gestão de Configuração de Software

Page 47: Gestão de Configuração de Software Ágil

Tipos de Padrões de Software (2)� Quanto à fase de desenvolvimento em o padrão é aplicado

� Padrões de Análise (Analisys Patterns)

� Padrões de Projeto (Design Patterns)� Erich Gamma (GoF)

Padrões de Implementação (Idioms)� Padrões de Implementação (Idioms)

� Padrões de Testes (Test Patterns)

� ....

Copyright © 2010 Misael Santos47

Gestão de Configuração de Software

Page 48: Gestão de Configuração de Software Ágil

Tipos de Padrões de Software (3)� Quanto à Tecnologia

� Padrões J2EE (Core J2EE Patterns)

� Padrões para Web

� Padrões para XML (XML Patterns)

� Padrões para Bancos de Dados

� Padrões para Ajax (Ajax Patterns)

� Padrões para Interface Gráfica (GUI Patterns)

� ...

Copyright © 2010 Misael Santos48

Gestão de Configuração de Software

Page 49: Gestão de Configuração de Software Ágil

Tipos de Padrões de Software (4)� Quanto de Processo/Metologias

� Padrões de Processo (Process Patterns)� Padrões de Gestão de Configuração (SCM Patterns)� Padrões de Segurança (Security Patterns)� ...� ...

Copyright © 2010 Misael Santos49

Gestão de Configuração de Software

Page 50: Gestão de Configuração de Software Ágil

Formato dos Padrões (1)� Componentes básicos de um padrão

� Nome� Contexto� A Descrição do Problema� Solução� Solução

Copyright © 2010 Misael Santos50

Gestão de Configuração de Software

Page 51: Gestão de Configuração de Software Ágil

Formato dos Padrões (2)� Existem diversos formatos que podem conter

� Forças

� Aplicabilidade

� Usos Conhecidos

� Consequências� Consequências

� Padrões Relacionados

� Intenção

� Racionalidade

� ...

Copyright © 2010 Misael Santos51

Gestão de Configuração de Software

Page 52: Gestão de Configuração de Software Ágil

SCM Patterns� Software Configuration Management Patterns:

Effective Teamwork, Practical Integration

Copyright © 2010 Misael Santos52

Gestão de Configuração de Software

Page 53: Gestão de Configuração de Software Ágil

SCM Patterns� Consiste em uma Linguagem de Padrões para Gestão de Configuração de Software

Copyright © 2010 Misael Santos53

Gestão de Configuração de Software

Page 54: Gestão de Configuração de Software Ágil

SCM Patterns� Consiste em uma Linguagem de PadrõesLinguagem de Padrões para Gestão de Configuração de Software

Conjunto de Padrões que se unem

para formar um “sistema”.

Copyright © 2010 Misael Santos54

Gestão de Configuração de Software

Page 55: Gestão de Configuração de Software Ágil

SCM Patterns

Copyright © 2010 Misael Santos55

Gestão de Configuração de Software

Page 56: Gestão de Configuração de Software Ágil

SCM Patterns� Objetivo

� Ajudar a entender como as partes de uma ambiente de desenvolvimento interagem entre si para que possamos utilizar de forma efetiva a gestão de configuração.

Copyright © 2010 Misael Santos56

Gestão de Configuração de Software

Page 57: Gestão de Configuração de Software Ágil

SCM Patterns� Princípio:

� Usar a Gestão de Configuração, especialmente o controle de versões, como parte de um ambiente de desenvolvimento ágil.

Copyright © 2010 Misael Santos57

Gestão de Configuração de Software

Page 58: Gestão de Configuração de Software Ágil

SCM Patterns� Workspace-Related Patterns

� Private Workspace

� Repository

� Private System Build

� Integration Build

� Third Party Codeline� Third Party Codeline

� Task Level Commit

� Smoke Test

� Unit Test

� Regression Test

Copyright © 2010 Misael Santos58

Gestão de Configuração de Software

Page 59: Gestão de Configuração de Software Ágil

SCM Patterns� Codeline-Related Patterns

� Mainline� Active Development Line� Codeline Policy� Private Versions� Private Versions� Release Line� Release-Prep Code Line� Task Branch

Copyright © 2010 Misael Santos59

Gestão de Configuração de Software

Page 60: Gestão de Configuração de Software Ágil

Mainline Pattern

Copyright © 2010 Misael Santos60

Gestão de Configuração de Software

Page 61: Gestão de Configuração de Software Ágil

Mainline Pattern� Minimizar o merge e manter um número gerenciável de linhas de desenvolvimento ativas desenvolvendo sobre a Mainline.

Copyright © 2010 Misael Santos61

Gestão de Configuração de Software

Page 62: Gestão de Configuração de Software Ágil

Mainline Pattern� O merge pode virar uma bagunça...

Copyright © 2010 Misael Santos62

Gestão de Configuração de Software

Page 63: Gestão de Configuração de Software Ágil

Mainline Pattern� Solução

� Tenha todas as outras linhas de desenvolvimento frequentemente combinadas à linha de desenvolvimento principal

Copyright © 2010 Misael Santos63

Gestão de Configuração de Software

Page 64: Gestão de Configuração de Software Ágil

Mainline Pattern

Copyright © 2010 Misael Santos64

Gestão de Configuração de Software

Page 65: Gestão de Configuração de Software Ágil

Mainline Pattern� Questões não resolvidas:

� Como manter a “Mainline” utilizável quando muitas pessoas estão trabalhando nela? (Active Development Line)

Copyright © 2010 Misael Santos65

Gestão de Configuração de Software

Page 66: Gestão de Configuração de Software Ágil

Active Development Line Pattern

Copyright © 2010 Misael Santos66

Gestão de Configuração de Software

Page 67: Gestão de Configuração de Software Ágil

Active Development Line Pattern� Manter uma linha de desenvolvimento em evolução rapidamente estável o suficiente para que seja útil na criação de “Linhas de Desenvolvimento Ativas”.

Copyright © 2010 Misael Santos67

Gestão de Configuração de Software

Page 68: Gestão de Configuração de Software Ágil

Active Development Line Pattern� Questões não resolvidas:

� Como identificar a linha de desenvolvimento estável? (Codeline Policy)

� Como isolar o trabalho dos desenvolvedores da “Linha de Desenvolvimento Ativa” (Private Workspace)?Desenvolvimento Ativa” (Private Workspace)?

� …

Copyright © 2010 Misael Santos68

Gestão de Configuração de Software

Page 69: Gestão de Configuração de Software Ágil

Private Workspace Pattern

Copyright © 2010 Misael Santos69

Gestão de Configuração de Software

Page 70: Gestão de Configuração de Software Ágil

Private Workspace Pattern� Prevenir que questões de integração distraiam você e que suas mudanças causem outros problemas desenvolvendo em uma “Área de Trabalho Privada”.

Copyright © 2010 Misael Santos70

Gestão de Configuração de Software

Page 71: Gestão de Configuração de Software Ágil

Private Workspace Pattern� Questões não resolvidas:

� Evitar inserir erros no sistema ao consolidar suas alterações no repositório (Private System Build)

� Outros padrões relacionados:� Repository� Repository

� Third Party Codeline

Copyright © 2010 Misael Santos71

Gestão de Configuração de Software

Page 72: Gestão de Configuração de Software Ágil

Repository Pattern

Copyright © 2010 Misael Santos72

Gestão de Configuração de Software

Page 73: Gestão de Configuração de Software Ágil

Repository Pattern� Configurar um novo workspace populando-o a partir de um “Repositório” que contém tudo o que você precisa.

Copyright © 2010 Misael Santos73

Gestão de Configuração de Software

Page 74: Gestão de Configuração de Software Ágil

Repository Pattern

Copyright © 2010 Misael Santos74

Gestão de Configuração de Software

Page 75: Gestão de Configuração de Software Ágil

Repository Pattern� Questões não resolvidas:

� Organizar código de terceiros utilizando o Third-Party Codeline.

Copyright © 2010 Misael Santos75

Gestão de Configuração de Software

Page 76: Gestão de Configuração de Software Ágil

Private System Build Pattern

Copyright © 2010 Misael Santos76

Gestão de Configuração de Software

Page 77: Gestão de Configuração de Software Ágil

Private System Build Pattern� Verifique se suas mudanças não “quebrarão” a build fazendo uma “integração privada do sistema” antes de consolidar as suas alterações no Repositório.

Copyright © 2010 Misael Santos77

Gestão de Configuração de Software

Page 78: Gestão de Configuração de Software Ágil

Private System Build Pattern� Semelhante ao Integration Build, todavia alguns detalhes relacionados à release e empacotamento podem ser omitidos.

� Deve incluir todas as dependências

� Deve incluir todos os componentes dependentes da mudança

Copyright © 2010 Misael Santos78

Gestão de Configuração de Software

Page 79: Gestão de Configuração de Software Ágil

Private System Build Pattern� Questões não resolvidas

� Como saber se você não está inserindo problemas à funcionalidade? (Smoke Test Pattern)

� …

Copyright © 2010 Misael Santos79

Gestão de Configuração de Software

Page 80: Gestão de Configuração de Software Ágil

Integration Build Pattern

Copyright © 2010 Misael Santos80

Gestão de Configuração de Software

Page 81: Gestão de Configuração de Software Ágil

Integration Build Pattern� Garanta que o seu código base sempre gere builds confiáveis fazendo uma Integração (Integration Build) periodicamente.

Copyright © 2010 Misael Santos81

Gestão de Configuração de Software

Page 82: Gestão de Configuração de Software Ágil

Integration Build Pattern

Copyright © 2010 Misael Santos82

Gestão de Configuração de Software

Page 83: Gestão de Configuração de Software Ágil

Integration Build Pattern� Questões não resolvidas:

� Como garantir que a build de integração é utilizável? (Smoke Test, Regression Test)

Copyright © 2010 Misael Santos83

Gestão de Configuração de Software

Page 84: Gestão de Configuração de Software Ágil

Third Party Codeline Pattern

Copyright © 2010 Misael Santos84

Gestão de Configuração de Software

Page 85: Gestão de Configuração de Software Ágil

Third Party Codeline Pattern

� Administre o código de terceiros usando uma “Linha de Desenvolvimento de Terceiros”.

Copyright © 2010 Misael Santos85

Gestão de Configuração de Software

Page 86: Gestão de Configuração de Software Ágil

Task Level Commit Pattern

Copyright © 2010 Misael Santos86

Gestão de Configuração de Software

Page 87: Gestão de Configuração de Software Ágil

Task Level Commit Pattern

� Quanto trabalho deve ser feito entre cada submissão ao controle de versões? Quanto você deve esperarpara commitar suas alterações?

� Organize as mudanças em código-fonte por� Organize as mudanças em código-fonte porunidade de trabalho “orientadas a tarefas”.

Copyright © 2010 Misael Santos87

Gestão de Configuração de Software

Page 88: Gestão de Configuração de Software Ágil

Codeline Policy Pattern

Copyright © 2010 Misael Santos88

Gestão de Configuração de Software

Page 89: Gestão de Configuração de Software Ágil

Codeline Policy Pattern� Crie uma “Política de Linhas de Desenvolvimento” para ajudar desenvolvedores a decidir onde e quando realizar o “check in” e que procedimentos devem ser seguidos antes de um checkin para cada Linha de Desenvolvimento.

Copyright © 2010 Misael Santos89

Gestão de Configuração de Software

Page 90: Gestão de Configuração de Software Ágil

Smoke Test Pattern

Copyright © 2010 Misael Santos90

Gestão de Configuração de Software

Page 91: Gestão de Configuração de Software Ágil

Smoke Test Pattern� Garanta que o sistema ainda funcione depois de suas alterações executando o “Smoke Test”

� Teste não exaustivo sobre as funcionalidades básicas da aplicação

� Verificar se a aplicação não “quebra” de forma óbvia� Verificar se a aplicação não “quebra” de forma óbvia

Copyright © 2010 Misael Santos91

Gestão de Configuração de Software

Page 92: Gestão de Configuração de Software Ágil

Unit Test Pattern

Copyright © 2010 Misael Santos92

Gestão de Configuração de Software

Page 93: Gestão de Configuração de Software Ágil

Unit Test Pattern� Verifique que um módulo ainda funciona depois das suas alterações executando um “Teste Unitário”.

Copyright © 2010 Misael Santos93

Gestão de Configuração de Software

Page 94: Gestão de Configuração de Software Ágil

Unit Test Pattern� Testes unitários:

� Deve ser automático� É isolado de outros testes� Testa o contrato do elemento� Deve ser simples de usar:� Deve ser simples de usar:

� durante a codificação

� antes de realizar checkin

� após atualizar o workspace

Copyright © 2010 Misael Santos94

Gestão de Configuração de Software

Page 95: Gestão de Configuração de Software Ágil

Regression Test Pattern

Copyright © 2010 Misael Santos95

Gestão de Configuração de Software

Page 96: Gestão de Configuração de Software Ágil

Regression Test Pattern� Garanta que código existente não piore quandoimplementadas melhorias executando um “Teste de Regressão”

� Deve ser executado para toda build de integração

� Smoke Tests não testam o software exaustivamente� Smoke Tests não testam o software exaustivamente

� Testes unitários (Unit Tests) testam as partes individualmente

Copyright © 2010 Misael Santos96

Gestão de Configuração de Software

Page 97: Gestão de Configuração de Software Ágil

Regression Test Pattern� Execute os testes de regressão no sistema quando você quergarantir uma certa estabilidade a ele

� Crie testes de regressão de casos de testes que falharam no passado (relatos de verificações de qualidade, relatos do cliente)cliente)

Copyright © 2010 Misael Santos97

Gestão de Configuração de Software

Page 98: Gestão de Configuração de Software Ágil

Private Versioning Pattern

Copyright © 2010 Misael Santos98

Gestão de Configuração de Software

Page 99: Gestão de Configuração de Software Ágil

Private Versioning Pattern

�Use o “Versionamento Privado” para permitir queque você trabalhe com alterações complexaslocalmente e ainda consiga tirar vantagem dos benefícios de uma sistema de controle de versões.

�Use uma branch, um repositório local, ferramentas próprias (níveis de promoção, cvdistribuídos).

Copyright © 2010 Misael Santos99

Gestão de Configuração de Software

Page 100: Gestão de Configuração de Software Ágil

Release Line Pattern

Copyright © 2010 Misael Santos100

Gestão de Configuração de Software

Page 101: Gestão de Configuração de Software Ágil

Release Line Pattern� Mantenha as versões liberadas sem interferir no desenvolvimento corrente estabelecendo uma “Linha de Release”.

Copyright © 2010 Misael Santos101

Gestão de Configuração de Software

Page 102: Gestão de Configuração de Software Ágil

Release Line Pattern

�Branch Before Release

Copyright © 2010 Misael Santos102

Gestão de Configuração de Software

Page 103: Gestão de Configuração de Software Ágil

Release-Prep Codeline Pattern

Copyright © 2010 Misael Santos103

Gestão de Configuração de Software

Page 104: Gestão de Configuração de Software Ágil

Release-Prep Codeline Pattern� Estabeleca uma linha de desenvolvimento para uma nova liberação, permitindo que novos trabalhos continuem naslinhas de desenvolvimento ativas, fazendo o trabalho de estabilização sobre uma “Linha de Desenvolvimento de Preparação para Release”.Preparação para Release”.

� Ao invés de criar uma branch depois da release, crie umabranch antes da release, permitindo que os desenvolvedorescontinuem trabalhando na Mainline.

Copyright © 2010 Misael Santos104

Gestão de Configuração de Software

Page 105: Gestão de Configuração de Software Ágil

Release-Prep Codeline Pattern� Questões não resolvidas:

� Se apenas algumas pessoas estão trabalhando na próxima release, inicie uma Task Branch para o novo trabalho

Copyright © 2010 Misael Santos105

Gestão de Configuração de Software

Page 106: Gestão de Configuração de Software Ágil

Task Branch Pattern

Copyright © 2010 Misael Santos106

Gestão de Configuração de Software

Page 107: Gestão de Configuração de Software Ágil

Task Branch Pattern� Tenha parte da sua equipe executando uma tarefa sem forçarque o resto da equipe trabalhe em torno da mesma, usandouma “Task Branch”.

� Crie uma ramificação para cada atividade que possa causarmudanças significativas sobre o sistema.mudanças significativas sobre o sistema.

Copyright © 2010 Misael Santos107

Gestão de Configuração de Software

Page 108: Gestão de Configuração de Software Ágil

Outros Padrões para GCS� Merge Early and Often

� Merge changes from a branch to its codeline as soon as the changes on the branch are completed and tested

� Bill of Materials� You can successfully build the software system today and need to be able � You can successfully build the software system today and need to be able

to build the same version in the future

� Reproducible Build� You’ve built the software system and created a build process, and need to

know that it can be reproduced

Copyright © 2010 Misael Santos108

Gestão de Configuração de Software

Page 109: Gestão de Configuração de Software Ágil

Outros Padrões para GCS� Shared Object Cache

� Allows developers to perform local builds based on extracted files and a common set of object files.

� Shared-Source Escalation� Maintain and support a common set of code used by more than one � Maintain and support a common set of code used by more than one

project.

Copyright © 2010 Misael Santos109

Gestão de Configuração de Software

Page 110: Gestão de Configuração de Software Ágil

Outros Padrões para GCS� Branching Policy Patterns

� Padrões descrevendo políticas comportamentais para estabelecer oupreservar as características físicas ou conceituais de uma linha de desenvolvimento

� Branch Creation Patterns� Padrões descrevendo quando criar um novo tipo de branch� Padrões descrevendo quando criar um novo tipo de branch

� Branch Structuring Patterns� Padrões descrevendo as colaborações entre duas ou mais branches

Copyright © 2010 Misael Santos110

Gestão de Configuração de Software

Page 111: Gestão de Configuração de Software Ágil

SCM Patterns� Os padrões podem não representar a melhor solução para o problema, mas apresentam uma solução comprovadapara o problema em um determinado contexto, dentre muitas outras que podem existir.

Copyright © 2010 Misael Santos111

Gestão de Configuração de Software

Page 112: Gestão de Configuração de Software Ágil

Referências� AMBLER, S. W. Examining Agile Manifesto, Disponível em: http://www.ambysoft.com/essays/agileManifesto.html

� APPLETON, B. Agile Configuration Management Enviroments, Chicago SPIN, Chicago, 2004.

� BECK K. et al.,Manifesto for Agile Software Development, Disponível em: http://agilemanifesto.org/http://agilemanifesto.org/

� MILFONT, C. Agile Software Development: Princípios, valores e práticas aplicados em um estudo de caso, Sun Tech Days 2006, Fortaleza, CE, 2006.

� Improve IT, Extreme Programming, Disponível em: http://www.improveit.com.br/

Copyright © 2010 Misael Santos112

Gestão de Configuração de Software