Buscar

Unidade I-Gerenciamento de Versões

Prévia do material em texto

Gerenciamento de versões 
 
Material Teórico 
1 / 3 
Objetivo da Unidade: 
• Fundamentar a gerência de configuração de software. 
Introdução 
Primeiramente, vamos definir o Gerenciamento de Configuração. Ele 
nada mais é que o processo de identificação e definição dos itens de 
configuração em um sistema, controlando a versão e a alteração desses 
itens ao longo do ciclo de vida do sistema, registrando e relatando 
o status dos itens de configuração e solicitações de alteração, e 
verificando a completude e correção dos itens de configuração. 
O gerenciamento de configuração é praticado de uma forma ou de outra 
como parte de qualquer projeto de engenharia de software, no qual 
vários indivíduos ou organizações devem coordenar suas atividades. 
Embora as disciplinas básicas de Gerenciamento de Configuração sejam 
comuns tanto para projetos de engenharia de hardware quanto 
de software, há algumas diferenças de ênfase devido à natureza dos 
produtos de software. 
O gerenciamento de configuração de software é um sistema de 
gerenciamento da evolução dos produtos de software, tanto durante os 
estágios iniciais de desenvolvimento quanto durante todas as etapas de 
manutenção. 
Um produto de software abrange o conjunto completo de programas de 
computador, procedimentos e documentação e dados associados 
designados para entrega a um usuário. 
 
Figura 1 
 
