SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
1
ENGENHARIA DE SOFTWARE - AULA 04
GERÊNCIA DE CONFIGURAÇÃO
(+VERSIONAMENTO, GIT, GITHUB)
PROF. DRA. CLAUDIA MELO
26/Mar/2018
@claudia_melo claudiamelo.org
GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE (GCS): O QUE É?
•É um conjunto de atividades projetadas para gerir
modificações, identificando os produtos de trabalho que
podem ser modificados, estabelecendo relacionamentos entre
eles, definindo mecanismos para administrar as diferentes
versões desses produtos de trabalho, controlando as
modificações impostas e fazendo auditoria, e preparando
relatórios sobre as modificações efetuadas.
•CM ou SCM (Configuration Management ou Software
Configuration Management)
2
GCS: O QUE É? (2)
•Gerenciamento de versão
•Acompanhar as várias versões dos componentes do sistema e garantir que as alterações feitas
nos componentes por diferentes desenvolvedores não interfiram entre si.
•Build de sistema
•O processo de montar componentes, dados e bibliotecas de programas, compilando-os para criar
um sistema executável.
•Gestão de mudança
•Acompanhar solicitações de alterações no software de clientes e desenvolvedores, calcular os
custos e o impacto das alterações e decidir se as alterações devem ser implementadas.
•Gestão de release
•Preparando o software para liberação externa e mantendo o controle das versões do sistema que
foram liberadas para uso do cliente.
3
PADRÕES INTERNACIONAIS SOBRE GCS
•IEEE Std. 828-1998 IEEE Standard for Software Configuration
Management Plans
•ANSI/EIA-649-1998 National Consensus Standard for
Configuration Management
•MIL-STD-973 Military Standard for Configuration
Management[1] (cancelled, but still good reference)
•GEIA Standard 836-2002 Configuration Management Data
Exchange and Interoperability
4
NO MUNDO ÁGIL, GERÊNCIA DE CONFIGURAÇÃO É CHAVE
•O desempenho da TI, de acordo com o Puppet
Labs "State of DevOps" report 2014, vem de:
• Código, configuração da aplicação e configuração do
sistema em um sistema de controle de versão.
• Obtenção de alertas de falha dos sistemas de log
(registro) e monitoramento.
• Desenvolvedores realizando merge do código no
trunk do repositório diariamente.
• Equipes de desenvolvimento e operações interagindo.
• Desenvolvedores dividindo grandes funcionalidades
em pequenas mudanças incrementais (forma ágil de
trabalhar!).
5
•Os principais indicadores do
desempenho de TI nesse relatório são:
• Processo de aprovação de alterações
revisado por pares.
• Tudo sob controle de versão.
• Monitoramento proativo.
• Cultura organizacional de alta confiança.
• Relação ganha-ganha entre
desenvolvedoras/es (DEV) e operações
(OPS).
https://puppet.com/resources/whitepaper/2014-state-devops-report
TERMINOLOGIA DE GCS
6
Termo Significado
Baseline (Linha de base) Uma linha de base é uma coleção de versões de componentes que
compõem um sistema.
Branching A criação de uma nova linha de código a partir de uma versão existente de
linha de código.
Controle de configuração
(versão)
O processo de assegurar que versões de sistemas e componentes sejam
registradas e mantidas para que as alterações sejam gerenciadas e todas
as versões dos componentes sejam identificadas e armazenadas durante
a vida útil do sistema.
Item de configuração Qualquer coisa associada a um projeto de software (design, código, dados
de teste, documento, hardware, firmware etc.) colocada sob controle de
configuração.
Mainline Uma sequência de linhas de base que representa diferentes versões de um
sistema.
TERMINOLOGIA
7
Termo Significado
Merge A criação de uma nova versão de um componente de software,
mesclando versões separadas em diferentes linhas de código.
Release Uma versão de um sistema que foi liberado para uso.
Repositório Um banco de dados compartilhado de versões de componentes de
software e meta-informações sobre alterações nesses componentes.
System building
(Build)
A criação de uma versão do sistema executável compilando e vinculando
as versões apropriadas dos componentes e bibliotecas do sistema.
Versão Uma instância de um item de configuração que difere, de alguma forma,
de outras instâncias desse item.
Workspace Uma área de trabalho privada onde o software pode ser modificado sem
afetar outros desenvolvedores que possam estar usando ou modificando
esse software.
SISTEMA DE CONTROLE DE CONFIGURAÇÃO
•Determinação de versão
•Salvar todas essas versão para permitir a gestão
efetiva das entregas do produto e permitir aos
desenvolvedores voltar a versões anteriores.
•Acompanhamento de dependência e gestão
de mudanças
•O repositório gerencia grande quantidade de
relacionamentos entre elementos de dados
armazenados nele.
•Acompanhamento de requisitos
•Fornece a capacidade de acompanhar todos os
componentes e produtos passíveis de entrega de
projeto e construção que resultam de uma
especificação de requisitos específica. 8
• Gestão de configuração
• Acompanha uma série de
configurações representando marcos
do projeto ou versões de produção
específicas.
• Gestão de versão fornece as versões
necessárias e gestão de ligações
guarda trilha de interdependências.
• Pista de auditoria
• estabelece informação adicional sobre
quando, por que e por quem
modificações foram feitas.
REPOSITÓRIO X CONTROLE DE VERSÃO
• Qual a diferença do Git e
do Github?
• Git: sistema de controle de
versão
• Github: repositório
compartilhado (cloud-based)
9
https://blogs.carleton.edu/bostonmassacre3d/2017/05/16/introducing-our-git-workflow/
CONTROLE DE VERSÃO - MODELO DISTRIBUÍDO
10
CONTROLE DE VERSÃO - MODELO DISTRIBUÍDO
•Um repositório “master" (ou trunk) é criado em um servidor que mantém o código
produzido pela equipe de desenvolvimento.
•O/A desenvolvedor/a cria um clone do repositório do projeto que é baixado e
instalado em seu computador.
•Desenvolvedora/es trabalham nos arquivos necessários e mantêm novas versões
em seus repositórios privados em seus computadores.
•Quando as alterações são feitas, elas/es dão um "commit" dessas alterações e
atualizam o repositório do servidor privado.
•Eles podem depois fazer um "push" dessas mudanças para o repositório do projeto.
11
CONTROLE DE VERSÃO - BRANCHING E MERGING
•Pode haver várias sequências independentes de versões que refletem alterações em um componente ao longo do tempo.
•Isso é normal no desenvolvimento do sistema, onde diferentes desenvolvedores trabalham independentemente em
diferentes versões do código.
•Em algum momento, pode ser necessário mesclar ramificações (branches) para criar uma nova versão de um componente
que inclua todas as alterações feitas.
•Se as alterações feitas envolverem partes diferentes do código, as versões do componente podem ser mescladas
automaticamente combinando os "deltas" que se aplicam ao código.
12
BUILD DO SISTEMA
•A construção do sistema é o processo de criar um sistema executável
completo, compilando e vinculando os componentes do sistema,
bibliotecas externas, arquivos de configuração etc.
•Ferramentas de build de sistema e ferramentas de gerenciamento de
versão devem se comunicar.
• O processo de build baseia-se em certa versão do repositório gerenciado pelo
sistema de gerenciamento de versões.
•A descrição da configuração usada para identificar uma linha de base
também é usada pela ferramenta de build do sistema.
13
BUILD DO SISTEMA
14
Automated
build system
Source
code files
Data files
Libraries
Configuration
files
Executable
tests
Executable
target system
Test resultsCompilers
and tools
BUILD EM AGILE: INTEGRAÇÃO CONTÍNUA
•Uma das práticas mais importantes do
desenvolvimento ágil!
•Agilizar tarefas demoradas como a
compilação de um projeto e a execução
dos seus testes automatizados.
•Tarefas são executadas a cada
mudança no repositório de código e,
em caso de erros de compilação ou
falhas nos testes automatizados, todos
os desenvolvedores são alertados
rapidamente.
15https://developers.redhat.com/blog/2017/09/06/continuous-integration-a-typical-process/
16
ESTILOS DE
DESENVOLVIMENTO
DISTRIBUÍDO
GIT FLOW
17https://www.toptal.com/software/traunk-based-development-git-flow
• Há uma ramificação de desenvolvimento principal
com acesso restrito. Muitas vezes é chamado de
branch de desenvolvimento.
• Os desenvolvedores criam feature branches a partir
desse ramo principal e trabalham nelas. Depois que
eles terminam, eles criam pull requests.
• Em pull requests, outros desenvolvedores comentam
sobre mudanças e podem ter discussões, muitas
vezes longas.
• Demora algum tempo para concordar com uma
versão final das alterações. Depois de acordado, o
pull request é aceito e mesclada ao branch de
desenvolvimento.
• Uma vez que a branch de desenvolvimento tenha
atingido maturidade suficiente para ser liberada,
uma branch separada é criada para preparar uma
release.
GIT FLOW
18https://www.toptal.com/software/trunk-based-development-git-flow
• Essa versão (release branch) é testada e as correções
de bugs são aplicadas até o momento em que ele
está pronto para ser publicado para os usuários
finais.
• Feito isso, mescla-se a versão ao ramo mestre
(master branch), que é marcada com a versão de
release.
• Enquanto isso, novos recursos podem ser
desenvolvidos na branch de desenvolvimento.
MAINLINE MODEL
19https://paulhammant.com/2013/04/05/what-is-trunk-based-development/
• O desenvolvimento de certa funcionalidade
acontece em uma branch aberta a partir da
mainline.
• A versão de release é anotada na branch de
desenvolvimento.
• Quando uma release é definida, ocorre um grande
merge da versão criada com o código da mainline.
• A integração das funcionalidades desenvolvidas em
diferentes branches ocorre tanto na mainline quanto
na própria branch de desenvolvimento.
• Modelo herdado dos primórdios da GCS, não é bem-
visto hoje.
TRUNK-BASED DEVELOPMENT (TBD)
20https://paulhammant.com/2013/04/05/what-is-trunk-based-development/
• Todos os desenvolvedores (para uma determinada
funcionalidade implantável) realizam commits na
linha principal (trunk).
• DEVs podem, em suas próprias estações de trabalho,
fazer alguns desenvolvimentos multi-branch
(digamos, com o Git), mas quando eles são “feitos”
com uma mudança ou uma correção de bug, ele
deve voltar para o trunk compartilhado.
• DEVs não fazem commit de código que quebre o
build do código que está no trunk
• rollback/revert quando isso ocorrer OU
• pode ser usada estratégia de pré-commit para
ajudar nessa disciplina
• DEVs não trabalham isolados por dias em branches
locais - atualização frequente (+ que diária)
TRUNK-BASED DEVELOPMENT (TBD)
21https://paulhammant.com/2013/04/05/what-is-trunk-based-development/
• Branches são feitos para uma release.
• Desenvolvedores não podem fazer branches nesse local
compartilhado. Somente engenheiros de release se
comprometem com essas ramificações e, de fato, criam
cada branch de release.
• Eles também podem selecionar alguns commits
específicos (cherry-pick: conveniência e importância) e
fazer um merge na branch.
• Depois que uma release for substituída por outra, a
ramificação provavelmente será excluída.
• TBD significa que desenvolvedores regulares não realizam commit em uma branch de release.
• TBD significa que você excluirá branches de versão "antigas", sem mesclá-las de volta ao trunk.
TRUNK-BASED DEVELOPMENT (TBD)
22https://paulhammant.com/2013/04/05/what-is-trunk-based-development/
• TBD significa que desenvolvedores regulares não
realizam commit em uma branch de release.
• TBD significa que você excluirá branches de versão
"antigas", sem mesclá-las de volta ao trunk.
EM QUE SITUAÇÕES OS MODELOS FUNCIONAM MELHOR?
• Projetos open-source
• Muitos desenvolvedores júnior
• Quando o produto já está bem estabelecido
Git flow • Quando estamos iniciando um projeto/
produto
• Quando é necessário iterar rapidamente
• Quando o time é formado de mais DEVs
sênior
Trunk-based
LEIA MAIS, ESTUDE, EXPLORE
24https://paulhammant.com/2013/04/05/what-is-trunk-based-development/
• Manual completo em português do Git: https://git-scm.com/book/pt-br/v1/
• 15 minutos aprendendo git: https://try.github.io/levels/1/challenges/1
• Tutorial desenvolvido por seus colegas da FGA: https://github.com/fga-gpp-mds/A-Disciplina/wiki/Git
• Comandos extra do git: https://github.com/tj/git-extras/blob/master/Commands.md
• CONFIGURATION MANAGEMENT CAMP
• http://cfgmgmtcamp.eu/
• vários vídeos disponíveis, evento anual
Paul Hammant. Trunk Based Development in the Enterprise - Its Relevance and Economics
https://www.slideshare.net/perforce/trunk-based-development-in-the-enterprise-its-relevance-and-economics
CLAUDIA MELOPEOPLE TECHNOLOGY RESEARCHER
@claudia_melo
claudiamelo.org @claudiameloblog
/claudiamelo

