Laboratório de Engenharia de Software

Controle de Versão e Metodologias Ágeis

Última ocorrência: 2023-09-12 em Universidade LaSalle Canoas

Posts Relacionados

Assunto

  1. Controle de Versão
    • É uma classe de sistemas cujo objetivo é gerenciar alterações em programas, documentos, ou qualquer coleção de informações.
    • Também chamado controle de revisão e gerenciamento de código fonte.
    • É um componte do gerenciamento de configuração de software.
    • As principais funções desses sistemas são armazenar metadados sobre as alterações ocorridas no sistema e permitir a recuperação de versões anteriores.
    • As principais arquiteturas desses sistemas são:
      • Centralizadas: onde um repositório central é utilizado como fonte única de verdade, e todas as modificações devem ser armazenadas nesse repositório. Ex.: CVS e Subversion
      • Distribuídos: onde cada repositório local é considerado um repositório completo e qualquer repositório pode, a qualquer momento, ser utilizado como fonte de modificações. Ex.: Mercurial e Git.
    • Permitem o desenvolvimento de versões simultâneas do mesmo sistema (branching)
    • Operações comuns:
      • Annotate/Blame
        Verificar quem e quando alterou uma informação pela última vez.
      • Branch
        Uma bifurcação no repositório criando duas linhas paralelas de desenvolvimento. O branch principal é, às vezes, chamado de trunk.
      • Checkout
        Criar uma cópia local a partir de um ponto específico do repositório
      • Clone
        Copiar um repositório contendo todas as suas revisões.
      • Commit
        Conjunto de alterações agrupadas em conjunto e seus meta-dados.
        Ato de gravar as alterações efetuadas no repositório.
      • Conflito
        Ocorre quando duas alterações diferentes são realizadas na mesma informação, a partir de um mesmo ponto de origem, e que o sistema não consegue reconciliar.
        A resolução do conflito, nesse caso, deve ser feita manualmente, pelo usuário.
      • Head
        O commit mais recente de um branch.
      • Label/Tag
        Uma marcação em um branch em relação a um evento importante (release, sprint, etc).
      • Merge
        Reconciliação de dois conjuntos diferentes de alterações.
      • Pull / Push
        Copiar revisões de um repositório para outro. Pull é iniciada pelo repositório que recebe as alterações, push é iniciada pelo repositório que envia as alterações.
      • Pull request
        Uma requisição para que alterações sejam adicionadas a um branch. Em geral envolve revisão de código e um processo de aprovação.
    • Informação sobre alterações devem ser realizadas em mensagens de commit:
      • Qual o motivo dessa alteração?
      • O que está sendo alterado?
      • Como a alteração resolve o problema?
  2. Metodologias Ágeis
    • Surgiram devido à adoção de software em larga escala
    • Seguem as ideias e princípios do Manifesto para Desenvolvimento Ágil de Software:
      • Indivíduos e interações mais que processos e ferramentas.
      • Software em funcionamento mais que documentação abrangente.
      • Colaboração com o cliente mais que negociação de contratos.
      • Responder a mudanças mais que seguir um plano.
    • Príncipios do Manifesto Ágil:
      • A maior prioridade é satisfazer o cliente com entrega contínua de software com valor agregado.
      • Mudanças nos requisitos são bem-vindas.
      • Entregas rápidas e frequentes de software funcional.
      • Pessoas do negócio e desenvolvedores devem trabalhar juntos.
      • Indivíduos motivados, com suporte e confiança.
      • O método mais eficiente de comunicação é face a face.
      • Software funcionando é a medida primária de progresso.
      • O desenvolvimento é sustentável, ou seja, todos envolvidos devem ser capazes de manter um ritmo constante indefinidamente.
      • Contínua atenção à excelencia técnica e bom design.
      • Simpliciade é essencial. (Menos é mais.)
      • As melhores arquiteturas, requisitos e designs emergem de equipes auto-organizáveis.
      • Em intervalos regulares a equipe reflete sobre como se tornar mais eficaz.
    • Características comuns:
      • A especificação inicial não é detalhada até que precise ser implementada.
      • O sistema é desenvolvido a partir de uma série de incrementos.
      • Contratos são mais complexos, uma vez que o escopo do projeto não é exato.
      • Gerenciamento em projetos com muitas pessoas fica mais difícil.
      • Melhor utilizado em equipes pequenas de até 20-30 pessoas.
  3. Extreme Programming
    • Se preocupa com práticas de programação
    • Captura requisitos a partir de histórias de usuário.
    • Releases curtos.
    • Utiliza alguma metodologia de desenvolvimento test-first, como TDD - Test Driven Development e/ou BDD - Behavior Driven Development.
    • Programação em pares.
    • Refatoração.
    • Propriedade coletiva.
    • Integração contínua.
    • Uso extensivo de frameworks de testes automatizados.
  4. SCRUM
    • Foco no gerenciamento de projetos e equipes.
    • Ciclos de sprint de uma a quatro semanas.
    • Backlog de produto, com atividades priorizadas.
    • Envolvimento de toda equipe e do cliente/stakeholder durante o planejamento e a validação
    • Reuniões de status diárias e rápidas:
      • O que me bloqueia?
      • O que eu vou fazer.
      • O que eu fiz.
    • Figura de um Product Owner que prioriza as atividades do backlog.

Recursos para essa aula

Tutoriais

  1. Pro Git: Tradução parcial do livro para português do Brasil.
  2. Git - Guia prático: Um guia bem direto, sem muita explicação.
  3. Github - Início Rápido

Bibliografia

  1. Sutherland, Jeff. Scrum: A Arte de Fazer o Dobro do Trabalho na Metade do Tempo. 2a Ed. LeYa. 2016.
  2. Version Control: Wikipedia

Repositórios

  1. Gherkin by example