Onde se encontra a gerência de configuração no desenvolvimento 
de software. Trata-se de um conjunto de atividades de apoio que 
permite a absorção ordenada das mudanças inerentes ao 
desenvolvimento de software, mantendo a integridade e a 
estabilidade durante a evolução do projeto 
Todavia, é importante sabermos que gerenciamento de configuração, 
não é somente para desenvolvimento de software. Muitas outras 
indústrias e negócios se beneficiam com ele. Isso se deve ao 
gerenciamento de configuração ser um conjunto de práticas 
orquestradas para rastrear itens operacionais e seus atributos. É uma 
técnica de operações fundamental que captura informações valiosas 
para processos, como gerenciamento de incidentes, gerenciamento de 
problemas, gerenciamento de mudanças, manutenção, segurança e 
gerenciamento de riscos. 
Veja bem, aqui nessas duas linhas finais do parágrafo anterior, você 
percebe que isso serve para tudo, além de que, são itens que estão 
constantemente integrados aos frameworks de construção de software, 
afinal, nos dias presentes, não se faz software sem gestão de riscos, 
gestão de mudanças, incidentes, sustentação de software e outros. 
Quer exemplos?! 
Companhias aéreas: rastreia as peças e componentes de sua aeronave 
para fins de manutenção e segurança. Se uma determinada peça for 
recolhida por motivos de segurança, a companhia aérea pode 
determinar imediatamente onde a peça está instalada. 
Bancos: mantém o controle de seu software, componentes, bancos de 
dados, infraestrutura e instalações em um banco de dados de 
gerenciamento de configuração para fins como suporte de serviço, 
gerenciamento de incidentes e gerenciamento de riscos de TI. 
Telecomunicações: mantém um banco de dados de gerenciamento de 
configuração que inclui relacionamentos entre componentes. Isso é 
usado para determinar automaticamente o impacto das falhas. Por 
exemplo, se um roteador cair, a empresa terá acesso imediato a uma 
lista de serviços e clientes afetados. A empresa a partir disso, aqui no 
Brasil, deveria ligar para os clientes para avisar que seu serviço está 
inativo antes que eles percebam, mas... 
Espaço: mantém um relato detalhado da configuração básica atual 
de software, componentes, peças e materiais. A mudança é 
cuidadosamente controlada e gerenciada para os objetivos da missão 
usando as informações de configuração. Quando uma missão é iniciada, 
o gerenciamento de configuração inclui detalhes exatos de como ela é 
configurada. Essas informações podem ser usadas para encontrar 
soluções alternativas. 
Gerenciamento de configurações se associa a muitas áreas e se 
influenciam mutuamente a: itens de configuração, gestão de incidentes, 
gerenciamento de problemas, serviço de suporte e gestão de serviços. 
Fundamentos da Gerência de Configuração 
de Software 
A aplicação de gerenciamento de configuração vai além das 
informações de design para incluir todos os requisitos da empresa, além 
de seus produtos, serviços e entregas de solução em todas as fases do 
ciclo de vida do negócio. 
O gerenciamento de configuração de software é a organização dos 
componentes de um sistema de software para que se encaixem em uma 
ordem de funcionamento, nunca fora de sincronia entre si. Para 
Pressman (2011), a gerência de configuração de software é um conjunto 
de atividades destinadas a controlar a mudança, identificando os 
produtos de trabalho que são passíveis de mudança, estabelecendo 
relações entre eles, definindo mecanismos para gerenciar diferentes 
versões desses produtos de trabalho, controlando as mudanças 
impostas e auditando e relatando as mudanças feitas. 
Portanto, é a arte de identificar, organizar e controlar modificações 
no software que está sendo construído por uma equipe de 
desenvolvimento, além disso, ela maximiza a produtividade minimiza 
erros. 
É necessário estabelecer e manter a integridade dos produtos do projeto 
de software ao longo do ciclo de vida do software. As atividades 
necessárias para realizar isso incluem identificar itens e unidades de 
configuração, controlar sistematicamente as mudanças e manter a 
integridade e a rastreabilidade da configuração ao longo do ciclo de vida 
do software. Então, ao identificarmos os itens que precisam ser 
configurados, devemos lembrar que todos os artefatos do projeto são 
candidatos a: documentos, modelos gráficos, protótipos, código e 
qualquer entrega interna ou externa que pode sofrer alteração. 
Na terminologia de software, um item de configuração pode ser uma 
proposta, estimativa ou licitação, plano de projeto, plano de 
gerenciamento de risco, plano de garantia de qualidade, o próprio plano 
de gerenciamento de configuração em si, plano de teste, especificação 
de requisitos de sistema, documento de design de sistema, avaliação de 
métrica, código, resultado de teste, ferramentas como editores, 
compiladores e CASE e assim por diante. 
Existem objetos básicos e objetos agregados a serem configurados. O 
número de relacionamentos entre eles reflete a complexidade da tarefa 
de configuração. 
Mas, provavelmente, isso ainda não gerou um bom entendimento... 
Então vamos usar um exemplo baseado num filme famoso onde 
trabalharam os artistas Tom Hanks, Bill Paxton, Gary Sinise e Ed 
Harris, chamado de Apolo 13. O filme trata dos problemas que a nave 
Apolo 13 enfrentou durante sua missão até a lua, tendo que retornar à 
Terra de forma bastante contingencial. Quem assistiu ao filme deve ter 
percebido que, no centro de controle da missão na NASA, o diretor da 
missão (Ed Harris) conversa constantemente com os técnicos da missão 
e eles corriam para ver documentação, esquemas e outros livros de 
esquemas e outras coisas para tentar descobrir o que fazer para mudar 
os circuitos elétricos, hidráulicos e de circulação de oxigênio para tentar 
trazer os astronautas de volta para nosso planeta, abortando a missão 
lunar. Aquelas idas e vindas em livros, simuladores em tamanho real, 
discussão sobre esquemas, jumpers e outras coisas nada mais era que 
uma consulta aos componentes e circuitos da nave. Isso só era possível 
porque havia uma configuração e ela permitiu, por meio do 
gerenciamento da configuração, entender o que poderia ser feito para 
salvar os astronautas, o que realmente aconteceu. Sem gerência de 
configuração, os astronautas infelizmente teriam morrido! 
Bom, parece que esse é um bom motivo para você ter e manter a 
gerência de configuração de qualquer projeto, principalmente software, 
que é amplamente complexo e necessita de constante lapidação. 
O processo de gerenciamento de configuração é considerado por muitosfuncionários de TI como a melhor solução para lidar com mudanças em 
projetos de software, porque ele identifica os atributos funcionais e 
físicos do software em pontos críticos no tempo e implementa 
procedimentos para controlar mudanças em um atributo identificado 
com o objetivo de manter a integridade e rastreabilidade do software ao 
longo do ciclo de vida do software. 
Os quatro procedimentos normalmente encontrados em um sistema de 
gerenciamento de configuração de software confiável são: 
• bullet 
Identificação de configuração; 
• bullet 
Controle de configuração; 
• bullet 
Documentação de status de configuração; 
• bullet 
Auditorias de configuração 
Esses procedimentos têm nomes diferentes em vários padrões de 
gerenciamento de configuração, mas as definições são basicamente as 
mesmas em todos os padrões. 
Identificação da configuração: é o procedimento pelo qual os atributos 
são identificados que define todas as propriedades de um item de 
configuração. Um item de configuração denominado objeto é um 
produto (hardware e / ou software) que oferece suporte ao uso por um 
usuário final. 
Esses atributos são registrados em documentos de configuração ou 
tabelas de banco de dados e são baseados na linha de base. Uma linha de 
base é um objeto de configuração aprovado, como um plano de projeto, 
que foi autorizado para implementação. 
Normalmente, uma linha de base é um produto de trabalho único ou 
conjunto de produtos de trabalho que podem ser usados como uma base 
lógica para comparação. 
Uma linha de base também pode ser estabelecida como base para 
atividades futuras. A configuração de um projeto geralmente inclui uma 
ou mais linhas de base, o status da configuração e quaisquer dados de 
medição coletados. 
Uma configuração atual se refere ao status atual, auditoria atual, 
medições atuais e a revisão mais recente de todos os objetos de 
configuração. 
Às vezes, uma linha de base pode se referir a todos os objetos associados 
a um projeto específico. Isso pode incluir todas as revisões feitas em 
todos os objetos, ou apenas a última revisão de objetos em um projeto, 
dependendo do contexto em que o termo é usado. 
A definição da linha de base de um atributo de projeto força os 
processos formais de controle de mudança de configuração a serem 
executados no caso de esses atributos serem alterados. Uma linha de 
base também pode ser especializada como um tipo específico de linha 
de base, como: 
• Linha de base funcional: especificações iniciais, 
especificações de contrato, regulamentos, especificações 
de design etc.; 
• Linha de base alocada: estado dos produtos de trabalho 
uma vez que os requisitos foram aprovados; 
• Linha de base de desenvolvimento: status dos produtos 
de trabalho durante o desenvolvimento; 
• Linha de base do produto: contém o conteúdo do projeto 
a ser lançado; 
• Outros, com base em práticas de negócios individuais. 
Controle de mudança de configuração: é um conjunto de processos e 
estágios de aprovação necessários para alterar os atributos de um 
objeto de configuração e para refazê-los. 
Contabilidade do status da configuração: é a capacidade de registrar e 
relatar as linhas de base da configuração associadas a cada objeto de 
configuração a qualquer momento. 
Auditorias de configuração: são divididas em auditorias de 
configuração física e funcional. Uma auditoria ocorre no momento da 
entrega de um projeto ou quando uma mudança é feita. Uma auditoria 
de configuração funcional tem como objetivo garantir que os atributos 
funcionais e de desempenho de um objeto de configuração sejam 
alcançados. Uma auditoria de configuração física tenta garantir que um 
objeto de configuração seja instalado com base nos requisitos de suas 
especificações de design. 
WILLIAMS, 2014, p. 11-12 
Identificação da configuração: é o procedimento pelo qual os atributos são 
identificados que define todas as propriedades de um item de 
configuração. Um item de configuração denominado objeto é um 
produto (hardware e / ou software) que oferece suporte ao uso por um 
usuário final. 
Esses atributos são registrados em documentos de configuração ou 
tabelas de banco de dados e são baseados na linha de base. Uma linha de 
base é um objeto de configuração aprovado, como um plano de projeto, 
que foi autorizado para implementação. 
Normalmente, uma linha de base é um produto de trabalho único ou 
conjunto de produtos de trabalho que podem ser usados como uma base 
lógica para comparação. 
Uma linha de base também pode ser estabelecida como base para 
atividades futuras. A configuração de um projeto geralmente inclui uma 
ou mais linhas de base, o status da configuração e quaisquer dados de 
medição coletados. 
Uma configuração atual se refere ao status atual, auditoria atual, 
medições atuais e a revisão mais recente de todos os objetos de 
configuração. 
Às vezes, uma linha de base pode se referir a todos os objetos associados 
a um projeto específico. Isso pode incluir todas as revisões feitas em 
todos os objetos, ou apenas a última revisão de objetos em um projeto, 
dependendo do contexto em que o termo é usado. 
A definição da linha de base de um atributo de projeto força os 
processos formais de controle de mudança de configuração a serem 
executados no caso de esses atributos serem alterados. Uma linha de 
base também pode ser especializada como um tipo específico de linha 
de base, como: 
• Linha de base funcional: especificações iniciais, especificações de contrato, 
regulamentos, especificações de design etc.; 
• Linha de base alocada: estado dos produtos de trabalho uma vez que os requisitos 
foram aprovados; 
• Linha de base de desenvolvimento: status dos produtos de trabalho durante o 
desenvolvimento; 
• Linha de base do produto: contém o conteúdo do projeto a ser lançado; 
• Outros, com base em práticas de negócios individuais. 
Controle de mudança de configuração: é um conjunto de processos e 
estágios de aprovação necessários para alterar os atributos de um 
objeto de configuração e para refazê-los. 
Contabilidade do status da configuração: é a capacidade de registrar e 
relatar as linhas de base da configuração associadas a cada objeto de 
configuração a qualquer momento. 
Auditorias de configuração: são divididas em auditorias de configuração 
física e funcional. Uma auditoria ocorre no momento da entrega de um 
projeto ou quando uma mudança é feita. Uma auditoria de configuração 
funcional tem como objetivo garantir que os atributos funcionais e de 
desempenho de um objeto de configuração sejam alcançados. Uma 
auditoria de configuração física tenta garantir que um objeto de 
configuração seja instalado com base nos requisitos de suas 
especificações de design. 
WILLIAMS, 2014, p. 11-12 
Segundo Pressman (2011), no contexto de engenharia de software, 
definimos uma linha-base como um marco de referência no 
desenvolvimento de um software, que é caracterizado pela entrega de 
um ou mais itens de configuração, obtida por meio de uma revisão 
técnica formal. 
Se ignorarmos o gerenciamento da configuração ou fizermos 
incorretamente, uma organização paga penalidades severas na forma 
de gastos de recursos de intervenção. Essas despesas são o tempo, 
dinheiro e recursos, gastos não planejados, gastos para compensar os 
problemas de qualidade e cronograma entre tantos outros. 
Quando os problemas de qualidade e cronograma dominam a energia 
que uma organização gasta diariamente, a ação corretiva torna-se a 
“forma de trabalhar” padrão. E, sinceramente, são anos vendo isso 
acontecer em empresas, de tal forma que mudar esse ambiente requer 
uma compreensão de como os processos atuais se relacionam com as 
melhores práticas e a mudança de cultura necessária para fazer a 
transição. 
Alguns dos principais benefícios do gerenciamento da configuração 
incluem: 
• bullet 
Maior eficiência com um processo de configuração 
definido que fornece controle e melhora a visibilidade 
comrastreamento; 
• bullet 
Redução de custos por ter conhecimento detalhado de 
todos os elementos da configuração, o que permite evitar 
duplicações desnecessárias; 
• bullet 
Seu negócio terá maior agilidade e agilidade na resolução 
de problemas, proporcionando uma melhor qualidade de 
serviço aos seus clientes; 
• bullet 
Maior confiabilidade do sistema e do processo por meio 
da detecção e correção mais rápidas de configurações 
inadequadas que podem afetar negativamente o 
desempenho; 
• bullet 
A capacidade de definir e aplicar políticas e 
procedimentos formais que podem ajudar no 
monitoramento e auditoria do status do processo; 
• bullet 
Gerenciamento de mudanças mais eficiente que reduz o 
risco de incompatibilidade ou problemas com o produto; 
• bullet 
Restauração mais rápida do seu serviço se ocorrer uma 
falha no processo. Se você souber o estado necessário da 
configuração, a recuperação da configuração de trabalho 
será muito mais rápida e fácil. 
Todas as práticas do processo de gerenciamento de configuração – CM 
são necessárias para que haja processos eficazes de mudança, liberação 
e gerenciamento de qualidade, mas a identificação e o controle de 
mudanças de configuração são essenciais; se você não souber o que está 
planejando mudar ou testando, será impossível garantir que as 
solicitações de mudança sejam implementadas adequadamente ou que 
o que foi lançado era de qualidade adequada. A rastreabilidade, por 
definição, requer que os artefatos vinculados pelos relacionamentos de 
rastreio sejam claramente identificados e seu estado devidamente 
controlado. 
Controle de Versão 
O controle de versão, também conhecido como controle de revisão ou 
controle de origem, é o gerenciamento de alterações em documentos, 
programas de computador, grandes sites da web e outras coleções de 
informações. Cada revisão está associada a um carimbo de data e hora e 
à pessoa que está fazendo a alteração. 
Uma única pessoa raramente é responsável pela codificação de projetos 
de software de médio ou grande porte. Hoje, as equipes, tanto locais 
quanto geograficamente dispersas, fazem a maior parte do 
desenvolvimento. 
No entanto, em um passado não muito distante, os programadores 
eram fisicamente centralizados e quantas vezes gritavam uns com os 
outros pela sala de desenvolvimento ou então pairavam sobre o colega 
perturbando-o com a versão mais recente, esperando sua chance de 
adicionar arquivos, assim que ele saísse. E, embora esteja claro que 
modificações em documentos para desenvolvimento 
de software baseado em equipe requerem mais estrutura do que um 
único arquivo, implantar um sistema que protege o documento mestre 
enquanto fornece produtividade ideal continua a ser um desafio. 
Um forte sistema de controle de versão de código pode fornecer clareza 
ao revisar o software, esclarecendo o que foi alterado por quem e 
quando. Geralmente, essas soluções funcionam para fornecer um 
formato lógico para rastrear o progresso do desenvolvimento, 
mantendo as alterações detalhadas, e têm a capacidade de reverter para 
versões anteriores. 
O controle de versão permite que você gerencie as alterações nos 
arquivos ao longo do tempo. Você pode usar o controle de versão para 
código de versão, arquivos binários e ativos digitais. Ele é um 
componente do gerenciamento de configuração de software. Além disso, 
também é a prática DevOps de garantir que cada tecnologia em um 
determinado produto esteja usando uma versão escolhida e confiável da 
tecnologia que seja compatível com cada componente dentro do 
ecossistema do produto. 
Hoje, uma equipe de desenvolvedores é responsável pela maioria das 
compilações de software. A importância do controle de versão do código 
é que ele fornece um veículo de comunicação constante para a equipe, 
estejam eles na mesma sala ou ao redor do mundo. 
O controle de versão fornece um método lógico que preserva as 
contribuições individuais dos membros da equipe sem sobrescrever o 
trabalho de outro desenvolvedor e, a seguir, mescla e reconcilia as 
alterações e atualizações. Também é à prova de falhas para localizar e 
dar suporte a problemas que estão em conflito. O registro histórico 
produzido pode ser usado para rastrear as origens do problema ou 
arquivar versões para uso posterior, sendo que isso ajuda muito a 
interação entre o time de testes e o de desenvolvimento. Mesmo se um 
desenvolvedor estiver trabalhando sozinho, o sistema fornece a 
manutenção de registros defensivos do progresso e do processo. A 
preservação de informações valiosas e trabalhos anteriores é possível 
somente por meio do controle de versão. 
Claro que fazemos isso por meio de softwares, como GIT ou BITBUCKET, 
sim, existem outros mais sofisticados e caros, mas, como exemplo, 
esses dois servem muito bem para ilustrar que, os sistemas de controle 
de versão de software oferecem suporte a um plano geral de 
desenvolvimento ágil, fornecendo um mecanismo de prova de como o 
código foi construído, quando foi alterado e por quem. 
Quando esses sistemas são bem gerenciados, eles possuem convenções 
de numeração de versão que são facilmente identificáveis por toda a 
equipe. 
O sistema gerencia os diretórios, arquivos e alterações individuais feitas 
ao longo do tempo, o que permite aos usuários encontrar as causas raiz 
dos erros ou bugs, ou reverter para uma versão anterior. 
Como vantagem, ter controle de versionamento de software é 
importante porque: 
• bullet 
Melhora a produtividade da equipe e permita a 
colaboração; 
• bullet 
Melhora a comunicação da equipe com uma solução 
confiável; 
• bullet 
Reduz erros e conflitos de desenvolvimento; 
• bullet 
Melhora a satisfação do cliente com versões 
de software confiáveis 
Desenvolvedores, codificadores, designers e engenheiros de software são 
os principais usuários de um sistema de controle de versão 
de software de design e construção. Os gerentes de projeto envolvidos no 
desenvolvimento também podem monitorar as práticas de controle de 
versão. 
Ao escolher um sistema de controle de versão, as primeiras etapas 
incluem saber de qual acesso você precisa e como a equipe deve 
colaborar. O modo como o documento é controlado, editado e mesclado 
também é de importância central. 
A configuração básica inclui os seguintes componentes: 
• bullet 
Repositório: o banco de dados principal que armazena os 
metadados para os arquivos do projeto (o conjunto de 
dados principal é chamado de tronco); 
• bullet 
Servidor: o computador que contém o repositório 
principal; 
• bullet 
Cliente: a máquina que o desenvolvedor usa para se 
conectar ao repositório; 
• bullet 
Cópia de trabalho: a cópia do arquivo do projeto que o 
desenvolvedor edita. 
O controle de versão pode ser uma excelente ajuda para correções de 
emergência, manutenção de rotina, atualizações e novos recursos com 
prazos de desenvolvimento potencialmente sobrepostos. 
Quando você precisa solucionar um problema, pode acessar e comparar 
facilmente o último arquivo de trabalho com o arquivo com defeito e 
diminuir o tempo gasto na identificação da causa de um problema. 
Você pode restaurar versões anteriores de um arquivo (ou até mesmo de 
todo o projeto) de forma eficaz por meio do uso de sistemas de controle 
de versão, sendo que você pode simplesmente desfazer tudo que você 
fez com apenas alguns cliques. 
 A perspectiva de desenvolvimento é dividida em três diferentes 