Contenu connexe

Tendances

Engenharia de requisitos
Engenharia de requisitosEngenharia de requisitos
Engenharia de requisitosMailson Queiroz
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versãoMarcos Pessoa
 
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixCris Fidelix
 
Aula 1 - Introdução a Engenharia de Software
Aula 1 -  Introdução a Engenharia de SoftwareAula 1 -  Introdução a Engenharia de Software
Aula 1 - Introdução a Engenharia de SoftwareLeinylson Fontinele
 
Qualidade de Software - Introdução
Qualidade de Software - Introdução Qualidade de Software - Introdução
Qualidade de Software - Introdução Elaine Cecília Gatto
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareUFPA
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareCamilo de Melo
 
Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2Elaine Cecília Gatto
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareÁlvaro Farias Pinheiro
 
Modelos de ciclo de vida de software
Modelos de ciclo de vida de softwareModelos de ciclo de vida de software
Modelos de ciclo de vida de softwareYuri Garcia
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de SoftwareAricelio Souza
 
Aula 5 -Avaliação de interfaces de usuário - testes com usuários
Aula 5 -Avaliação de interfaces de usuário - testes com usuáriosAula 5 -Avaliação de interfaces de usuário - testes com usuários
Aula 5 -Avaliação de interfaces de usuário - testes com usuáriosAndré Constantino da Silva
 

