Como impor boas / melhores práticas de controle de código fonte?


28

Eu suspeito que estou focando no problema errado, então descreverei primeiro o que acho que é o problema antes de apresentar a solução possivelmente subótima que eu imagino.

Situação atual:
Atualmente, meus colegas de trabalho confirmam suas alterações de código somente após longos períodos de tempo em grandes blocos com alterações espalhadas por todo o projeto. Acho que é um progresso, porque há pouco tempo eles colocam arquivos .zip em algum compartilhamento de rede. Ainda assim, a fusão é um pesadelo - e, francamente, eu já tive o suficiente. E também estou cansado de conversar, explicar e implorar. Isso só tem que parar - sem que eu seja constantemente o "cara mau".

Minha solução:
Como parece não haver consciência e / ou nenhum interesse nos problemas, não posso esperar que nenhum esforço dure mais do que alguns dias ... parece que, horas, eu gostaria que o servidor subversion fizesse o ranzinza.

Minha pergunta:
Estou fora da base aqui ou estou olhando para o problema errado? Parece que estou perdendo alguma coisa, e acho que estou perguntando a coisa errada, procurando ferramentas para resolver meu problema.

Devo procurar uma ferramenta para resolver esse problema ou o que devo fazer para corrigir isso?


Os problemas que eles têm ao fundar são um incentivo para que eles desejem melhorar a maneira como trabalham?
Flosculus

11
Apenas uma idéia, torná-los mesclar o código;) Mas uma coisa que me bloqueia no SVN de cometer muitas vezes é, que leva muito tempo em comparação com git, por exemplo ...
Knerd

5
Quem assume a responsabilidade de resolver conflitos depois que alguém realiza uma mesclagem?
Flosculus

Uma abordagem altamente ramificada pode oferecer o melhor dos dois mundos; se você estiver fazendo um trabalho grande em uma ramificação e mesclando regularmente a ramificação principal nessa ramificação (para que todas as mesclagens sejam pequenas), quando você finalmente mesclar a ramificação novamente para a ramificação principal, a mesclagem será trivial, mas, enquanto isso, você não obteve um estado intermediário no mestre que está quebrado ou incompletamente confuso. É mais fácil com alguns SCMs do que com outros (dependendo de quão leve é ​​a ramificação), mas pode funcionar com qualquer um deles.
Jon Hanna

Respostas:


47

Você está procurando uma solução técnica para um problema humano. Isso raramente funciona.

A razão disso é que, se os membros da equipe não aceitarem algo (nem entenderem as implicações), em vez de seguir as regras, eles tentarão contorná-los. É exatamente por isso que, por exemplo, os desenvolvedores devem aceitar e entender as regras de estilo, em vez de serem obrigados a cumprir por um verificador.