sistemas: sistema de controle de versões, que é o responsável por cuidar 
que as diversas solicitações de modificação possam ser tratadas em 
paralelo, sem corromper o sistema de gestão de configuração como um 
todo; sistema de controle de modificações, que é responsável pelo 
controle da configuração, armazenando as informações das solicitações 
de modificação e relatando essas informações aos outros participantes; 
e o sistema de gerenciamento de construção, que é responsável por 
automatizar o processo de transformação dos artefatos de software em 
um arquivoexecutável e estruturar as linhas-bases selecionadas para a 
liberação (FREITAS, 2010). 
 
Figura 2 – Perspectivas de desenvolvimento 
Automação e Ferramentas para Controle de 
Versão 
Os sistemas de controle de versão são uma categoria de ferramentas 
de software que ajudam a registrar as alterações feitas nos arquivos, 
mantendo um controle das modificações feitas no código. 
Os sistemas de controle de versão possuem, normalmente, um 
repositório, onde há, tecnicamente, um banco de dados de alterações – 
lá existem todas as edições e versões históricas do projeto. O segundo 
componente é a chamada cópia pessoal de trabalho, ou seja, a cópia de 
todos os arquivos de um projeto. Você, caso seja um desenvolvedor, 
pode editar essa cópia, sem afetar o trabalho dos outros 
desenvolvedores e, ao final, enviar para um repositório quando 
terminar de fazer suas alterações. 
Existem 3 tipos de controle de versão: 
• bullet 
Sistemas de Controle de Versão Local: é um dos mais 
simples e possui um banco de dados que mantém todas as 
alterações dos arquivos sob controle de revisão. Eles 
mantêm conjuntos de patches, ou seja, diferenças entre 
arquivos em um formato especial no disco. Ao adicionar 
todos os patches, ele pode recriar a aparência de qualquer 
arquivo em qualquer momento; 
• bullet 
Sistemas de controle de versão centralizados: contêm 
apenas um repositório e cada usuário obtém sua própria 
cópia de trabalho. Você precisa se comprometer a refletir 
suas mudanças no repositório. É possível que outras 
pessoas vejam suas alterações atualizando. O benefício é 
que ele favorece a colaboração entre os desenvolvedores, 
além de fornecer uma visão, até certo ponto, sobre o que 
todos os outros estão fazendo no projeto. Ele permite que 
os administradores tenham controle refinado sobre quem 
pode fazer o quê. Por outro lado, a desvantagem óbvia é o 
ponto único de falha que o repositório centralizado 
representa se ele cair durante esse período de colaboração 
e não for possível salvar as alterações de versão. E se o 
disco rígido do banco de dados central for corrompido e 
os backups adequados não forem mantidos? Você perde 
absolutamente tudo. Provavelmente, você pensou 
em backup, redundância e contingência. Mas se isso 
ocorrer durante o dia com uma mudança maciça, adeus 
alterações mesmo! Teria que trabalhar com o backup do 
dia anterior ou então você pode possuir algum servidor 
espelhado com um sync a cada 2 horas, por exemplo, mas 
seriam 2 horas perdidas de 
alteração. Alguns softwares: Subversion (SVN) ou Sistema 
de Versão Concorrente (CVS); 
• bullet 
Sistemas de controle de versão distribuída: contêm 
vários repositórios. Cada usuário tem seu próprio 
repositório e sua cópia de trabalho. Apenas confirmar 
suas alterações não dará a outros o acesso às suas 
alterações. Isso ocorre porque o commit irá refletir essas 
mudanças em seu repositório local e você precisa 
“empurrá-las” para torná-las visíveis no repositório 
central. Da mesma forma, ao atualizar, você não obtém as 
alterações de outros, a menos que primeiro tenha obtido 
essas alterações em seu repositório. De forma muito 
simples: 
 