Tendances (20)

Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
 
Engenharia de requisitos
Engenharia de requisitosEngenharia de requisitos
Engenharia de requisitos
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
 
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
 
Aula 1 - Introdução a Engenharia de Software
Aula 1 -  Introdução a Engenharia de SoftwareAula 1 -  Introdução a Engenharia de Software
Aula 1 - Introdução a Engenharia de Software
 
Qualidade de Software - Introdução
Qualidade de Software - Introdução Qualidade de Software - Introdução
Qualidade de Software - Introdução
 
Aula 4- Engenharia de Software
Aula 4- Engenharia de SoftwareAula 4- Engenharia de Software
Aula 4- Engenharia de Software
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de Software
 
Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2
 
Aula 2 - Modelos de processos
Aula 2 -  Modelos de processosAula 2 -  Modelos de processos
Aula 2 - Modelos de processos
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
Modelos de ciclo de vida de software
Modelos de ciclo de vida de softwareModelos de ciclo de vida de software
Modelos de ciclo de vida de software
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Aula 2 - Processos de Software
Aula 2 - Processos de SoftwareAula 2 - Processos de Software
Aula 2 - Processos de Software
 
Arquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADAArquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADA
 
Introdução a gerenciamento de projetos e PMBoK®
Introdução a gerenciamento de projetos e PMBoK®Introdução a gerenciamento de projetos e PMBoK®
Introdução a gerenciamento de projetos e PMBoK®
 
