GCS - Aula 09 - GCS Ágil

1,891
-1

Published on

GCS - Aula 09 - GCS Ágil

Aspectos quanto ao conceito de GCS Ágil, práticas ágeis relacionadas à GCS e Padrões de Gestão de Configuração de Software

Disciplina de Gestão de Configuração de Software do Curso de Especialização em Engenharia de Software.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,891
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

GCS - Aula 09 - GCS Ágil

  1. 1. Gestão de Configuração de Software - GCS Ágil - ES06 – Especialização em Engenharia de Software Prof.: Misael Santos (misael@gmail.com) Ago/2010
  2. 2. Agenda <ul><li>Desenvolvimento Ágil </li></ul><ul><ul><li>Manifesto Ágil </li></ul></ul><ul><ul><ul><li>Práticas </li></ul></ul></ul><ul><ul><li>Metodologias Ágeis </li></ul></ul><ul><ul><ul><li>XP </li></ul></ul></ul><ul><ul><ul><li>Integração Contínua </li></ul></ul></ul><ul><li>GCS Ágil </li></ul><ul><li>Padrões de Software </li></ul><ul><ul><li>Conceitos </li></ul></ul><ul><ul><li>Tipos de Padrões </li></ul></ul><ul><li>SCM Patterns </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  3. 3. Desenvolvimento Ágil <ul><li>O peso dos processos de software </li></ul><ul><li>Busca pela formalização das práticas mais próximas do real </li></ul><ul><li>Pensamento Nike (Just-Do-It) </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  4. 4. Desenvolvimento Ágil <ul><li>Origem dos métodos ágeis </li></ul><ul><ul><li>Anos 80 (Code-and-Fix) </li></ul></ul><ul><ul><li>Processos unificados (UP) </li></ul></ul><ul><ul><li>Processos seqüenciais e burocráticos </li></ul></ul><ul><ul><li>Projeto C3 (Chrysler) </li></ul></ul><ul><ul><li>Manifesto ágil </li></ul></ul><ul><ul><li>Agile Alliance (http://www.agilealliance.org/) </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  5. 5. Manifesto Ágil <ul><li>“ Estamos evidenciando maneiras melhores de desenvolver </li></ul><ul><li>software fazendo-o nós mesmos e ajudando outros a fazê-lo. </li></ul><ul><li>Através desse trabalho, passamos a valorizar: </li></ul><ul><li>Software em funcionamento mais que documentação abrangente </li></ul><ul><li>Indivíduos e interação mais que processos e ferramentas; </li></ul><ul><li>Colaboração com o cliente mais que negociação de contratos; </li></ul><ul><li>Responder a mudanças mais que seguir um plano. </li></ul><ul><li>Ou seja, mesmo tendo valor os itens à direita, valorizamos mais os itens à esquerda.” </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  6. 6. Métodos Ágeis <ul><li>Extreme Programming </li></ul><ul><li>Scrum </li></ul><ul><li>OpenUp </li></ul><ul><li>Pragmatic Programming </li></ul><ul><li>Feature Driven Development (FDD) </li></ul><ul><li>Crystal </li></ul><ul><li>Adaptive Software Development </li></ul><ul><li>Dynamic Systems Development Method (DSDM) </li></ul><ul><li>Agile Lean Development (LD) </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  7. 7. Extreme Programming (XP) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  8. 8. Extreme Programming (XP) <ul><li>É formado por um conjunto de valores, princípios e práticas </li></ul><ul><li>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 </li></ul><ul><li>A preocupação não é com qualidade e sim com a saúde do sistema (Kent Beck) </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  9. 9. Extreme Programming (XP) <ul><li>Humanidade </li></ul><ul><li>Economia </li></ul><ul><li>Benefício mútuo </li></ul><ul><li>Similaridade própria </li></ul><ul><li>Progresso </li></ul><ul><li>Diversidade </li></ul><ul><li>Reflexão </li></ul><ul><li>Fluxo </li></ul><ul><li>Oportunidade </li></ul><ul><li>Redundância </li></ul><ul><li>Falha </li></ul><ul><li>Qualidade </li></ul><ul><li>Passos-de-bebê </li></ul><ul><li>Aceite </li></ul><ul><li>Responsabilidade </li></ul><ul><li>Comunicação </li></ul><ul><li>Simplicidade </li></ul><ul><li>Feedback </li></ul><ul><li>Coragem </li></ul><ul><li>Respeito </li></ul>Princípios Valores Copyright © 2010 Misael Santos Gestão de Configuração de Software
  10. 10. Extreme Programming (XP) <ul><li>Práticas Primárias (1) </li></ul><ul><ul><li>Ambiente Informativo </li></ul></ul><ul><ul><li>Build de Dez Minutos </li></ul></ul><ul><ul><li>Ciclo Semanal </li></ul></ul><ul><ul><li>Ciclo Trimestral </li></ul></ul><ul><ul><li>Desenvolvimento Orientado a Testes (TDD) </li></ul></ul><ul><ul><li>Design Incremental </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  11. 11. Extreme Programming (XP) <ul><li>Práticas Primárias (2) </li></ul><ul><ul><li>Equipe Integral </li></ul></ul><ul><ul><li>Folga </li></ul></ul><ul><ul><li>Histórias </li></ul></ul><ul><ul><li>Integração Contínua </li></ul></ul><ul><ul><li>Programação em Par </li></ul></ul><ul><ul><li>Sentar-se Junto </li></ul></ul><ul><ul><li>Trabalho Energizado </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  12. 12. Extreme Programming (XP) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  13. 13. Extreme Programming (XP) <ul><li>Práticas Corolárias (1) </li></ul><ul><ul><li>Análise da Raiz do Problema </li></ul></ul><ul><ul><li>Base de Código Unificada </li></ul></ul><ul><ul><li>Código Coletivo </li></ul></ul><ul><ul><li>Código e Testes </li></ul></ul><ul><ul><li>Continuidade da Equipe </li></ul></ul><ul><ul><li>Contrato de Escopo Negociável </li></ul></ul><ul><ul><li>Envolvimento Real do Cliente </li></ul></ul><ul><ul><li>Equipes que Encolhem </li></ul></ul><ul><ul><li>Implantação Diária </li></ul></ul><ul><ul><li>Implantação Incremental </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  14. 14. Extreme Programming (XP) <ul><li>Práticas Corolárias (2) </li></ul><ul><ul><li>Pagar Por Uso </li></ul></ul><ul><ul><li>Metáforas </li></ul></ul><ul><ul><li>Refatoração ( Refactoring ) </li></ul></ul><ul><ul><li>Padrões de Projeto ( Design Patterns ) </li></ul></ul><ul><ul><li>40 horas semanais </li></ul></ul><ul><ul><li>Jogo do Planejamento </li></ul></ul><ul><ul><li>Reuniões em Pé </li></ul></ul><ul><ul><li>Padrões de Codificação </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  15. 15. Extreme Programming (XP) <ul><li>Agile Change Management </li></ul><ul><ul><li>Não devemos tratar o processo de gestão de mudanças como processo de prevenção de mundaças . </li></ul></ul><ul><ul><li>Aceitar bem as mudanças nos requisitos, mesmo em fases avançadas do projeto. </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  16. 16. Integração Contínua <ul><li>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. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  17. 17. Integração Contínua <ul><li>Integração automatizada </li></ul><ul><li>Testes automatizados </li></ul><ul><li>Sempre atualizar o workspace e testar antes do “Checkin” </li></ul><ul><li>Realizar “Checkin” com frequência </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  18. 18. Integração Contínua <ul><li>Objetivo </li></ul><ul><ul><li>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. </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  19. 19. Integração Contínua <ul><li>Integração Contínua Síncrona </li></ul><ul><ul><li>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. </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  20. 20. Integração Contínua <ul><li>Integração Contínua Síncrona - Passos </li></ul><ul><li>Assegurar que o projeto compila e todos os testes automatizados executam com sucesso </li></ul><ul><li>Conquistar a vez de integrar </li></ul><ul><li>Criar um backup do projeto na estação de trabalho </li></ul><ul><li>Fazer update do projeto </li></ul><ul><li>Assegurar que o software continua compilando e os testes executam com sucesso </li></ul><ul><li>Fazer commit do projeto </li></ul><ul><li>Apagar o diretório do projeto na estação de trabalho e fazer checkout </li></ul><ul><li>Assegurar que o software continua compilando e que os testes executam com sucesso </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  21. 21. Integração Contínua <ul><li>Integração Contínua Assíncrona </li></ul><ul><ul><li>Projetos nos quais os desenvolvedores não trabalhem juntos em uma mesma sala. </li></ul></ul><ul><ul><li>Em tais casos torna-se difícil ou impossível garantir que apenas um desenvolvedor irá integrar de cada vez. </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  22. 22. Integração Contínua <ul><li>Integração Contínua Assíncrona – Passos </li></ul><ul><ul><li>Assegurar que o projeto compila e todos os testes automatizados executam com sucesso </li></ul></ul><ul><ul><li>Criar um backup do projeto na estação de trabalho </li></ul></ul><ul><ul><li>Fazer update do projeto </li></ul></ul><ul><ul><li>Assegurar que o software continua compilando e os testes executam com sucesso </li></ul></ul><ul><ul><li>Fazer commit do projeto </li></ul></ul><ul><ul><li>Realizar integração automatizada </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  23. 23. Integração Contínua <ul><li>Ferramentas: </li></ul><ul><ul><li>Hudson </li></ul></ul><ul><ul><li>Continuum (Apache) </li></ul></ul><ul><ul><li>CruiseControl </li></ul></ul><ul><ul><li>LuntBuild </li></ul></ul><ul><ul><li>Bamboo (Atlassian) </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  24. 24. Integração Contínua <ul><li>Ex: </li></ul><ul><ul><li>Continuum + Java + Maven + CVS </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  25. 25. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  26. 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. 27. GCS Ágil <ul><li>“ GCS Ágil” não é um oxímoro? </li></ul><ul><li>Muitos consideram GCS como um processo pesado que impede o “trabalho real&quot; do desenvolvimento </li></ul><ul><li>Para muitos projetos GCS funciona bem </li></ul><ul><ul><li>Alguns compensam evitando ferramentas e práticas que fazem com que processo de GCS seja inerentemente limitante. </li></ul></ul><ul><li>Outros querem controlar e ter tantos processos de GCS que chegam a prejudicar a eles mesmos. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  28. 28. Desperdícios no Desenvolvimento de Software <ul><li>Funcionalidades Extra/Não-utilizadas (Overproduction) </li></ul><ul><li>Trabalho parcialmente desenvolvido não liberado para a produção (Inventory) </li></ul><ul><li>Artefatos Intermediários/Não-Utilizados (Extra Processing) </li></ul><ul><li>Busca de Informações (Motion) </li></ul><ul><li>Defeitos não capturados pelos testes/revisões (Defects) </li></ul><ul><li>Espera (incluindo Espera do Cliente) </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  29. 29. O que é GCS Ágil? <ul><li>A aplicação pragmática de: </li></ul><ul><ul><li>Práticas e Princípios da Gestão de Configuração </li></ul></ul><ul><ul><li>de acordo com os Valores Ágeis </li></ul></ul><ul><ul><li>usando o “Pensamento Enxuto” ( Lean Thinking ) </li></ul></ul><ul><li>para atender as necessidades de Negócios! </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  30. 30. Requisitos da GCS Ágil <ul><li>Servir aos profissionais e não vice-versa! </li></ul><ul><li>Derrubar as paredes entre a GCS & desenvolvedores para que o time todo trabalhe junto para entregar software de qualidade utilizando uma abordagem ágil </li></ul><ul><li>Responder às mudanças ao invés de prevení-las </li></ul><ul><li>Rastrear e coordenar o desenvolvimento ao invés de tentar controlar os desenvolvedores </li></ul><ul><li>Se esforçar para ser transparente e automatizar o máximo possível </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  31. 31. Características da GCS Ágil <ul><li>GCS é uma responsabilidade do time inteiro </li></ul><ul><li>Documentação & Rastreabilidade Enxutas </li></ul><ul><li>Gerenciamento Agressivo de Dependências </li></ul><ul><li>Feedback Contínuo e Visível </li></ul><ul><ul><li>Sobre a Qualidade, Estabilidade e Integridade </li></ul></ul><ul><li>Coordenação e automação frequente + rápida </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  32. 32. Respondendo à Mudanças <ul><li>Gerenciar as espectativas dos interessados com comunicação próxima e poucas fronteiras </li></ul><ul><ul><li>Tomadores de decisões devem estar disponíveis & acessíveis para dar respostas rápidas </li></ul></ul><ul><ul><li>No início de cada iteração espectativas e prioridades são (re)definidas e (re)calibradas </li></ul></ul><ul><ul><li>CCB’s devem ser chamados de “encontros de replanejamento” para evitar o estigma de tentar “controlar” as mudanças </li></ul></ul><ul><ul><li>Trabalhar somente com features da iteração corrente </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  33. 33. Respondendo à Mudanças <ul><li>A autorização para os desenvolvedores realizarem mudanças precisa ser instantânea: </li></ul><ul><ul><li>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) </li></ul></ul><ul><ul><li>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 </li></ul></ul><ul><ul><li>Nenhuma permissão adicional deve ser requerida para a refatoração ( refactoring ) </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  34. 34. Automatização Apropriada <ul><li>Eventos automatizados que ocorrem frequentemente mudam raramente e requerem consistência. </li></ul><ul><ul><li>Eventos relacionados a builds, publicação ( deployment ), releases formais, testes automatizados, builds de integração </li></ul></ul><ul><li>Por que?: Minimizar Artefatos & Espera </li></ul><ul><ul><li>Documentar esses procedimentos via scripts, aumenta a produtividade no desenvolvimento e diminui custos de administração </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  35. 35. As Três Builds <ul><li>Private Developer Build </li></ul><ul><ul><li>Fornece uma forma consistente para o desenvolvedor construir o software ( build ) nos confins da sua área de desenvolvimento privada </li></ul></ul><ul><li>Team Integration Build </li></ul><ul><ul><li>Sincronizar a equipe fornecendo feedback sobre a qualidade e a integridade </li></ul></ul><ul><li>Formal Release Build </li></ul><ul><ul><li>Criar pacotes implantáveis </li></ul></ul><ul><li>Por que? : </li></ul><ul><ul><li>Produtividade, previsibilidade, documentação, habilidade para a atividade de build sem comprometer a GC ou a qualidade. </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  36. 36. 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
  37. 37. 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
  38. 38. GCS Ágil e o Manifesto Ágil <ul><li>Valor 1 </li></ul><ul><li>Individuals and Interactions over Processes and Tools </li></ul><ul><li>Processos e ferramentas de GCS devem suportar a maneira com que você trabalha e não o contrário. </li></ul><ul><li>“ Processos não escrevem software. Pessoas sim!” </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  39. 39. GCS Ágil e o Manifesto Ágil <ul><li>Valor 2 </li></ul><ul><li>Working Software over Comprehensive Documentation </li></ul><ul><li>Minimizar artefatos intermediários </li></ul><ul><li>“ Simple-size it!” </li></ul><ul><li>GCS pode automatizar as políticas e processos de desenvolvimento com conhecimento executável sobre o conhecimento documentado </li></ul><ul><li>“ Automatização Apropriada” </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  40. 40. GCS Ágil e o Manifesto Ágil <ul><li>Valor 3 </li></ul><ul><li>Customer Collaboration over Contract Negotiation </li></ul><ul><li>A GCS deve facilitar a comunicação entre os interessados e ajudar a gerenciar as espectativas </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  41. 41. GCS Ágil e o Manifesto Ágil <ul><li>Valor 4 </li></ul><ul><li>Responding to Change over Following a Plan </li></ul><ul><li>GC diz respeito a facilitar mudanças, não prevení-las </li></ul><ul><ul><li>“ Mudanças em requisitos em fases adiantadas do ciclo de vida são vantagens competitivas SE você consegue agir sobre elas!” </li></ul></ul><ul><ul><ul><ul><li>– Mary Poppendieck </li></ul></ul></ul></ul><ul><ul><li>“ Projetos ágeis não são controlados em conformidade com o planejamento mas em conformidade com valores do negócio.” </li></ul></ul><ul><ul><li>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.” </li></ul></ul><ul><ul><ul><ul><li>– James Highsmith </li></ul></ul></ul></ul><ul><li>“ A Mudança não é o inimigo – estagnação é! Não tente prevenir mudanças! Se planeje para isso!” </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  42. 42. Patterns <ul><li>Soluções Comprovadas </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  43. 43. Padrões de Software <ul><li>O que é um padrão? </li></ul><ul><li>Um padrão é uma solução documentada para </li></ul><ul><li>um problema recorrente em um determinado </li></ul><ul><li>contexto . </li></ul>Padrão ( Pattern ) ≠ Padronização ( Standard ) Copyright © 2010 Misael Santos Gestão de Configuração de Software
  44. 44. Padrões de Software <ul><li>Benefícios </li></ul><ul><ul><li>Aumentar a reutilização </li></ul></ul><ul><ul><li>Documentar soluções </li></ul></ul><ul><ul><li>Passar conhecimento para iniciantes </li></ul></ul><ul><ul><li>Fornecer um vocabulário comum entre os desenvolvedores </li></ul></ul><ul><ul><li>Aumentar a qualidade do produto </li></ul></ul><ul><ul><li>... </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  45. 45. Padrões de Software <ul><li>Padrões x Coleções de Padrões </li></ul><ul><ul><li>Padrões isolados resolvem problemas pontuais </li></ul></ul><ul><ul><li>Conjuntos de padrões podem construir um sistema inteiro, preenchendo todas as lacunas de um contexto inteiro </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  46. 46. Tipos de Padrões de Software (1) <ul><li>Atualmente existem padrões de software para as mais diversas áreas da Engenharia de Software </li></ul><ul><li>Existem diversas formas de classificar os Padrões de Software. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  47. 47. Tipos de Padrões de Software (2) <ul><li>Quanto à fase de desenvolvimento em o padrão é aplicado </li></ul><ul><ul><li>Padrões de Análise ( Analisys Patterns ) </li></ul></ul><ul><ul><li>Padrões de Projeto ( Design Patterns ) </li></ul></ul><ul><ul><ul><li>Erich Gamma (GoF) </li></ul></ul></ul><ul><ul><li>Padrões de Implementação ( Idioms ) </li></ul></ul><ul><ul><li>Padrões de Testes ( Test Patterns ) </li></ul></ul><ul><ul><li>.... </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  48. 48. Tipos de Padrões de Software (3) <ul><li>Quanto à Tecnologia </li></ul><ul><ul><li>Padrões J2EE ( Core J2EE Patterns ) </li></ul></ul><ul><ul><li>Padrões para Web </li></ul></ul><ul><ul><li>Padrões para XML ( XML Patterns ) </li></ul></ul><ul><ul><li>Padrões para Bancos de Dados </li></ul></ul><ul><ul><li>Padrões para Ajax ( Ajax Patterns ) </li></ul></ul><ul><ul><li>Padrões para Interface Gráfica ( GUI Patterns ) </li></ul></ul><ul><ul><li>... </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  49. 49. Tipos de Padrões de Software (4) <ul><li>Quanto de Processo/Metologias </li></ul><ul><ul><li>Padrões de Processo ( Process Patterns ) </li></ul></ul><ul><ul><li>Padrões de Gestão de Configuração ( SCM Patterns ) </li></ul></ul><ul><ul><li>Padrões de Segurança ( Security Patterns ) </li></ul></ul><ul><ul><li>... </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  50. 50. Formato dos Padrões (1) <ul><li>Componentes básicos de um padrão </li></ul><ul><ul><li>Nome </li></ul></ul><ul><ul><li>Contexto </li></ul></ul><ul><ul><li>A Descrição do Problema </li></ul></ul><ul><ul><li>Solução </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  51. 51. Formato dos Padrões (2) <ul><li>Existem diversos formatos que podem conter </li></ul><ul><ul><li>Forças </li></ul></ul><ul><ul><li>Aplicabilidade </li></ul></ul><ul><ul><li>Usos Conhecidos </li></ul></ul><ul><ul><li>Consequências </li></ul></ul><ul><ul><li>Padrões Relacionados </li></ul></ul><ul><ul><li>Intenção </li></ul></ul><ul><ul><li>Racionalidade </li></ul></ul><ul><ul><li>... </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  52. 52. SCM Patterns <ul><li>Software Configuration Management Patterns: Effective Teamwork, Practical Integration </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  53. 53. SCM Patterns <ul><li>Consiste em uma Linguagem de Padrões para Gestão de Configuração de Software </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  54. 54. SCM Patterns <ul><li>Consiste em uma Linguagem de Padrões para Gestão de Configuração de Software </li></ul>Conjunto de Padrões que se unem para formar um “sistema”. Copyright © 2010 Misael Santos Gestão de Configuração de Software
  55. 55. SCM Patterns Copyright © 2010 Misael Santos Gestão de Configuração de Software
  56. 56. SCM Patterns <ul><li>Objetivo </li></ul><ul><ul><li>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. </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  57. 57. SCM Patterns <ul><li>Princípio: </li></ul><ul><ul><li>Usar a Gestão de Configuração, especialmente o controle de versões, como parte de um ambiente de desenvolvimento ágil . </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  58. 58. SCM Patterns <ul><li>Workspace-Related Patterns </li></ul><ul><ul><li>Private Workspace </li></ul></ul><ul><ul><li>Repository </li></ul></ul><ul><ul><li>Private System Build </li></ul></ul><ul><ul><li>Integration Build </li></ul></ul><ul><ul><li>Third Party Codeline </li></ul></ul><ul><ul><li>Task Level Commit </li></ul></ul><ul><ul><li>Smoke Test </li></ul></ul><ul><ul><li>Unit Test </li></ul></ul><ul><ul><li>Regression Test </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  59. 59. SCM Patterns <ul><li>Codeline-Related Patterns </li></ul><ul><ul><li>Mainline </li></ul></ul><ul><ul><li>Active Development Line </li></ul></ul><ul><ul><li>Codeline Policy </li></ul></ul><ul><ul><li>Private Versions </li></ul></ul><ul><ul><li>Release Line </li></ul></ul><ul><ul><li>Release-Prep Code Line </li></ul></ul><ul><ul><li>Task Branch </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  60. 60. Mainline Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  61. 61. Mainline Pattern <ul><li>Minimizar o merge e manter um número gerenciável de linhas de desenvolvimento ativas desenvolvendo sobre a Mainline. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  62. 62. Mainline Pattern <ul><li>O merge pode virar uma bagunça... </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  63. 63. Mainline Pattern <ul><li>Solução </li></ul><ul><ul><li>Tenha todas as outras linhas de desenvolvimento frequentemente combinadas à linha de desenvolvimento principal </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  64. 64. Mainline Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  65. 65. Mainline Pattern <ul><li>Questões não resolvidas: </li></ul><ul><ul><li>Como manter a “Mainline” utilizável quando muitas pessoas estão trabalhando nela? ( Active Development Line ) </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  66. 66. Active Development Line Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  67. 67. Active Development Line Pattern <ul><li>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”. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  68. 68. Active Development Line Pattern <ul><li>Questões não resolvidas: </li></ul><ul><ul><li>Como identificar a linha de desenvolvimento estável? ( Codeline Policy ) </li></ul></ul><ul><ul><li>Como isolar o trabalho dos desenvolvedores da “Linha de Desenvolvimento Ativa” ( Private Workspace )? </li></ul></ul><ul><ul><li>… </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  69. 69. Private Workspace Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  70. 70. Private Workspace Pattern <ul><li>Prevenir que questões de integração distraiam você e que suas mudanças causem outros problemas desenvolvendo em uma “Área de Trabalho Privada”. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  71. 71. Private Workspace Pattern <ul><li>Questões não resolvidas: </li></ul><ul><ul><li>Evitar inserir erros no sistema ao consolidar suas alterações no repositório ( Private System Build ) </li></ul></ul><ul><li>Outros padrões relacionados: </li></ul><ul><ul><li>Repository </li></ul></ul><ul><ul><li>Third Party Codeline </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  72. 72. Repository Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  73. 73. Repository Pattern <ul><li>Configurar um novo workspace populando-o a partir de um “Repositório” que contém tudo o que você precisa. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  74. 74. Repository Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  75. 75. Repository Pattern <ul><li>Questões não resolvidas: </li></ul><ul><ul><li>Organizar código de terceiros utilizando o Third-Party Codeline. </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  76. 76. Private System Build Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  77. 77. Private System Build Pattern <ul><li>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. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  78. 78. Private System Build Pattern <ul><li>Semelhante ao Integration Build , todavia alguns detalhes relacionados à release e empacotamento podem ser omitidos. </li></ul><ul><li>Deve incluir todas as dependências </li></ul><ul><li>Deve incluir todos os componentes dependentes da mudança </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  79. 79. Private System Build Pattern <ul><li>Questões não resolvidas </li></ul><ul><ul><li>Como saber se você não está inserindo problemas à funcionalidade? ( Smoke Test Pattern ) </li></ul></ul><ul><ul><li>… </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  80. 80. Integration Build Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  81. 81. Integration Build Pattern <ul><li>Garanta que o seu código base sempre gere builds confiáveis fazendo uma Integração (Integration Build) periodicamente. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  82. 82. Integration Build Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  83. 83. Integration Build Pattern <ul><li>Questões não resolvidas: </li></ul><ul><ul><li>Como garantir que a build de integração é utilizável? ( Smoke Test, Regression Test ) </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  84. 84. Third Party Codeline Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  85. 85. Third Party Codeline Pattern <ul><li>Administre o código de terceiros usando uma “Linha de Desenvolvimento de Terceiros”. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  86. 86. Task Level Commit Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  87. 87. Task Level Commit Pattern <ul><li>Quanto trabalho deve ser feito entre cada submissão ao controle de versões? Quanto você deve esperar para commitar suas alterações? </li></ul><ul><li>Organize as mudanças em código-fonte por unidade de trabalho “orientadas a tarefas”. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  88. 88. Codeline Policy Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  89. 89. Codeline Policy Pattern <ul><li>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. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  90. 90. Smoke Test Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  91. 91. Smoke Test Pattern <ul><li>Garanta que o sistema ainda funcione depois de suas alterações executando o “Smoke Test” </li></ul><ul><li>Teste não exaustivo sobre as funcionalidades básicas da aplicação </li></ul><ul><li>Verificar se a aplicação não “quebra” de forma óbvia </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  92. 92. Unit Test Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  93. 93. Unit Test Pattern <ul><li>Verifique que um módulo ainda funciona depois das suas alterações executando um “Teste Unitário”. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  94. 94. Unit Test Pattern <ul><li>Testes unitários: </li></ul><ul><ul><li>Deve ser automático </li></ul></ul><ul><ul><li>É isolado de outros testes </li></ul></ul><ul><ul><li>Testa o contrato do elemento </li></ul></ul><ul><ul><li>Deve ser simples de usar: </li></ul></ul><ul><ul><ul><li>durante a codificação </li></ul></ul></ul><ul><ul><ul><li>antes de realizar checkin </li></ul></ul></ul><ul><ul><ul><li>após atualizar o workspace </li></ul></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  95. 95. Regression Test Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  96. 96. Regression Test Pattern <ul><li>Garanta que código existente não piore quando implementadas melhorias executando um “Teste de Regressão” </li></ul><ul><li>Deve ser executado para toda build de integração </li></ul><ul><li>Smoke Tests não testam o software exaustivamente </li></ul><ul><li>Testes unitários ( Unit Tests ) testam as partes individualmente </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  97. 97. Regression Test Pattern <ul><li>Execute os testes de regressão no sistema quando você quer garantir uma certa estabilidade a ele </li></ul><ul><li>Crie testes de regressão de casos de testes que falharam no passado (relatos de verificações de qualidade, relatos do cliente) </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  98. 98. Private Versioning Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  99. 99. Private Versioning Pattern <ul><li>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. </li></ul><ul><li>Use uma branch , um repositório local, ferramentas próprias (níveis de promoção, cv distribuídos). </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  100. 100. Release Line Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  101. 101. Release Line Pattern <ul><li>Mantenha as versões liberadas sem interferir no desenvolvimento corrente estabelecendo uma “Linha de Release”. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  102. 102. Release Line Pattern <ul><li>Branch Before Release </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  103. 103. Release-Prep Codeline Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  104. 104. Release-Prep Codeline Pattern <ul><li>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”. </li></ul><ul><li>Ao invés de criar uma branch depois da release, crie uma branch antes da release, permitindo que os desenvolvedores continuem trabalhando na Mainline . </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  105. 105. Release-Prep Codeline Pattern <ul><li>Questões não resolvidas: </li></ul><ul><ul><li>Se apenas algumas pessoas estão trabalhando na próxima release, inicie uma Task Branch para o novo trabalho </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  106. 106. Task Branch Pattern Copyright © 2010 Misael Santos Gestão de Configuração de Software
  107. 107. Task Branch Pattern <ul><li>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”. </li></ul><ul><li>Crie uma ramificação para cada atividade que possa causar mudanças significativas sobre o sistema. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  108. 108. Outros Padrões para GCS <ul><li>Merge Early and Often </li></ul><ul><ul><li>Merge changes from a branch to its codeline as soon as the changes on the branch are completed and tested </li></ul></ul><ul><li>Bill of Materials </li></ul><ul><ul><li>You can successfully build the software system today and need to be able to build the same version in the future </li></ul></ul><ul><li>Reproducible Build </li></ul><ul><ul><li>You’ve built the software system and created a build process, and need to know that it can be reproduced </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  109. 109. Outros Padrões para GCS <ul><li>Shared Object Cache </li></ul><ul><ul><li>Allows developers to perform local builds based on extracted files and a common set of object files. </li></ul></ul><ul><li>Shared-Source Escalation </li></ul><ul><ul><li>Maintain and support a common set of code used by more than one project. </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  110. 110. Outros Padrões para GCS <ul><li>Branching Policy Patterns </li></ul><ul><ul><li>Padrões descrevendo políticas comportamentais para estabelecer ou preservar as características físicas ou conceituais de uma linha de desenvolvimento </li></ul></ul><ul><li>Branch Creation Patterns </li></ul><ul><ul><li>Padrões descrevendo quando criar um novo tipo de branch </li></ul></ul><ul><li>Branch Structuring Patterns </li></ul><ul><ul><li>Padrões descrevendo as colaborações entre duas ou mais branches </li></ul></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  111. 111. SCM Patterns <ul><li>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. </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software
  112. 112. Referências <ul><li>AMBLER, S. W. Examining Agile Manifesto , Disponível em: http://www.ambysoft.com/essays/agileManifesto.html </li></ul><ul><li>APPLETON, B. Agile Configuration Management Enviroments , Chicago SPIN, Chicago, 2004. </li></ul><ul><li>BECK K. et al., Manifesto for Agile Software Development , Disponível em: http://agilemanifesto.org/ </li></ul><ul><li>MILFONT, C. Agile Software Development: Princípios, valores e práticas aplicados em um estudo de caso , Sun Tech Days 2006, Fortaleza, CE, 2006. </li></ul><ul><li>Improve IT, Extreme Programming , Disponível em: http://www.improveit.com.br/ </li></ul>Copyright © 2010 Misael Santos Gestão de Configuração de Software

×