• Você se compromete em mudar o código no seu 
repositório; 
• Você empurra essas mudanças atualizando; 
• Eles puxam as mudanças feitas; 
• Eles o atualizam repositório central deles e o ciclo 
reinicia. 
Um sistema de controle de versão distribuído é projetado para atuar nos 
dois sentidos. Ele armazena todo o histórico do arquivo em cada 
máquina localmente. Ele também sincroniza as alterações locais feitas 
pelo usuário de volta ao servidor sempre que necessário, para que as 
alterações possam ser compartilhadas com outras pessoas, 
proporcionando um ambiente de trabalho colaborativo. 
 
Figura 3 – Alguns softwares de controle de versão e seus tipos 
Quais os mais famosos? 
Subversion (SVN) - é um sistema de controle de versão que foi 
originalmente projetado para substituir o CVS (Concurrent Versions 
System) enquanto adiciona funcionalidades que faltavam ao CVS. 
Lançado originalmente em 1990, o sistema de controle de versão CVS 
tinha altas classificações em seus dias e viu sua versão estável final ser 
lançada em 2008. O SVN é considerado de segunda geração. Mais 
significativamente, ele depende de um repositório central. Embora 
esteja crescendo há anos pelos padrões de software, no entanto, ele 
ainda está em desenvolvimento ativo e uso ativo em todo o mundo. 
Enquanto muitas empresas podem querer um SVN mais moderno que 
suporte ramificação infinitas e um modelo de repositório distribuído, o 
SVN ainda é um candidato sólido e funciona maravilhosamente bem 
com certos fluxos de trabalho. 
Você poderá instalar aqui: 
para Windows. 
ACESSE 
Você poderá instalar aqui: 
para servidores Apache 
ACESSE 
https://tortoisesvn.net/downloads.html
https://subversion.apache.org/
 