Aula 5 -Avaliação de interfaces de usuário - testes com usuários
Aula 5 -Avaliação de interfaces de usuário - testes com usuáriosAula 5 -Avaliação de interfaces de usuário - testes com usuários
Aula 5 -Avaliação de interfaces de usuário - testes com usuários
 
Cmmi e mps.Br
Cmmi e mps.BrCmmi e mps.Br
Cmmi e mps.Br
 
Teste de software
Teste de softwareTeste de software
Teste de software
 

Similaire à Gerenciamento de Configuração de Software

Aula 4 gerência de configuração de software1
Aula 4   gerência de configuração de software1Aula 4   gerência de configuração de software1
Aula 4 gerência de configuração de software1Tiago Vizoto
 
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...Jadson Santos
 
Controle de versão
Controle de versãoControle de versão
Controle de versãoZé Pereira
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versãoocfelipe
 
Git github tortoise git
Git github tortoise gitGit github tortoise git
Git github tortoise gitmaxrosan
 
Aula 2 - Gerencia De Configuração_definições e processos.pdf
Aula 2 - Gerencia De Configuração_definições e processos.pdfAula 2 - Gerencia De Configuração_definições e processos.pdf
Aula 2 - Gerencia De Configuração_definições e processos.pdfssuser4d4894
 
Evoluindo bancos de dados com flyway
Evoluindo bancos de dados com flywayEvoluindo bancos de dados com flyway
Evoluindo bancos de dados com flywayVitor Albuquerque
 
MiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIEMiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIECloves da Rocha
 
Sistemas de Controle de Versão
Sistemas de Controle de VersãoSistemas de Controle de Versão
Sistemas de Controle de VersãoJonathas Silva
 
DevOps & Docker com a stack Microsoft
DevOps & Docker com a stack MicrosoftDevOps & Docker com a stack Microsoft
DevOps & Docker com a stack MicrosoftGraziella Bonizi
 
Lecture 6 :: Gestão de Configuração de Software
Lecture 6 :: Gestão de Configuração de SoftwareLecture 6 :: Gestão de Configuração de Software
Lecture 6 :: Gestão de Configuração de SoftwareRogerio P C do Nascimento
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122Bruno Souza
 
Controle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoControle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoFabricio Nogueira
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourcetdc-globalcode
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 

Similaire à Gerenciamento de Configuração de Software (20)

Aula 4 gerência de configuração de software1
Aula 4   gerência de configuração de software1Aula 4   gerência de configuração de software1
Aula 4 gerência de configuração de software1
 
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...
 
Svn - grupo de estudos sol7
Svn - grupo de estudos sol7Svn - grupo de estudos sol7
Svn - grupo de estudos sol7
 
Controle de versão
Controle de versãoControle de versão
Controle de versão
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
 
Git github tortoise git
Git github tortoise gitGit github tortoise git
Git github tortoise git
 
Aula 2 - Gerencia De Configuração_definições e processos.pdf
Aula 2 - Gerencia De Configuração_definições e processos.pdfAula 2 - Gerencia De Configuração_definições e processos.pdf
Aula 2 - Gerencia De Configuração_definições e processos.pdf
 
Evoluindo bancos de dados com flyway
Evoluindo bancos de dados com flywayEvoluindo bancos de dados com flyway
Evoluindo bancos de dados com flyway
 
MiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIEMiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIE
 
Sistemas de Controle de Versão
Sistemas de Controle de VersãoSistemas de Controle de Versão
Sistemas de Controle de Versão
 
Introducao ao Git
Introducao ao GitIntroducao ao Git
Introducao ao Git
 
DevOps & Docker com a stack Microsoft
DevOps & Docker com a stack MicrosoftDevOps & Docker com a stack Microsoft
DevOps & Docker com a stack Microsoft
 
Lecture 6 :: Gestão de Configuração de Software
Lecture 6 :: Gestão de Configuração de SoftwareLecture 6 :: Gestão de Configuração de Software
Lecture 6 :: Gestão de Configuração de Software
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Controle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoControle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básico
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSource
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
Controle de versões com o Subversion
Controle de versões com o SubversionControle de versões com o Subversion
Controle de versões com o Subversion
 
Git hub and Laravel
Git hub and Laravel Git hub and Laravel
Git hub and Laravel
 

Plus de Claudia Melo

Ethical Decisions in a Wicked World: The Role of Technologists, Entrepreneurs...
Ethical Decisions in a Wicked World: The Role of Technologists, Entrepreneurs...Ethical Decisions in a Wicked World: The Role of Technologists, Entrepreneurs...
Ethical Decisions in a Wicked World: The Role of Technologists, Entrepreneurs...Claudia Melo
 
