Gestão de Configuração de Software -  GCS Ágil - ES06 – Especialização em Engenharia de Software Prof.: Misael Santos (misael@gmail.com) Ago/2010
Agenda Desenvolvimento Ágil Manifesto Ágil Práticas Metodologias Ágeis XP Integração Contínua GCS Ágil Padrões de Software Conceitos Tipos de Padrões SCM Patterns Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
Desenvolvimento Ágil Origem dos métodos ágeis Anos 80 (Code-and-Fix) Processos unificados (UP) Processos seqüenciais e burocráticos Projeto C3 (Chrysler) Manifesto ágil Agile Alliance (http://www.agilealliance.org/) Copyright © 2010 Misael Santos Gestão de Configuração de Software
Manifesto Ágil “ Estamos evidenciando maneiras melhores de desenvolver software fazendo-o nós mesmos e ajudando outros a fazê-lo.  Através desse trabalho, passamos a valorizar: Software em funcionamento   mais que  documentação abrangente Indivíduos e interação  mais que   processos e ferramentas; Colaboração com o cliente   mais 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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
Extreme Programming (XP) Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 anos A preocupação não é com qualidade e sim com a saúde do sistema (Kent Beck) Copyright © 2010 Misael Santos Gestão de Configuração de Software
Extreme Programming (XP) Humanidade Economia Benefício mútuo Similaridade própria Progresso Diversidade Reflexão Fluxo Oportunidade Redundância Falha Qualidade Passos-de-bebê Aceite Responsabilidade Comunicação Simplicidade Feedback Coragem Respeito Princípios Valores Copyright © 2010 Misael Santos Gestão de Configuração de Software
Extreme Programming (XP) Práticas Primárias (1) Ambiente Informativo Build de Dez Minutos Ciclo Semanal Ciclo Trimestral Desenvolvimento Orientado a Testes (TDD) Design Incremental Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
Extreme Programming (XP) Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Contrato de Escopo Negociável Envolvimento Real do Cliente Equipes que Encolhem Implantação Diária Implantação Incremental Copyright © 2010 Misael Santos Gestão de Configuração de Software
Extreme Programming (XP) Práticas Corolárias (2) Pagar Por Uso Metáforas Refatoração ( Refactoring ) Padrões de Projeto ( Design Patterns ) 40 horas semanais Jogo do Planejamento Reuniões em Pé Padrões de Codificação Copyright © 2010 Misael Santos Gestão de Configuração de Software
Extreme Programming (XP) Agile Change Management Não devemos tratar o processo de  gestão de mudanças  como processo de  prevenção de mundaças . Aceitar bem as mudanças nos requisitos, mesmo em fases avançadas do projeto. Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 corrente.  Copyright © 2010 Misael Santos Gestão de Configuração de Software
Integração Contínua Integração Contínua Síncrona  - Passos Assegurar que o projeto  compila  e todos os  testes  automatizados executam com sucesso Conquistar a vez de integrar Criar um  backup  do projeto na estação de trabalho Fazer  update  do projeto Assegurar que o software  continua compilando  e os  testes  executam com sucesso Fazer  commit  do projeto Apagar o diretório do projeto na estação de trabalho e fazer  checkout Assegurar que o software  continua compilando  e que os  testes  executam com sucesso Copyright © 2010 Misael Santos Gestão de Configuração de Software
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.  Copyright © 2010 Misael Santos Gestão de Configuração de Software
Integração Contínua Integração Contínua Assíncrona – Passos Assegurar que o projeto  compila  e todos os  testes  automatizados executam com sucesso Criar um  backup  do projeto na estação de trabalho Fazer update do projeto Assegurar que o software  continua compilando  e os  testes  executam com sucesso Fazer  commit  do projeto Realizar integração automatizada Copyright © 2010 Misael Santos Gestão de Configuração de Software
Integração Contínua Ferramentas: Hudson Continuum (Apache) CruiseControl LuntBuild Bamboo (Atlassian) Copyright © 2010 Misael Santos Gestão de Configuração de Software
Integração Contínua Ex: Continuum + Java + Maven + CVS Copyright © 2010 Misael Santos Gestão de Configuração de Software
Copyright © 2010 Misael Santos Gestão de Configuração de Software
Integração Contínua 2 - Altera Servidor de IC (Continuum) Equipe Notificações  (Sucesso, Falha) 3 - Build Privada 6 - Build de Integração 6.1 - Testes e Métricas 3.1 - Testes e Métricas 4 - Commit 5 – Update / Checkout Publicação de  Resultados 7 - Deploy 1 – Checkout / Update Copyright © 2010 Misael Santos Gestão de Configuração de Software Repositório (CVS) Servidor de  Relatórios
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 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 Santos Gestão de Configuração de Software
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) Defeitos não capturados pelos testes/revisões  (Defects) Espera (incluindo Espera do Cliente) Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 (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 Santos Gestão de Configuração de Software
Respondendo à Mudanças A autorização para os desenvolvedores realizarem mudanç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) 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 Santos Gestão de Configuração de Software
Automatização Apropriada Eventos 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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
The Three Builds Copyright © 2010 Misael Santos Gestão de Configuração de Software Private Build Task Developer Multi-Task  Coordination Development Team Integration Build Customer / Test  (V&V) Iteration / Release  Release Build Type of Build Project Scale Visibility of Build
CMM x Ágil Copyright © 2010 Misael Santos Gestão de Configuração de Software CMM Á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
GCS Ágil e o Manifesto Ágil Valor 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 Santos Gestão de Configuração de Software
GCS Ágil e o Manifesto Ágil Valor 2 Working Software over Comprehensive Documentation Minimizar artefatos intermediários “ 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 Santos Gestão de Configuração de Software
GCS Ágil e o Manifesto Ágil Valor 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 Santos Gestão de Configuração de Software
GCS Ágil e o Manifesto Ágil Valor 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 “ 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 Santos Gestão de Configuração de Software
Patterns Soluções Comprovadas Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 Testes ( Test Patterns ) .... Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
Formato dos Padrões (1) Componentes básicos de um padrão Nome Contexto A Descrição do Problema Solução Copyright © 2010 Misael Santos Gestão de Configuração de Software
Formato dos Padrões (2) Existem diversos formatos que podem conter Forças Aplicabilidade Usos Conhecidos Consequências Padrões Relacionados Intenção Racionalidade ... Copyright © 2010 Misael Santos Gestão de Configuração de Software
SCM Patterns Software Configuration Management Patterns: Effective Teamwork, Practical Integration Copyright © 2010 Misael Santos Gestão de Configuração de Software
SCM Patterns Consiste em uma Linguagem de Padrões para Gestão de Configuração de Software Copyright © 2010 Misael Santos Gestão de Configuração de Software
SCM Patterns Consiste em uma  Linguagem 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 Santos Gestão de Configuração de Software
SCM Patterns Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
SCM Patterns Workspace-Related Patterns Private Workspace Repository Private System Build Integration Build Third Party Codeline Task Level Commit Smoke Test Unit Test Regression Test Copyright © 2010 Misael Santos Gestão de Configuração de Software
SCM Patterns Codeline-Related Patterns Mainline Active Development Line Codeline Policy Private Versions Release Line Release-Prep Code Line Task Branch Copyright © 2010 Misael Santos Gestão de Configuração de Software
Mainline Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
Mainline Pattern Minimizar o merge e manter um número gerenciável de linhas de desenvolvimento ativas desenvolvendo sobre a Mainline. Copyright © 2010 Misael Santos Gestão de Configuração de Software
Mainline Pattern O merge pode virar uma bagunça... Copyright © 2010 Misael Santos Gestão de Configuração de Software
Mainline Pattern Solução Tenha todas as outras linhas de desenvolvimento frequentemente combinadas à linha de desenvolvimento principal Copyright © 2010 Misael Santos Gestão de Configuração de Software
Mainline Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
Active Development Line Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 )? … Copyright © 2010 Misael Santos Gestão de Configuração de Software
Private Workspace Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 Third Party Codeline Copyright © 2010 Misael Santos Gestão de Configuração de Software
Repository Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
Repository Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
Repository Pattern Questões não resolvidas: Organizar código de terceiros utilizando o  Third-Party Codeline. Copyright © 2010 Misael Santos Gestão de Configuração de Software
Private System Build Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
Integration Build Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
Integration Build Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
Third Party Codeline Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
Third Party Codeline Pattern Administre o código de terceiros usando uma “Linha de Desenvolvimento de Terceiros”. Copyright © 2010 Misael Santos Gestão de Configuração de Software
Task Level Commit Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
Task Level Commit Pattern Quanto trabalho deve ser feito entre cada submissão ao controle de versões? Quanto você deve esperar para commitar suas alterações? Organize as mudanças em código-fonte por unidade de trabalho “orientadas a tarefas”. Copyright © 2010 Misael Santos Gestão de Configuração de Software
Codeline Policy Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
Smoke Test Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Copyright © 2010 Misael Santos Gestão de Configuração de Software
Unit Test Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
Unit Test Pattern Verifique que um módulo ainda funciona depois das suas alterações executando um “Teste Unitário”. Copyright © 2010 Misael Santos Gestão de Configuração de Software
Unit Test Pattern Testes unitários: Deve ser automático É isolado de outros testes Testa o contrato do elemento Deve ser simples de usar: durante a codificação antes de realizar checkin após atualizar o workspace Copyright © 2010 Misael Santos Gestão de Configuração de Software
Regression Test Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
Regression Test Pattern Garanta que código existente não piore quando implementadas melhorias executando um “Teste de Regressão” Deve ser executado para toda build de integração Smoke Tests  não testam o software exaustivamente Testes unitários ( Unit Tests ) testam as partes individualmente Copyright © 2010 Misael Santos Gestão de Configuração de Software
Regression Test Pattern Execute os testes de regressão no sistema quando você quer garantir 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) Copyright © 2010 Misael Santos Gestão de Configuração de Software
Private Versioning Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
Private Versioning Pattern Use o “Versionamento Privado” para permitir que que você trabalhe com alterações complexas localmente 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, cv distribuídos). Copyright © 2010 Misael Santos Gestão de Configuração de Software
Release Line Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
Release Line Pattern Mantenha as versões liberadas sem interferir no desenvolvimento corrente estabelecendo uma “Linha de Release”. Copyright © 2010 Misael Santos Gestão de Configuração de Software
Release Line Pattern Branch Before Release Copyright © 2010 Misael Santos Gestão de Configuração de Software
Release-Prep Codeline Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
Release-Prep Codeline Pattern Estabeleca uma linha de desenvolvimento para uma nova liberação, permitindo que novos trabalhos continuem nas linhas de desenvolvimento ativas, fazendo o trabalho de estabilização sobre uma “Linha de Desenvolvimento de Preparação para Release”. Ao invés de criar uma  branch  depois da release, crie uma  branch  antes da release, permitindo que os desenvolvedores continuem trabalhando na  Mainline . Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 Santos Gestão de Configuração de Software
Task Branch Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
Task Branch Pattern Tenha parte da sua equipe executando uma tarefa sem forçar que o resto da equipe trabalhe em torno da mesma, usando uma “Task Branch”. Crie uma ramificação para cada atividade que possa causar  mudanças significativas  sobre o sistema. Copyright © 2010 Misael Santos Gestão de Configuração de Software
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 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 Santos Gestão de Configuração de Software
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 project. Copyright © 2010 Misael Santos Gestão de Configuração de Software
Outros Padrões para GCS Branching Policy Patterns Padrões descrevendo políticas comportamentais para estabelecer ou preservar  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 Branch Structuring Patterns Padrões descrevendo as colaborações entre duas ou mais branches Copyright © 2010 Misael Santos Gestão de Configuração de Software
SCM Patterns Os padrões podem não representar a melhor solução para o problema, mas apresentam  uma solução comprovada   para o problema em um determinado contexto, dentre muitas outras que podem existir. Copyright © 2010 Misael Santos Gestão de Configuração de Software
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/ 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 Santos Gestão de Configuração de Software