Aqui estão algumas abordagens que eu usei no passado ou que tenho em mente sem realmente ter uma oportunidade para elas na prática. Alguns podem não se aplicar ao seu caso, dependendo da posição que você ocupa em uma equipe (se você é um líder de equipe com excelente reputação, é provável que tenha uma oportunidade melhor de reforçar sua visão do que se você for um graduado que acabou de ingressar em uma equipe durante o estágio).

  1. Discuta o problema com seus colegas de trabalho e explique as consequências de grandes confirmações. Talvez eles simplesmente não entendam que fusões complicadas são uma conseqüência direta de confirmações raras, e que pequenas e frequentes confirmações facilitarão (relativamente) as fusões.

    Eu conhecia muitos programadores que estavam simplesmente convencidos de que as fusões são sempre complicadas. Eles realizavam no máximo um commit por dia, evitavam usar ferramentas poderosas, como o diff e a mesclagem automática do Visual Studio, e tinham uma péssima prática de mesclagem manual (a menos que "Take mine" sem inspeção diferencial adicional seja realmente uma boa prática). Para eles, isso não tinha nada a ver com eles e era a natureza inerente de uma fusão.

  2. Dê exemplos concretos do que está acontecendo em outras empresas (especialmente aquelas pelas quais seus colegas de trabalho têm profundo respeito). Eles podem simplesmente não ter consciência de que é um problema e estar convencidos de que um máximo de confirmação por dia é o que toda equipe faz.

    Algumas pessoas não sabem que existem equipes de 5 a 10 membros que fazem até 50 empurrões para a produção, o que se traduz em uma média de 5 a 10 confirmações por dia por pessoa. Eles podem não entender nem como isso é possível, nem por que alguém faria isso.

  3. Lidere pelo exemplo. Faça o suficiente pequeno compromete-se. Se possível, faça uma breve apresentação mostrando suas e suas mesclagens lado a lado durante uma semana (não tenho certeza se é fácil extrair esse tipo de informação de um controle de versão). Enfatize os eventuais erros que eles cometeram durante as mesclagens e compare-os com o número de erros que você cometeu (que deve ser próximo de zero).

  4. Use a técnica "Eu te disse", quando apropriado . Quando você vir seus colegas sofrendo uma fusão dolorosa, comente em voz alta que pequenas e frequentes confirmações podem tornar a fusão (relativamente) indolor.

  5. Explique que não há duração mínima para fazer uma confirmação. Uma confirmação pode até corresponder a uma pequena alteração feita em alguns segundos. Renomear um arquivo, remover um comentário obsoleto, corrigir um erro de digitação são todas as tarefas que podem ser confirmadas imediatamente.

    Os programadores não devem ter medo de fazer um pequeno commit, mas agregar muitas alterações em um grande commit.

  6. Trabalhe com indivíduos em vez de com uma equipe, quando apropriado. Se houver uma pessoa que se recusa a realizar com frequência pequenos e frequentes, converse com essa pessoa individualmente para ver por que ela está recusando.

    Eles podem fornecer razões perfeitamente válidas que podem lhe dar uma dica sobre o que está acontecendo com uma equipe. Algumas razões pelas quais eu me ouvi:

    • “Meu professor / mentor me disse que a melhor prática é fazer um compromisso por dia.” Isso não me surpreende, dado o que eu tinha que ouvir de meus professores na faculdade .

    • “Meus colegas me disseram que eu deveria fazer menos comprometimentos.” Também me disseram isso em algumas equipes e entendo o que eles querem dizer. Tínhamos um registro praticamente preenchido com meus commits (o que não é difícil de fazer quando quatro colegas de equipe nem fazem um commit por dia), o que frustrou meus colegas de trabalho.

    • “Eu pensei que pequenos commits dificultam a localização de uma revisão.” Ponto de alguma forma válido, mesmo quando a equipe se esforça para escrever mensagens de log descritivas.

    • “Não quero perder muito espaço em nosso servidor de controle de versão.” Obviamente, a pessoa não entende como as confirmações são armazenadas (nem quão barato é o espaço de armazenamento).

    • “Acho que um commit deve corresponder a uma tarefa específica.” Dado que, muitas vezes, uma tarefa corresponde a algum trabalho a ser realizado em um dia (como nos quadros de tarefas do gerenciamento visual), isso não é uma coincidência. A pessoa deve aprender a fazer a diferença entre uma tarefa em um backlog (2 a 8 horas de trabalho) e uma mudança isolada logicamente que deve ser confirmada (alguns segundos a algumas horas de trabalho). Isso também está relacionado ao ponto 5.

  7. Pesquise o motivo pelo qual a equipe não está realizando confirma com mais frequência. Você pode se surpreender com os resultados.

    Recentemente, mencionei em uma resposta diferente que a velocidade de uma consolidação é importante, e mesmo centenas de milissegundos podem levar os desenvolvedores a se comprometerem com menos frequência.

    Outras razões podem incluir:

    • Regras excessivamente complicadas para escrever uma mensagem de confirmação.

    • A regra que força o desenvolvedor a vincular a confirmação a uma tarefa de um sistema de rastreamento de erros.

    • O medo de quebrar a construção.

    • A falta de vontade de lidar com o risco de interromper a compilação agora: se você fizer um commit na sexta-feira à noite pouco antes de sair, poderá adiar o tratamento da compilação interrompida até segunda-feira.

    • O medo de fazer uma fusão.

  8. Determine se os desenvolvedores entendem que há outros benefícios a serem confirmados com frequência . Por exemplo, uma plataforma de Integração Contínua é um grande incentivo para ter confirmações frequentes , pois permite identificar com precisão onde a regressão foi introduzida .

    Prefiro a plataforma CI dizendo que eu quebrei a compilação na revisão 5023, que consiste em uma alteração de dois métodos em um arquivo que fiz quinze minutos atrás, em vez da revisão 5023, que consiste em alterações que abrangem quatro dúzias de arquivos e representam 13 horas de trabalho.