Introdução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de SoftwareIntrodução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de SoftwareClaudia Melo
 
Introdução a Métodos Ágeis
Introdução a Métodos ÁgeisIntrodução a Métodos Ágeis
Introdução a Métodos ÁgeisClaudia Melo
 
Requisitos ágeis - Parte 1
Requisitos ágeis - Parte 1Requisitos ágeis - Parte 1
Requisitos ágeis - Parte 1Claudia Melo
 
Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Claudia Melo
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de SoftwareClaudia Melo
 
O ideal feminino e a computação v2.0
O ideal feminino e a computação v2.0O ideal feminino e a computação v2.0
O ideal feminino e a computação v2.0Claudia Melo
 
O papel da Agilidade na Economia Digital Descrição, Agile Day, Scopus
O papel da Agilidade na Economia Digital Descrição, Agile Day, ScopusO papel da Agilidade na Economia Digital Descrição, Agile Day, Scopus
O papel da Agilidade na Economia Digital Descrição, Agile Day, ScopusClaudia Melo
 
Diálogo TCU: Governos em Transformação Digital
Diálogo TCU: Governos em Transformação DigitalDiálogo TCU: Governos em Transformação Digital
Diálogo TCU: Governos em Transformação DigitalClaudia Melo
 
Ethics and Sustainability for Techies and Entrepreneurs
Ethics and Sustainability for Techies and EntrepreneursEthics and Sustainability for Techies and Entrepreneurs
Ethics and Sustainability for Techies and EntrepreneursClaudia Melo
 
A Method for Evaluating End-User Development Technologies
A Method for Evaluating End-User Development TechnologiesA Method for Evaluating End-User Development Technologies
A Method for Evaluating End-User Development TechnologiesClaudia Melo
 
CSBC'2017 - Diversidade de Gênero na Computação
CSBC'2017 - Diversidade de Gênero na Computação CSBC'2017 - Diversidade de Gênero na Computação
CSBC'2017 - Diversidade de Gênero na Computação Claudia Melo
 
Ethics and sustainability for techies
Ethics and sustainability for techiesEthics and sustainability for techies
Ethics and sustainability for techiesClaudia Melo
 
Princípios da Gestão Ágil
Princípios da Gestão ÁgilPrincípios da Gestão Ágil
Princípios da Gestão ÁgilClaudia Melo
 
Exploring the frontiers of Agile Development in the Digital Era
 Exploring the frontiers of Agile Development in the Digital Era Exploring the frontiers of Agile Development in the Digital Era
Exploring the frontiers of Agile Development in the Digital EraClaudia Melo
 
The Web of Gendered Innovations
The Web of Gendered InnovationsThe Web of Gendered Innovations
The Web of Gendered InnovationsClaudia Melo
 
9 Maneiras de Falhar com KPIs
9 Maneiras de Falhar com KPIs9 Maneiras de Falhar com KPIs
9 Maneiras de Falhar com KPIsClaudia Melo
 
Ser ágil no mundo de tecnologia
Ser ágil no mundo de tecnologiaSer ágil no mundo de tecnologia
Ser ágil no mundo de tecnologiaClaudia Melo
 
Governos em transformação digital: novas tecnologias e métodos, velhos desafi...
Governos em transformação digital: novas tecnologias e métodos, velhos desafi...Governos em transformação digital: novas tecnologias e métodos, velhos desafi...
Governos em transformação digital: novas tecnologias e métodos, velhos desafi...Claudia Melo
 
Minicurso: Uma Introdução ao Desenvolvimento de Software Lean
Minicurso: Uma Introdução ao Desenvolvimento de Software LeanMinicurso: Uma Introdução ao Desenvolvimento de Software Lean
Minicurso: Uma Introdução ao Desenvolvimento de Software LeanClaudia Melo
 

Plus de Claudia Melo (20)

Ethical Decisions in a Wicked World: The Role of Technologists, Entrepreneurs...
Ethical Decisions in a Wicked World: The Role of Technologists, Entrepreneurs...Ethical Decisions in a Wicked World: The Role of Technologists, Entrepreneurs...
Ethical Decisions in a Wicked World: The Role of Technologists, Entrepreneurs...
 
Introdução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de SoftwareIntrodução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de Software
 
Introdução a Métodos Ágeis
Introdução a Métodos ÁgeisIntrodução a Métodos Ágeis
Introdução a Métodos Ágeis
 
Requisitos ágeis - Parte 1
Requisitos ágeis - Parte 1Requisitos ágeis - Parte 1
Requisitos ágeis - Parte 1
 
Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Software
 
O ideal feminino e a computação v2.0
O ideal feminino e a computação v2.0O ideal feminino e a computação v2.0
O ideal feminino e a computação v2.0
 
O papel da Agilidade na Economia Digital Descrição, Agile Day, Scopus
O papel da Agilidade na Economia Digital Descrição, Agile Day, ScopusO papel da Agilidade na Economia Digital Descrição, Agile Day, Scopus
O papel da Agilidade na Economia Digital Descrição, Agile Day, Scopus
 