Figura 4 – Interface Subversion AquaDataStudio 
Fonte: Reprodução 
Saiba Mais 
Vamos aprender como se faz: PRONUS. Controle de Versão 
com Subversion disponível em: 
Git - desenvolvido sob a direção de Linus Torvald, o projeto Git foi 
lançado em 7 de abril de 2015, apenas alguns dias antes do lançamento 
do Mercurial, e ganhou muita força ao longo dos anos e se beneficia da 
interface on-line bem projetada do GitHub que permite colaboração, 
revisão de código e gerenciamento de código para open source e projetos 
privados. Com o Github, projetos públicos são sempre gratuitos e 
compartilhar repositórios Git se tornou o método preferido para muitos 
desenvolvedores de software de código aberto compartilharem e 
colaborarem em projetos. Pode fazer quase tudo que o desenvolvedor 
quiser. Mas, por outro lado, o Git pode ser complicado de aprender, não 
é bem documentado e muda rapidamente, de modo que acompanhar 
todos os seus recursos pode ser um desafio, mesmo com os vídeos e 
cursos que tem por aí. 
Você poderá instalar aqui: 
para vários sistemas operacionais. 
ACESSE 
Você poderá instalar aqui: 
GitHub para Windows. 
ACESSE 
https://git-scm.com/downloads
https://github.com/git-for-windows
 