GCS - Aula 09 - GCS Ágil

  • 1.
    Gestão de Configuraçãode Software - GCS Ágil - ES06 – Especialização em Engenharia de Software Prof.: Misael Santos (misael@gmail.com) Ago/2010
  • 2.
    Agenda Desenvolvimento ÁgilManifesto Ágil Práticas Metodologias Ágeis XP Integração Contínua GCS Ágil Padrões de Software Conceitos Tipos de Padrões SCM Patterns Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 3.
    Desenvolvimento Ágil Opeso dos processos de software Busca pela formalização das práticas mais próximas do real Pensamento Nike (Just-Do-It) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 4.
    Desenvolvimento Ágil Origemdos métodos ágeis Anos 80 (Code-and-Fix) Processos unificados (UP) Processos seqüenciais e burocráticos Projeto C3 (Chrysler) Manifesto ágil Agile Alliance (http://www.agilealliance.org/) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 5.
    Manifesto Ágil “Estamos evidenciando maneiras melhores de desenvolver software fazendo-o nós mesmos e ajudando outros a fazê-lo. Através desse trabalho, passamos a valorizar: Software em funcionamento mais que documentação abrangente Indivíduos e interação mais que processos e ferramentas; Colaboração com o cliente mais 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 Santos Gestão de Configuração de Software
  • 6.
    Métodos Ágeis ExtremeProgramming Scrum OpenUp Pragmatic Programming Feature Driven Development (FDD) Crystal Adaptive Software Development Dynamic Systems Development Method (DSDM) Agile Lean Development (LD) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 7.
    Extreme Programming (XP)Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 8.
    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 anos A preocupação não é com qualidade e sim com a saúde do sistema (Kent Beck) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 9.
    Extreme Programming (XP)Humanidade Economia Benefício mútuo Similaridade própria Progresso Diversidade Reflexão Fluxo Oportunidade Redundância Falha Qualidade Passos-de-bebê Aceite Responsabilidade Comunicação Simplicidade Feedback Coragem Respeito Princípios Valores Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 10.
    Extreme Programming (XP)Práticas Primárias (1) Ambiente Informativo Build de Dez Minutos Ciclo Semanal Ciclo Trimestral Desenvolvimento Orientado a Testes (TDD) Design Incremental Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 11.
    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 Santos Gestão de Configuração de Software
  • 12.
    Extreme Programming (XP)Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 13.
    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 Contrato de Escopo Negociável Envolvimento Real do Cliente Equipes que Encolhem Implantação Diária Implantação Incremental Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 14.
    Extreme Programming (XP)Práticas Corolárias (2) Pagar Por Uso Metáforas Refatoração ( Refactoring ) Padrões de Projeto ( Design Patterns ) 40 horas semanais Jogo do Planejamento Reuniões em Pé Padrões de Codificação Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 15.
    Extreme Programming (XP)Agile Change Management Não devemos tratar o processo de gestão de mudanças como processo de prevenção de mundaças . Aceitar bem as mudanças nos requisitos, mesmo em fases avançadas do projeto. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 16.
    Integração Contínua Códigonovo é 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 Santos Gestão de Configuração de Software
  • 17.
    Integração Contínua Integraçãoautomatizada Testes automatizados Sempre atualizar o workspace e testar antes do “Checkin” Realizar “Checkin” com frequência Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 18.
    Integração Contínua ObjetivoMinimizar 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 Santos Gestão de Configuração de Software
  • 19.
    Integração Contínua IntegraçãoContí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 corrente. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 20.
    Integração Contínua IntegraçãoContínua Síncrona - Passos Assegurar que o projeto compila e todos os testes automatizados executam com sucesso Conquistar a vez de integrar Criar um backup do projeto na estação de trabalho Fazer update do projeto Assegurar que o software continua compilando e os testes executam com sucesso Fazer commit do projeto Apagar o diretório do projeto na estação de trabalho e fazer checkout Assegurar que o software continua compilando e que os testes executam com sucesso Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 21.
    Integração Contínua IntegraçãoContí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. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 22.
    Integração Contínua IntegraçãoContínua Assíncrona – Passos Assegurar que o projeto compila e todos os testes automatizados executam com sucesso Criar um backup do projeto na estação de trabalho Fazer update do projeto Assegurar que o software continua compilando e os testes executam com sucesso Fazer commit do projeto Realizar integração automatizada Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 23.
    Integração Contínua Ferramentas:Hudson Continuum (Apache) CruiseControl LuntBuild Bamboo (Atlassian) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 24.
    Integração Contínua Ex:Continuum + Java + Maven + CVS Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 25.
    Copyright © 2010Misael Santos Gestão de Configuração de Software
  • 26.
    Integração Contínua 2- Altera Servidor de IC (Continuum) Equipe Notificações (Sucesso, Falha) 3 - Build Privada 6 - Build de Integração 6.1 - Testes e Métricas 3.1 - Testes e Métricas 4 - Commit 5 – Update / Checkout Publicação de Resultados 7 - Deploy 1 – Checkout / Update Copyright © 2010 Misael Santos Gestão de Configuração de Software Repositório (CVS) Servidor de Relatórios
  • 27.
    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 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 Santos Gestão de Configuração de Software
  • 28.
    Desperdícios no Desenvolvimentode 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) Defeitos não capturados pelos testes/revisões (Defects) Espera (incluindo Espera do Cliente) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 29.
    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 Santos Gestão de Configuração de Software
  • 30.
    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 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 Santos Gestão de Configuração de Software
  • 31.
    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 Santos Gestão de Configuração de Software
  • 32.
    Respondendo à MudançasGerenciar 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 (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 Santos Gestão de Configuração de Software
  • 33.
    Respondendo à MudançasA autorização para os desenvolvedores realizarem mudanç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) 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 Santos Gestão de Configuração de Software
  • 34.
    Automatização Apropriada Eventosautomatizados 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 Santos Gestão de Configuração de Software
  • 35.
    As Três BuildsPrivate 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 Santos Gestão de Configuração de Software
  • 36.
    The Three BuildsCopyright © 2010 Misael Santos Gestão de Configuração de Software Private Build Task Developer Multi-Task Coordination Development Team Integration Build Customer / Test (V&V) Iteration / Release Release Build Type of Build Project Scale Visibility of Build
  • 37.
    CMM x ÁgilCopyright © 2010 Misael Santos Gestão de Configuração de Software CMM Á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
  • 38.
    GCS Ágil eo Manifesto Ágil Valor 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 Santos Gestão de Configuração de Software
  • 39.
    GCS Ágil eo Manifesto Ágil Valor 2 Working Software over Comprehensive Documentation Minimizar artefatos intermediários “ 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 Santos Gestão de Configuração de Software
  • 40.
    GCS Ágil eo Manifesto Ágil Valor 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 Santos Gestão de Configuração de Software
  • 41.
    GCS Ágil eo Manifesto Ágil Valor 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 “ 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 Santos Gestão de Configuração de Software
  • 42.
    Patterns Soluções ComprovadasCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 43.
    Padrões de SoftwareO 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 Santos Gestão de Configuração de Software
  • 44.
    Padrões de SoftwareBenefí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 Santos Gestão de Configuração de Software
  • 45.
    Padrões de SoftwarePadrõ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 Santos Gestão de Configuração de Software
  • 46.
    Tipos de Padrõesde 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 Santos Gestão de Configuração de Software
  • 47.
    Tipos de Padrõesde 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 Testes ( Test Patterns ) .... Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 48.
    Tipos de Padrõesde 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 Santos Gestão de Configuração de Software
  • 49.
    Tipos de Padrõesde 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 Santos Gestão de Configuração de Software
  • 50.
    Formato dos Padrões(1) Componentes básicos de um padrão Nome Contexto A Descrição do Problema Solução Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 51.
    Formato dos Padrões(2) Existem diversos formatos que podem conter Forças Aplicabilidade Usos Conhecidos Consequências Padrões Relacionados Intenção Racionalidade ... Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 52.
    SCM Patterns SoftwareConfiguration Management Patterns: Effective Teamwork, Practical Integration Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 53.
    SCM Patterns Consisteem uma Linguagem de Padrões para Gestão de Configuração de Software Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 54.
    SCM Patterns Consisteem uma Linguagem 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 Santos Gestão de Configuração de Software
  • 55.
    SCM Patterns Copyright© 2010 Misael Santos Gestão de Configuração de Software
  • 56.
    SCM Patterns ObjetivoAjudar 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 Santos Gestão de Configuração de Software
  • 57.
    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 Santos Gestão de Configuração de Software
  • 58.
    SCM Patterns Workspace-RelatedPatterns Private Workspace Repository Private System Build Integration Build Third Party Codeline Task Level Commit Smoke Test Unit Test Regression Test Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 59.
    SCM Patterns Codeline-RelatedPatterns Mainline Active Development Line Codeline Policy Private Versions Release Line Release-Prep Code Line Task Branch Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 60.
    Mainline Pattern Copyright© 2010 Misael Santos Gestão de Configuração de Software
  • 61.
    Mainline Pattern Minimizaro merge e manter um número gerenciável de linhas de desenvolvimento ativas desenvolvendo sobre a Mainline. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 62.
    Mainline Pattern Omerge pode virar uma bagunça... Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 63.
    Mainline Pattern SoluçãoTenha todas as outras linhas de desenvolvimento frequentemente combinadas à linha de desenvolvimento principal Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 64.
    Mainline Pattern Copyright© 2010 Misael Santos Gestão de Configuração de Software
  • 65.
    Mainline Pattern Questõesnão resolvidas: Como manter a “Mainline” utilizável quando muitas pessoas estão trabalhando nela? ( Active Development Line ) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 66.
    Active Development LinePattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 67.
    Active Development LinePattern 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 Santos Gestão de Configuração de Software
  • 68.
    Active Development LinePattern 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 )? … Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 69.
    Private Workspace PatternCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 70.
    Private Workspace PatternPrevenir 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 Santos Gestão de Configuração de Software
  • 71.
    Private Workspace PatternQuestõ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 Third Party Codeline Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 72.
    Repository Pattern Copyright© 2010 Misael Santos Gestão de Configuração de Software
  • 73.
    Repository Pattern Configurarum novo workspace populando-o a partir de um “Repositório” que contém tudo o que você precisa. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 74.
    Repository Pattern Copyright© 2010 Misael Santos Gestão de Configuração de Software
  • 75.
    Repository Pattern Questõesnão resolvidas: Organizar código de terceiros utilizando o Third-Party Codeline. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 76.
    Private System BuildPattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 77.
    Private System BuildPattern 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 Santos Gestão de Configuração de Software
  • 78.
    Private System BuildPattern 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 Santos Gestão de Configuração de Software
  • 79.
    Private System BuildPattern Questões não resolvidas Como saber se você não está inserindo problemas à funcionalidade? ( Smoke Test Pattern ) … Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 80.
    Integration Build PatternCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 81.
    Integration Build PatternGaranta que o seu código base sempre gere builds confiáveis fazendo uma Integração (Integration Build) periodicamente. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 82.
    Integration Build PatternCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 83.
    Integration Build PatternQuestões não resolvidas: Como garantir que a build de integração é utilizável? ( Smoke Test, Regression Test ) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 84.
    Third Party CodelinePattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 85.
    Third Party CodelinePattern Administre o código de terceiros usando uma “Linha de Desenvolvimento de Terceiros”. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 86.
    Task Level CommitPattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 87.
    Task Level CommitPattern Quanto trabalho deve ser feito entre cada submissão ao controle de versões? Quanto você deve esperar para commitar suas alterações? Organize as mudanças em código-fonte por unidade de trabalho “orientadas a tarefas”. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 88.
    Codeline Policy PatternCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 89.
    Codeline Policy PatternCrie 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 Santos Gestão de Configuração de Software
  • 90.
    Smoke Test PatternCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 91.
    Smoke Test PatternGaranta 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 Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 92.
    Unit Test PatternCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 93.
    Unit Test PatternVerifique que um módulo ainda funciona depois das suas alterações executando um “Teste Unitário”. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 94.
    Unit Test PatternTestes unitários: Deve ser automático É isolado de outros testes Testa o contrato do elemento Deve ser simples de usar: durante a codificação antes de realizar checkin após atualizar o workspace Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 95.
    Regression Test PatternCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 96.
    Regression Test PatternGaranta que código existente não piore quando implementadas melhorias executando um “Teste de Regressão” Deve ser executado para toda build de integração Smoke Tests não testam o software exaustivamente Testes unitários ( Unit Tests ) testam as partes individualmente Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 97.
    Regression Test PatternExecute os testes de regressão no sistema quando você quer garantir 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) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 98.
    Private Versioning PatternCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 99.
    Private Versioning PatternUse o “Versionamento Privado” para permitir que que você trabalhe com alterações complexas localmente 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, cv distribuídos). Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 100.
    Release Line PatternCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 101.
    Release Line PatternMantenha as versões liberadas sem interferir no desenvolvimento corrente estabelecendo uma “Linha de Release”. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 102.
    Release Line PatternBranch Before Release Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 103.
    Release-Prep Codeline PatternCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 104.
    Release-Prep Codeline PatternEstabeleca uma linha de desenvolvimento para uma nova liberação, permitindo que novos trabalhos continuem nas linhas de desenvolvimento ativas, fazendo o trabalho de estabilização sobre uma “Linha de Desenvolvimento de Preparação para Release”. Ao invés de criar uma branch depois da release, crie uma branch antes da release, permitindo que os desenvolvedores continuem trabalhando na Mainline . Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 105.
    Release-Prep Codeline PatternQuestõ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 Santos Gestão de Configuração de Software
  • 106.
    Task Branch PatternCopyright © 2010 Misael Santos Gestão de Configuração de Software
  • 107.
    Task Branch PatternTenha parte da sua equipe executando uma tarefa sem forçar que o resto da equipe trabalhe em torno da mesma, usando uma “Task Branch”. Crie uma ramificação para cada atividade que possa causar mudanças significativas sobre o sistema. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 108.
    Outros Padrões paraGCS 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 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 Santos Gestão de Configuração de Software
  • 109.
    Outros Padrões paraGCS 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 project. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 110.
    Outros Padrões paraGCS Branching Policy Patterns Padrões descrevendo políticas comportamentais para estabelecer ou preservar 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 Branch Structuring Patterns Padrões descrevendo as colaborações entre duas ou mais branches Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 111.
    SCM Patterns Ospadrões podem não representar a melhor solução para o problema, mas apresentam uma solução comprovada para o problema em um determinado contexto, dentre muitas outras que podem existir. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  • 112.
    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/ 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 Santos Gestão de Configuração de Software