Diálogo TCU: Governos em Transformação Digital
Diálogo TCU: Governos em Transformação DigitalDiálogo TCU: Governos em Transformação Digital
Diálogo TCU: Governos em Transformação Digital
 
Ethics and Sustainability for Techies and Entrepreneurs
Ethics and Sustainability for Techies and EntrepreneursEthics and Sustainability for Techies and Entrepreneurs
Ethics and Sustainability for Techies and Entrepreneurs
 
A Method for Evaluating End-User Development Technologies
A Method for Evaluating End-User Development TechnologiesA Method for Evaluating End-User Development Technologies
A Method for Evaluating End-User Development Technologies
 
CSBC'2017 - Diversidade de Gênero na Computação
CSBC'2017 - Diversidade de Gênero na Computação CSBC'2017 - Diversidade de Gênero na Computação
CSBC'2017 - Diversidade de Gênero na Computação
 
Ethics and sustainability for techies
Ethics and sustainability for techiesEthics and sustainability for techies
Ethics and sustainability for techies
 
Princípios da Gestão Ágil
Princípios da Gestão ÁgilPrincípios da Gestão Ágil
Princípios da Gestão Ágil
 
Exploring the frontiers of Agile Development in the Digital Era
 Exploring the frontiers of Agile Development in the Digital Era Exploring the frontiers of Agile Development in the Digital Era
Exploring the frontiers of Agile Development in the Digital Era
 
The Web of Gendered Innovations
The Web of Gendered InnovationsThe Web of Gendered Innovations
The Web of Gendered Innovations
 
9 Maneiras de Falhar com KPIs
9 Maneiras de Falhar com KPIs9 Maneiras de Falhar com KPIs
9 Maneiras de Falhar com KPIs
 
Ser ágil no mundo de tecnologia
Ser ágil no mundo de tecnologiaSer ágil no mundo de tecnologia
Ser ágil no mundo de tecnologia
 
Governos em transformação digital: novas tecnologias e métodos, velhos desafi...
Governos em transformação digital: novas tecnologias e métodos, velhos desafi...Governos em transformação digital: novas tecnologias e métodos, velhos desafi...
Governos em transformação digital: novas tecnologias e métodos, velhos desafi...
 
Minicurso: Uma Introdução ao Desenvolvimento de Software Lean
Minicurso: Uma Introdução ao Desenvolvimento de Software LeanMinicurso: Uma Introdução ao Desenvolvimento de Software Lean
Minicurso: Uma Introdução ao Desenvolvimento de Software Lean
 