Figura 5 – Interface GIT 
Fonte: Reprodução 
Saiba Mais 
Vamos aprender como: Git e GitHub: prático e sem usar 
comandos no terminal. 
Mercurial – um concorrente direto do Git, o sistema de controle de 
versão Mercurial é um pouco mais simplificado e bem documentado e é 
escrito em Python em vez de C e C++. O maior cliente do Mercurial é de 
longe o Facebook. 
Você poderá instalar aqui: 
para vários sistemas operacionais. 
ACESSE 
https://www.mercurial-scm.org/wiki/Download
 
Figura 6 – Interface do EasyMercurial 
Fonte: Reprodução 
Saiba Mais 
Vamos aprender: WILL, B. Controle de versão com Mercurial. 
Disponível em: 
Essa é a parte dois desse vídeo com o mesmo título e autor, 
apenas muda o link: 
Ambientes de Desenvolvimento Colaborativo 
de Software 
Não adianta falar de ambiente sem antes falar sobre o que é 
colaboração. 
Colaboração é uma prática de trabalho pela qual os indivíduos 
trabalham juntos para um propósito comum de obter benefícios 
comerciais. Isso, além de honesto, é verdadeiro. Poderíamos mencionar 
aqui os efeitos e benefícios sociológicos e psicológicos da colaboração 
entre adultos, mas o foco é software e o desenvolvemos dentro de 
empresas e empresas visam ao lucro. Então, como bons 
desenvolvedores e analistas de sistemas, devemos abstrair o essencial 
desse modelo e construir com a máxima eficiência. 
Os espaços de trabalho compartilhados estão entre as entradas mais 
visíveis no espaço de colaboração. Eles visam ao compartilhamento de 
documentos e aplicativos com bate-papo e, talvez, controle de versão e 
outros recursos de auditoria, eles podem ter mais ou menos. O Google 
Docs é um exemplo notável por ser gratuito para indivíduos que se 
juntam para cumprir um objetivo. Professores, no geral, utilizam 
bastante para que os alunos aprendam a desenvolver trabalhos em 
equipe dinâmicos e, também, aprendem alguns soft skills como trabalho 
em equipe e pensamentocomputacional. Temos também o Microsoft 
SharePoint, o Office 365 entre os mais conhecidos. 
Mas ainda temos, em nível corporativo, repositórios coletivos de bases 
de conhecimentos, um lugar onde os que vieram antes escreveram 
coisas importantes, como enfrentamentos de problemas para os que 
estão na empresa agora – não temos que ficar constantemente 
“reinventando a roda”. 
Os wikis, nesse caso, talvez sejam considerados como enciclopédias on-
line ou manuais de como fazer, em muitas empresas. Eles são soluções 
que permitem aos usuários criar, editar e reorganizar livremente o 
conteúdo, mas, acima de tudo criar e manter conhecimento adquirido 
com muito suor nos projetos feitos pelas equipes de desenvolvimento e 
gestão na empresa, garantindo que não haverá perda da memória 
empresarial. Quando falamos em wiki, o que nos vem à mente é a mais 
famosa delas, a Wikipedia, que ainda é discriminada no meio acadêmico, 
mas é fartamente utilizada pelos estudantes no meio de 
desenvolvimento e engenharia. 
Claro que grande parte dessa suposta má fama é a de que qualquer um 
pode inserir qualquer coisa, por isso é importante que todos da 
empresa, ou melhor, todos os desenvolvedores e analistas de negócios 
sempre examinem as informações para garantir que nada de errado seja 
colocado lá, mesmo de forma não intencional. 
É tudo uma questão de cultura e maturidade da equipe e da empresa. 
Há, hoje, duas formas de pessoas e times colaborarem: 
• bullet 
Síncrono, onde todos interagem em tempo real, como em 
reuniões on-line, por meio de mensagens instantâneas, 
entre outros; 
• bullet 
Assíncrono, onde a interação pode ser em momentos 
diferentes no tempo, como ao enviar documentos ou 
anotações para espaços de trabalho compartilhados ou 
fazer contribuições numa wiki. 
O autopoliciamento é a chave para o sucesso num grupo 
multidisciplinar para o controle do conteúdo. Não devemos esquecer 
que colaboração envolve: conscientização, motivação, participação, 
mediação, pacto, reciprocidade, autorreflexão, entre outras coisas. 
Há um texto muito importante nas fontes do GitHub que vale a pena 
citar aqui sobre contribuição, especificamente sobre a transparência e 
na distribuição de cargas de trabalho. 
Transparência é a base para qualquer cultura de fonte interna, assim 
como para a comunidade de fonte aberta mais ampla. 
Compartilhe projetos em sua organização da forma mais ampla 
possível. Exceções podem ser feitas para projetos que requerem um 
nível mais alto de segurança caso a caso. 
Certifique-se de que sua equipe tenha as ferramentas e processos para 
se comunicar abertamente e construir de forma consistente – e que 
essas ferramentas e processos estão sendo usados. Se não estiverem, 
descubra o porquê e faça ajustes até estabelecer uma rotina sólida. 
Confirme se suas iniciativas de engenharia possuem recursos 
adequados e são apoiadas pela liderança. 
Dê aos desenvolvedores autonomia suficiente para contribuir com 
projetos fora de suas equipes imediatas. 
Quanto a carga de trabalhos, para adotar práticas internas de maneira 
eficaz, os colaboradores precisam ser capazes de trabalhar facilmente 
entre equipes e silos organizacionais. 
Torne as aprovações e revisões mais eficazes, distribuindo o controle 
por um grupo menor de participantes. Uma pequena equipe 
multifuncional de tomadores de decisão também pode ajudar as equipes 
a manter os padrões de qualidade e obter apoio da liderança. 
Distribua cargas de trabalho pesadas entre desenvolvedores 
distribuídos geograficamente ou até mesmo com membros da equipe 
que não são desenvolvedores. 
Lembre-se de que os não desenvolvedores são um recurso valioso para 
sua comunidade como fonte interna. 
Os gerentes de projeto podem avaliar rapidamente o estado do projeto, 
e as alterações feitas nos cronogramas do projeto podem ser vinculadas 
diretamente ao código em questão. 
Os escritores técnicos devem ser encorajados a trabalhar junto com os 
engenheiros de projeto, documentando precisamente os recursos do 
código de onde eles se originam. 
Os engenheiros de segurança podem revisar o código em busca de 
conformidade e pontos fracos relacionados à segurança, evitando 
problemas no início do fluxo de trabalho. 
GITHUB, 2019, p. 1-2 
Transparência é a base para qualquer cultura de fonte interna, assim 
como para a comunidade de fonte aberta mais ampla. 
Compartilhe projetos em sua organização da forma mais ampla 
possível. Exceções podem ser feitas para projetos que requerem um 
nível mais alto de segurança caso a caso. 
Certifique-se de que sua equipe tenha as ferramentas e processos para 
se comunicar abertamente e construir de forma consistente – e que 
essas ferramentas e processos estão sendo usados. Se não estiverem, 
descubra o porquê e faça ajustes até estabelecer uma rotina sólida. 
Confirme se suas iniciativas de engenharia possuem recursos 
adequados e são apoiadas pela liderança. 
Dê aos desenvolvedores autonomia suficiente para contribuir com 
projetos fora de suas equipes imediatas. 
Quanto a carga de trabalhos, para adotar práticas internas de maneira 
eficaz, os colaboradores precisam ser capazes de trabalhar facilmente 
entre equipes e silos organizacionais. 
Torne as aprovações e revisões mais eficazes, distribuindo o controle 
por um grupo menor de participantes. Uma pequena equipe 
multifuncional de tomadores de decisão também pode ajudar as equipes 
a manter os padrões de qualidade e obter apoio da liderança. 
Distribua cargas de trabalho pesadas entre desenvolvedores 
distribuídos geograficamente ou até mesmo com membros da equipe 
que não são desenvolvedores. 
Lembre-se de que os não desenvolvedores são um recurso valioso para 
sua comunidade como fonte interna. 
Os gerentes de projeto podem avaliar rapidamente o estado do projeto, 
e as alterações feitas nos cronogramas do projeto podem ser vinculadas 
diretamente ao código em questão. 
Os escritores técnicos devem ser encorajados a trabalhar junto com os 
engenheiros de projeto, documentando precisamente os recursos do 
código de onde eles se originam. 
Os engenheiros de segurança podem revisar o código em busca de 
conformidade e pontos fracos relacionados à segurança, evitando 
problemas no início do fluxo de trabalho. 
GITHUB, 2019, p. 1-2 
Agilidade e Gerenciamento de Configuração 
Preponderantemente, as empresas de software utilizam metodologias 
ágeis. Portanto, mais que nunca é importante entender que a 
implementação do gerenciamento de configuração deve ser ajustada 
para garantir que os princípios do Agile permaneçam intactos sem 
danificar nenhum dos princípios, então, identificar, controlar, auditar e 
relatar são princípios que independentes da metodologia devem ser 
mantidos. Qual o mindset necessário para uma gerência configuração 
ágil: 
Pense menor: Um dos principais focos do Ágil é pensar em iterações 
menores e incrementos de trabalho. A Gestão de Configuração – GC 
deve suportar a capacidade de gerenciar incrementos menores de 
trabalho e o aumento na taxa de mudança. GC para ágil não é GC 
mínimo, mas GC que pode lidar com identificação e controle rápidos a 
fim de manter o ritmo acelerado de mudança e, ao mesmo tempo, 
minimizar o esforço no gerenciamento da mudança. Embora seja mais 
uma função de gerenciamento de produto ou gerenciamento de 
liberação, o GC precisa estar pronto para acomodar as partes menores 
de trabalho e maior taxa de mudança. Normalmente, isso significa que 
há mais entregas incrementais (internas e externas) com a implicação 
de uma maior necessidade de automação, ajustes na ramificação e uma 
necessidade mais forte de mesclagem automatizada (mais sobre isso 
em breve). 
Construir continuamente: Em uma metodologia de desenvolvimento 
tradicional com ciclos de lançamento mais longos, a construção do 
código normalmente não começa até a fase de desenvolvimento e a 
construção frequentemente pode ser semanal com algumas equipes 
reduzindo isso paravárias vezes por semana ou até mesmo todas as 
noites. Em uma metodologia ágil, os builds devem ser contínuos, 
significando com a frequência diária ou noturna e mais tipicamente 
após cada check-in (ou promoção) no fluxo de integração. Além disso, é 
essencial que uma construção bem-sucedida ocorra no espaço de 
trabalho privado com as mudanças locais e a última linha de base do 
código do pai ou fluxo de apoio antes de promover ou verificar o código 
para o fluxo pai (observe, esta é uma boa prática independentemente da 
metodologia de desenvolvimento utilizada). 
A capacidade de realizar compilações contínuas também implica que 
você tenha as ferramentas e os processos adequados para gerenciar essa 
frequência. Implementar ferramentas de construção como Cruise 
Control ou Build Forge (e existem muitas outras) ajudará a conseguir 
isso. Outra opção é criar um script de função de construção no check-in. 
Além disso, há uma forte necessidade de entender a prática de 
construção atual e adaptá-la com os tipos de construção que são 
necessários (privado, compartilhado, integração, liberação) e níveis de 
construção (componente, produto etc.). Isso ajuda a determinar onde 
estão os gargalos – logo, onde estão os resíduos. 
MOREIRA, 2008, p. 2-3 
Pense menor: Um dos principais focos do Ágil é pensar em iterações 
menores e incrementos de trabalho. A Gestão de Configuração – GC 
deve suportar a capacidade de gerenciar incrementos menores de 
trabalho e o aumento na taxa de mudança. GC para ágil não é GC 
mínimo, mas GC que pode lidar com identificação e controle rápidos a 
fim de manter o ritmo acelerado de mudança e, ao mesmo tempo, 
minimizar o esforço no gerenciamento da mudança. Embora seja mais 
uma função de gerenciamento de produto ou gerenciamento de 
liberação, o GC precisa estar pronto para acomodar as partes menores 
de trabalho e maior taxa de mudança. Normalmente, isso significa que 
há mais entregas incrementais (internas e externas) com a implicação 
de uma maior necessidade de automação, ajustes na ramificação e uma 
necessidade mais forte de mesclagem automatizada (mais sobre isso 
em breve). 
Construir continuamente: Em uma metodologia de desenvolvimento 
tradicional com ciclos de lançamento mais longos, a construção do 
código normalmente não começa até a fase de desenvolvimento e a 
construção frequentemente pode ser semanal com algumas equipes 
reduzindo isso para várias vezes por semana ou até mesmo todas as 
noites. Em uma metodologia ágil, os builds devem ser contínuos, 
significando com a frequência diária ou noturna e mais tipicamente 
após cada check-in (ou promoção) no fluxo de integração. Além disso, é 
essencial que uma construção bem-sucedida ocorra no espaço de 
trabalho privado com as mudanças locais e a última linha de base do 
código do pai ou fluxo de apoio antes de promover ou verificar o código 
para o fluxo pai (observe, esta é uma boa prática independentemente da 
metodologia de desenvolvimento utilizada). 
A capacidade de realizar compilações contínuas também implica que 
você tenha as ferramentas e os processos adequados para gerenciar essa 
frequência. Implementar ferramentas de construção como Cruise 
Control ou Build Forge (e existem muitas outras) ajudará a conseguir isso. 
Outra opção é criar um script de função de construção no check-in. Além 
disso, há uma forte necessidade de entender a prática de construção 
atual e adaptá-la com os tipos de construção que são necessários 
(privado, compartilhado, integração, liberação) e níveis de construção 
(componente, produto etc.). Isso ajuda a determinar onde estão os 
gargalos – logo, onde estão os resíduos. 
MOREIRA, 2008, p. 2-3 
 