"Você está procurando uma solução técnica para um problema humano. Isso raramente funciona." - Eu sei, mas estou cansado e já cumpri todos os seus pontos. Não é o meu problema por muito mais tempo, ainda ...
VolkerK

@ VolkerK: veja minha edição (os dois primeiros parágrafos da resposta). Você tem um servidor de IC? Quando você fala com seus colegas de trabalho, como eles explicam sua falta de vontade de se comprometer com mais frequência?
Arseni Mourzenko

11
@ VolkerK Esta resposta explica muito bem. Você não tem um problema técnico. O problema é que as pessoas se recusam a seguir o procedimento.
BЈовић

11
Em direção ao ponto 3: O cliente TortoiseSVN pode criar vários diagramas que visualizam o comportamento do check-in com base em diferentes parâmetros (como tempo). Na verdade, é bastante interessante avaliá-los. Eu fazia isso com frequência nos dias em que estávamos usando SVN. stackoverflow.com/questions/412129/… :)
Aschratt

2
Agradecimentos para a entrada mas eu levei a outra rota e apenas notificou ;-)
VolkerK

-3

Uma organização que contratei no passado queria resolver esse mesmo problema e encontrou uma solução social bastante boa: os desenvolvedores não têm seus próprios computadores. A EQUIPE de desenvolvimento possui computadores, mas pode-se esperar que qualquer indivíduo trabalhe em qualquer computador de desenvolvimento em um determinado dia. Portanto, o check-in é a única maneira de garantir que você possa continuar trabalhando no que estava fazendo ontem!

Em seguida, a gerência deu a volta e, secretamente, reverteu as alterações nos computadores após o expediente, para que qualquer coisa não registrada fosse perdida. Essas "falhas simuladas do computador" só tiveram que ocorrer algumas vezes antes dos desenvolvedores entrarem.

Obviamente, é importante explicar o "porquê" das regras e o "o quê". A menos que o "porquê" seja esclarecido, eles podem simplesmente armazenar sua fonte em unidades USB ou algo assim.


4
Esta é uma maneira terrível de tratar as pessoas. O que acontece quando você pensa em algo logo antes de sair e deseja tê-lo na máquina, mas não está completo (como não constrói) para que você não queira confirmar?
user1118321

3
E é um desperdício de recursos, porque normalmente você tem um ambiente de configuração que se adapta bem às suas necessidades. Eu tive a mesma situação há muito tempo e adquiri meu próprio laptop após 4 semanas. Eu odiava todos os dias configurar tudo da mesma forma, apenas para fazer o trabalho que eu esperava.
mliebelt

11
Uau, essa é uma péssima idéia por muitas razões. Como já mencionado nos comentários acima, (1) que impede qualquer possibilidade de continuidade de dia para dia e (2) nega às pessoas a capacidade de criar ambientes dev personalizados que ficar por aqui ...
Ben Lee

11
... Mas também (3) tem o potencial de destruir horas de trabalho se alguém esquecer de fazer o check-in de código ou acidentalmente não por algum motivo e (4) demonstrar aos desenvolvedores que o gerenciamento não confia que eles sigam as regras , em vez de impor as regras de uma maneira draconiana, potencialmente tornando-o um ambiente nós-contra-eles e (5) tem o potencial de incentivá-las a contornar as regras apenas para serem produtivas.
Ben Lee.

Por favor, ninguém implementa essa idéia.
Ben Lee.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.