Gerenciamento de Configuração de Software

  • 1. 1 ENGENHARIA DE SOFTWARE - AULA 04 GERÊNCIA DE CONFIGURAÇÃO (+VERSIONAMENTO, GIT, GITHUB) PROF. DRA. CLAUDIA MELO 26/Mar/2018 @claudia_melo claudiamelo.org
  • 2. GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE (GCS): O QUE É? •É um conjunto de atividades projetadas para gerir modificações, identificando os produtos de trabalho que podem ser modificados, estabelecendo relacionamentos entre eles, definindo mecanismos para administrar as diferentes versões desses produtos de trabalho, controlando as modificações impostas e fazendo auditoria, e preparando relatórios sobre as modificações efetuadas. •CM ou SCM (Configuration Management ou Software Configuration Management) 2
  • 3. GCS: O QUE É? (2) •Gerenciamento de versão •Acompanhar as várias versões dos componentes do sistema e garantir que as alterações feitas nos componentes por diferentes desenvolvedores não interfiram entre si. •Build de sistema •O processo de montar componentes, dados e bibliotecas de programas, compilando-os para criar um sistema executável. •Gestão de mudança •Acompanhar solicitações de alterações no software de clientes e desenvolvedores, calcular os custos e o impacto das alterações e decidir se as alterações devem ser implementadas. •Gestão de release •Preparando o software para liberação externa e mantendo o controle das versões do sistema que foram liberadas para uso do cliente. 3
  • 4. PADRÕES INTERNACIONAIS SOBRE GCS •IEEE Std. 828-1998 IEEE Standard for Software Configuration Management Plans •ANSI/EIA-649-1998 National Consensus Standard for Configuration Management •MIL-STD-973 Military Standard for Configuration Management[1] (cancelled, but still good reference) •GEIA Standard 836-2002 Configuration Management Data Exchange and Interoperability 4
  • 5. NO MUNDO ÁGIL, GERÊNCIA DE CONFIGURAÇÃO É CHAVE •O desempenho da TI, de acordo com o Puppet Labs "State of DevOps" report 2014, vem de: • Código, configuração da aplicação e configuração do sistema em um sistema de controle de versão. • Obtenção de alertas de falha dos sistemas de log (registro) e monitoramento. • Desenvolvedores realizando merge do código no trunk do repositório diariamente. • Equipes de desenvolvimento e operações interagindo. • Desenvolvedores dividindo grandes funcionalidades em pequenas mudanças incrementais (forma ágil de trabalhar!). 5 •Os principais indicadores do desempenho de TI nesse relatório são: • Processo de aprovação de alterações revisado por pares. • Tudo sob controle de versão. • Monitoramento proativo. • Cultura organizacional de alta confiança. • Relação ganha-ganha entre desenvolvedoras/es (DEV) e operações (OPS). https://puppet.com/resources/whitepaper/2014-state-devops-report
  • 6. TERMINOLOGIA DE GCS 6 Termo Significado Baseline (Linha de base) Uma linha de base é uma coleção de versões de componentes que compõem um sistema. Branching A criação de uma nova linha de código a partir de uma versão existente de linha de código. Controle de configuração (versão) O processo de assegurar que versões de sistemas e componentes sejam registradas e mantidas para que as alterações sejam gerenciadas e todas as versões dos componentes sejam identificadas e armazenadas durante a vida útil do sistema. Item de configuração Qualquer coisa associada a um projeto de software (design, código, dados de teste, documento, hardware, firmware etc.) colocada sob controle de configuração. Mainline Uma sequência de linhas de base que representa diferentes versões de um sistema.
  • 7. TERMINOLOGIA 7 Termo Significado Merge A criação de uma nova versão de um componente de software, mesclando versões separadas em diferentes linhas de código. Release Uma versão de um sistema que foi liberado para uso. Repositório Um banco de dados compartilhado de versões de componentes de software e meta-informações sobre alterações nesses componentes. System building (Build) A criação de uma versão do sistema executável compilando e vinculando as versões apropriadas dos componentes e bibliotecas do sistema. Versão Uma instância de um item de configuração que difere, de alguma forma, de outras instâncias desse item. Workspace Uma área de trabalho privada onde o software pode ser modificado sem afetar outros desenvolvedores que possam estar usando ou modificando esse software.
  • 8. SISTEMA DE CONTROLE DE CONFIGURAÇÃO •Determinação de versão •Salvar todas essas versão para permitir a gestão efetiva das entregas do produto e permitir aos desenvolvedores voltar a versões anteriores. •Acompanhamento de dependência e gestão de mudanças •O repositório gerencia grande quantidade de relacionamentos entre elementos de dados armazenados nele. •Acompanhamento de requisitos •Fornece a capacidade de acompanhar todos os componentes e produtos passíveis de entrega de projeto e construção que resultam de uma especificação de requisitos específica. 8 • Gestão de configuração • Acompanha uma série de configurações representando marcos do projeto ou versões de produção específicas. • Gestão de versão fornece as versões necessárias e gestão de ligações guarda trilha de interdependências. • Pista de auditoria • estabelece informação adicional sobre quando, por que e por quem modificações foram feitas.
  • 9. REPOSITÓRIO X CONTROLE DE VERSÃO • Qual a diferença do Git e do Github? • Git: sistema de controle de versão • Github: repositório compartilhado (cloud-based) 9 https://blogs.carleton.edu/bostonmassacre3d/2017/05/16/introducing-our-git-workflow/
  • 10. CONTROLE DE VERSÃO - MODELO DISTRIBUÍDO 10
  • 11. CONTROLE DE VERSÃO - MODELO DISTRIBUÍDO •Um repositório “master" (ou trunk) é criado em um servidor que mantém o código produzido pela equipe de desenvolvimento. •O/A desenvolvedor/a cria um clone do repositório do projeto que é baixado e instalado em seu computador. •Desenvolvedora/es trabalham nos arquivos necessários e mantêm novas versões em seus repositórios privados em seus computadores. •Quando as alterações são feitas, elas/es dão um "commit" dessas alterações e atualizam o repositório do servidor privado. •Eles podem depois fazer um "push" dessas mudanças para o repositório do projeto. 11
  • 12. CONTROLE DE VERSÃO - BRANCHING E MERGING •Pode haver várias sequências independentes de versões que refletem alterações em um componente ao longo do tempo. •Isso é normal no desenvolvimento do sistema, onde diferentes desenvolvedores trabalham independentemente em diferentes versões do código. •Em algum momento, pode ser necessário mesclar ramificações (branches) para criar uma nova versão de um componente que inclua todas as alterações feitas. •Se as alterações feitas envolverem partes diferentes do código, as versões do componente podem ser mescladas automaticamente combinando os "deltas" que se aplicam ao código. 12
  • 13. BUILD DO SISTEMA •A construção do sistema é o processo de criar um sistema executável completo, compilando e vinculando os componentes do sistema, bibliotecas externas, arquivos de configuração etc. •Ferramentas de build de sistema e ferramentas de gerenciamento de versão devem se comunicar. • O processo de build baseia-se em certa versão do repositório gerenciado pelo sistema de gerenciamento de versões. •A descrição da configuração usada para identificar uma linha de base também é usada pela ferramenta de build do sistema. 13
  • 14. BUILD DO SISTEMA 14 Automated build system Source code files Data files Libraries Configuration files Executable tests Executable target system Test resultsCompilers and tools
  • 15. BUILD EM AGILE: INTEGRAÇÃO CONTÍNUA •Uma das práticas mais importantes do desenvolvimento ágil! •Agilizar tarefas demoradas como a compilação de um projeto e a execução dos seus testes automatizados. •Tarefas são executadas a cada mudança no repositório de código e, em caso de erros de compilação ou falhas nos testes automatizados, todos os desenvolvedores são alertados rapidamente. 15https://developers.redhat.com/blog/2017/09/06/continuous-integration-a-typical-process/
  • 17. GIT FLOW 17https://www.toptal.com/software/traunk-based-development-git-flow • Há uma ramificação de desenvolvimento principal com acesso restrito. Muitas vezes é chamado de branch de desenvolvimento. • Os desenvolvedores criam feature branches a partir desse ramo principal e trabalham nelas. Depois que eles terminam, eles criam pull requests. • Em pull requests, outros desenvolvedores comentam sobre mudanças e podem ter discussões, muitas vezes longas. • Demora algum tempo para concordar com uma versão final das alterações. Depois de acordado, o pull request é aceito e mesclada ao branch de desenvolvimento. • Uma vez que a branch de desenvolvimento tenha atingido maturidade suficiente para ser liberada, uma branch separada é criada para preparar uma release.
  • 18. GIT FLOW 18https://www.toptal.com/software/trunk-based-development-git-flow • Essa versão (release branch) é testada e as correções de bugs são aplicadas até o momento em que ele está pronto para ser publicado para os usuários finais. • Feito isso, mescla-se a versão ao ramo mestre (master branch), que é marcada com a versão de release. • Enquanto isso, novos recursos podem ser desenvolvidos na branch de desenvolvimento.
  • 19. MAINLINE MODEL 19https://paulhammant.com/2013/04/05/what-is-trunk-based-development/ • O desenvolvimento de certa funcionalidade acontece em uma branch aberta a partir da mainline. • A versão de release é anotada na branch de desenvolvimento. • Quando uma release é definida, ocorre um grande merge da versão criada com o código da mainline. • A integração das funcionalidades desenvolvidas em diferentes branches ocorre tanto na mainline quanto na própria branch de desenvolvimento. • Modelo herdado dos primórdios da GCS, não é bem- visto hoje.
  • 20. TRUNK-BASED DEVELOPMENT (TBD) 20https://paulhammant.com/2013/04/05/what-is-trunk-based-development/ • Todos os desenvolvedores (para uma determinada funcionalidade implantável) realizam commits na linha principal (trunk). • DEVs podem, em suas próprias estações de trabalho, fazer alguns desenvolvimentos multi-branch (digamos, com o Git), mas quando eles são “feitos” com uma mudança ou uma correção de bug, ele deve voltar para o trunk compartilhado. • DEVs não fazem commit de código que quebre o build do código que está no trunk • rollback/revert quando isso ocorrer OU • pode ser usada estratégia de pré-commit para ajudar nessa disciplina • DEVs não trabalham isolados por dias em branches locais - atualização frequente (+ que diária)
  • 21. TRUNK-BASED DEVELOPMENT (TBD) 21https://paulhammant.com/2013/04/05/what-is-trunk-based-development/ • Branches são feitos para uma release. • Desenvolvedores não podem fazer branches nesse local compartilhado. Somente engenheiros de release se comprometem com essas ramificações e, de fato, criam cada branch de release. • Eles também podem selecionar alguns commits específicos (cherry-pick: conveniência e importância) e fazer um merge na branch. • Depois que uma release for substituída por outra, a ramificação provavelmente será excluída. • TBD significa que desenvolvedores regulares não realizam commit em uma branch de release. • TBD significa que você excluirá branches de versão "antigas", sem mesclá-las de volta ao trunk.
  • 22. TRUNK-BASED DEVELOPMENT (TBD) 22https://paulhammant.com/2013/04/05/what-is-trunk-based-development/ • TBD significa que desenvolvedores regulares não realizam commit em uma branch de release. • TBD significa que você excluirá branches de versão "antigas", sem mesclá-las de volta ao trunk.
  • 23. EM QUE SITUAÇÕES OS MODELOS FUNCIONAM MELHOR? • Projetos open-source • Muitos desenvolvedores júnior • Quando o produto já está bem estabelecido Git flow • Quando estamos iniciando um projeto/ produto • Quando é necessário iterar rapidamente • Quando o time é formado de mais DEVs sênior Trunk-based
  • 24. LEIA MAIS, ESTUDE, EXPLORE 24https://paulhammant.com/2013/04/05/what-is-trunk-based-development/ • Manual completo em português do Git: https://git-scm.com/book/pt-br/v1/ • 15 minutos aprendendo git: https://try.github.io/levels/1/challenges/1 • Tutorial desenvolvido por seus colegas da FGA: https://github.com/fga-gpp-mds/A-Disciplina/wiki/Git • Comandos extra do git: https://github.com/tj/git-extras/blob/master/Commands.md • CONFIGURATION MANAGEMENT CAMP • http://cfgmgmtcamp.eu/ • vários vídeos disponíveis, evento anual Paul Hammant. Trunk Based Development in the Enterprise - Its Relevance and Economics https://www.slideshare.net/perforce/trunk-based-development-in-the-enterprise-its-relevance-and-economics
  • 25. CLAUDIA MELOPEOPLE TECHNOLOGY RESEARCHER @claudia_melo claudiamelo.org @claudiameloblog /claudiamelo