2 - 
Material Complementar 
 
https://alt-5d152e0e8981d.blackboard.com/bbcswebdav/pid-10273310-dt-content-rid-134566423_1/courses/3610_12_40_BACKUP/3610_12_40_BACKUP/materialReferencial/materialDidatico/un_I/flip/index.html#/lessons/YZrn56Vp_C3rK_RUEeKhwyHQmFflOjvX
https://alt-5d152e0e8981d.blackboard.com/bbcswebdav/pid-10273310-dt-content-rid-134566423_1/courses/3610_12_40_BACKUP/3610_12_40_BACKUP/materialReferencial/materialDidatico/un_I/flip/index.html#/lessons/YZrn56Vp_C3rK_RUEeKhwyHQmFflOjvX
https://alt-5d152e0e8981d.blackboard.com/bbcswebdav/pid-10273310-dt-content-rid-134566423_1/courses/3610_12_40_BACKUP/3610_12_40_BACKUP/materialReferencial/materialDidatico/un_I/flip/index.html#/lessons/YZrn56Vp_C3rK_RUEeKhwyHQmFflOjvX
https://alt-5d152e0e8981d.blackboard.com/bbcswebdav/pid-10273310-dt-content-rid-134566423_1/courses/3610_12_40_BACKUP/3610_12_40_BACKUP/materialReferencial/materialDidatico/un_I/flip/index.html#/lessons/YZrn56Vp_C3rK_RUEeKhwyHQmFflOjvX
Material Complementar 
2 / 3 
Indicações para saber mais sobre os assuntos abordados 
nesta Unidade: 
Vídeos 
Controle de versão – Versionamento Centralizado e Distribuído 
Aprenda sobre controle de versão e como funciona o controle de versão 
centralizado e o descentralizado (distribuído). 
Gerência de Configuração – Introdução e Conceitos 
Introdução ao versionamento de código 
Gestão ágil de projetos com os superpoderes do Trello 
Chegar para trabalhar bem cedinho no escritório e descobrir que você 
tem notificações em meia dúzia de ferramentas diferentes para 
responder, como Slack, e-mail, Google Sheets e até sua ferramenta de 
CRM pode ser um tanto frustrante. Para acabar com essa mudança de 
contexto, você pode usar o Trello como um verdadeiro hub para 
trabalhar com todas as ferramentas que você e seu time usam de forma 
colaborativa. Em um só lugar, sem ter que fazer login em todas elas. 
 
3 - 
Referências 
 
 
https://alt-5d152e0e8981d.blackboard.com/bbcswebdav/pid-10273310-dt-content-rid-134566423_1/courses/3610_12_40_BACKUP/3610_12_40_BACKUP/materialReferencial/materialDidatico/un_I/flip/index.html#/lessons/qIQ2WMJY4i_1GZxI-uMNkB-uMSxBlxXb
https://alt-5d152e0e8981d.blackboard.com/bbcswebdav/pid-10273310-dt-content-rid-134566423_1/courses/3610_12_40_BACKUP/3610_12_40_BACKUP/materialReferencial/materialDidatico/un_I/flip/index.html#/lessons/qIQ2WMJY4i_1GZxI-uMNkB-uMSxBlxXb
https://alt-5d152e0e8981d.blackboard.com/bbcswebdav/pid-10273310-dt-content-rid-134566423_1/courses/3610_12_40_BACKUP/3610_12_40_BACKUP/materialReferencial/materialDidatico/un_I/flip/index.html#/lessons/qIQ2WMJY4i_1GZxI-uMNkB-uMSxBlxXb
https://alt-5d152e0e8981d.blackboard.com/bbcswebdav/pid-10273310-dt-content-rid-134566423_1/courses/3610_12_40_BACKUP/3610_12_40_BACKUP/materialReferencial/materialDidatico/un_I/flip/index.html#/lessons/qIQ2WMJY4i_1GZxI-uMNkB-uMSxBlxXb

Mais conteúdos dessa disciplina