Quando meu colega de trabalho acha que não há necessidade de fazer um teste em seu PC, ele faz alterações, confirma e empurra. Em seguida, ele testa no servidor de produção e percebe que cometeu um erro. Isso acontece uma vez por semana. Agora vejo que ele fez 3 confirmações e empurra a implantação para o servidor de produção em 5 minutos.
Eu disse a ele algumas vezes que não é assim que o bom trabalho é feito. Eu não quero ser rude com ele novamente e ele está no mesmo status que eu na empresa e ele trabalhou mais do que eu aqui.
Quero que esse comportamento seja punido de alguma forma ou o torne desagradável, tanto quanto possível.
Antes de começar, a empresa estava implantando usando métodos antigos, como FTP, e não havia controle de versão.
Eu os forcei a usar Git, Bitbucket, Dploy.io e HipChat. A implantação não é automática, alguém precisa fazer login no dply.io e pressionar o botão de implantação.
Agora, como forçá-los a não testar no servidor de produção? Algo como o HipChat bot pode perceber que há edições repetidas na mesma linha e enviar um aviso ao programador.
fonte
Respostas:
Você precisa de um processo de garantia de qualidade (QA) adequado.
Em uma equipe profissional de desenvolvimento de software, você não passa do desenvolvimento para a produção. Você tem pelo menos três ambientes separados: desenvolvimento, preparo e produção.
Quando você acha que tem algo trabalhando em seu ambiente de desenvolvimento, você passa para a preparação primeiro, onde cada confirmação é testada pela equipe de controle de qualidade e, somente se esse teste for bem-sucedido, ele será enviado para produção. Idealmente, o desenvolvimento, teste e envio à produção são realizados por pessoas separadas. Isso pode ser garantido configurando o sistema de automação de construção de uma maneira que os desenvolvedores possam implantar apenas do desenvolvimento à preparação e que a equipe de controle de qualidade possa implantar apenas da preparação para a produção.
Quando você não consegue convencer a gerência a contratar alguém para fazer seu controle de qualidade, talvez um de vocês possa desempenhar esse papel pelo outro. Nunca trabalhei com o diploy.io, mas alguns sistemas de automação de construção podem ser configurados de maneira que um usuário possa implantar do desenvolvimento ao teste e do teste à produção, mas não faça os dois para a mesma construção, portanto, uma segunda pessoa está sempre necessário (mas verifique se você tem algumas pessoas de backup nos momentos em que um de vocês está ausente).
Outra opção é fazer com que sua equipe de suporte faça o controle de qualidade. Isso pode parecer um trabalho adicional para eles, mas também garante que eles estejam cientes de quaisquer alterações no aplicativo que possam garantir algum trabalho a longo prazo.
fonte
Você provavelmente desejará obter um servidor de desenvolvimento e, de preferência, um ambiente de teste também. Ninguém deve passar do local para a produção, exceto pelo site pessoal. Seu processo de implantação deve suportar apenas dev-> staging-> prod. Você provavelmente quer alguém responsável por assinar novos lançamentos - dependendo da organização, isso pode ser um líder de projeto, um controle de qualidade dedicado ou um dever que gira a cada semana (com um lembrete tangível, por exemplo, apenas a pessoa com o brinquedo macio da semana chega a empurrar). No entanto, converse com sua equipe primeiro para obter o buy-in (veja abaixo).
Você pode ter seu conjunto de testes (você tem um desses, certo?) Inclui uma verificação que determina se você está em um servidor de produção e, se houver, envia a todos no escritório um e-mail dizendo
Looks like $username is testing on prod, watch out
. Talvez envergonhar publicamente seu colega seria desagradável. Ou você pode criar restrições técnicas, como proibir IP sua equipe de ver prod (que você pode levantar, mas precisa justificar).Eu não recomendo, porém, você pareceria o problema, não a pessoa que está testando o produto e você pode se tornar muito impopular com as pessoas da equipe que não se importam.
Certamente o que você realmente deseja não é que esse comportamento seja punido, mas que ele pare ?
É ótimo que você esteja advogando melhorias no fluxo de trabalho, mas parece que você não pensa muito em seus colegas e / ou não tem o apoio total deles. Isso provavelmente resultará em colegas interagindo de maneira meio aquecida com o fluxo de trabalho, fazendo o mínimo necessário para inserir código na produção e não seguindo realmente o espírito do fluxo de trabalho, o que significará mais tempo gasto na limpeza. E quando você gasta cada vez mais tempo limpando os resultados de uma interação inadequada com o fluxo de trabalho (porque ninguém mais se importa, certo?), Todos os outros questionam o próprio fluxo de trabalho.
Então comece com uma conversa.
Descubra por que isso está acontecendo (a máquina do seu colega não é tão boa para testes? O seu colega está incerto com ramificações de recursos ou preso em uma mentalidade svn em que commit e push são iguais?), Explique por que é um problema para você o código não testado em dev / staging / prod e veja se você pode fazer algo para mudar o porquê disso acontecer (é mais provável que seu colega faça o que você deseja se você acabou de tornar mais agradável testar localmente do que se você apenas os repreendeu).
Se você não conseguir resolvê-lo e isso realmente resultar em uma diferença de opinião, agende uma discussão em toda a equipe em sua próxima reunião retrospectiva, veja o que seus colegas fazem e pensam. Faça o seu caso, mas ouça o consenso. Talvez sua equipe afirme que não há problema em testar correções de texto localmente, e você só tem uma regra de que nenhum recurso importante é testado no desenvolvedor. Anote na reunião e leia o que você decide coletivamente sobre o que é permitido em cada um dos ambientes. Defina uma data em alguns meses para revisá-la, talvez em retrospectiva.
fonte
No trabalho, evitamos isso usando o Gerrit . O Gerrit é um sistema de revisão de código que atua como uma porta para o seu ramo principal / de produção do Git, que é convencionalmente chamado de "mestre". Você tem análises de código, certo? Parece que você pessoalmente os faz excepcionalmente. Com o Gerrit, você avança para uma espécie de ramificação temporária que, após você e seu colega de trabalho executarem o processo de revisão de código de forma satisfatória, a Gerrit se funde com a ramificação principal. Você pode até conectar o Gerrit a um servidor de IC para executar testes de unidade antes que alguém receba um email para revisar uma alteração. Se você não possui um servidor, pode configurar uma ferramenta de IC, a Codeship possui um bom plano gratuito para usar como prova de conceito.
Por último, é claro, é automatizar as implantações de produção apenas a partir de produtos de construção sancionados que sobreviveram à revisão de código e ao teste de unidade. Existem algumas tecnologias interessantes surgindo para isso, as quais não mencionarei por medo de serem iscas de chama.
Vá ao seu chefe com uma solução. Este se aplica até a você e é uma maneira de melhorar a qualidade do código de todos, e não apenas punir seu colega de trabalho.
fonte
Eu vejo isso como um problema amplamente humano - o processo está lá e as ferramentas estão lá, mas o processo simplesmente não está sendo seguido.
Eu concordo com o que os outros disseram aqui, sobre a possibilidade de que o desenvolvedor em questão esteja apenas preso à mentalidade do SVN e possa pensar que ele está seguindo o processo.
Acho que a melhor maneira de lidar com esse tipo de problema, especialmente quando pode não haver um superior claro, não gira em torno da punição ou da remoção do acesso - isso apenas leva ao ressentimento e parece que você é o grande defensor de seguir o processo (sempre existe um, e eu já estive 'esse cara' antes), é você quem provavelmente aguenta mais calor. Ele gira em torno de levar as pessoas a concordar com o processo primeiro.
É aqui que reuniões estruturadas, como reuniões do tipo "lições aprendidas" após um grande incidente na produção, podem ser muito úteis. Tente fazer com que todos concordem, incluindo o desenvolvedor em questão, que a revisão do código, o teste de unidade, o teste abrangente etc. tudo precisa acontecer sempre (e você pode começar a apresentar aqui também a ideia de um ambiente de teste). Não deve ser difícil e é muito sensato. Depois, peça à equipe que elabore algumas regras sólidas, sobre como isso deve ser feito. Quanto mais o desenvolvedor que está causando o problema contribuir, mais eles sentirão vontade de seguir as regras e começarão a ver por que seu comportamento foi um problema.
O ponto final é nunca cair no "bem, é melhor do que costumava ser!" armadilha. Há sempre espaço para melhorias. É comum que, na minha experiência, as pessoas do setor de TI comecem a se contentar com o que têm, depois de algumas melhorias. O estabelecimento então continua, até que você de repente está em um ponto de crise novamente.
fonte
Isso não é incomum , principalmente em equipes pequenas. Não faça muita coisa a respeito, mas faça uma regra informal:
Quebrar a construção, trazer donuts.
1) Você receberá rosquinhas duas vezes por semana ou 2) elas seguirão o padrão.
Traga isso para uma reunião. Não é acusador, não mencione ninguém pelo nome, mas algo parecido com "Desde que introduzimos os padrões de controle de versão e implantação, as coisas se tornaram muito mais fáceis e o servidor ficou mais tempo do que costumava ser. Isso é ótimo! No entanto, ainda é tentador usar um atalho e enviá-lo sem testes adequados.É uma aposta e nosso servidor está em jogo.Eu sugiro que, a partir de agora, se algum de nós enviar código que quebre o servidor, a pessoa responsável entrará rosquinhas para a equipe no dia seguinte. "
Substitua outra coisa por rosquinhas, se desejado, e não a torne cara - o almoço para toda a equipe seria demais, mas uma caixa de US $ 5 de rosquinhas ou bandeja de frutas / legumes ou batatas fritas e salgadinhos, etc, etc. provavelmente seria irritante o suficiente para fazê-los realmente pesar o risco com a conveniência de pular os testes sem torná-lo um fardo que os afastaria da equipe ou empresa.
fonte
Em vez de forçar seus colegas, tente fazê-los ver as coisas da sua perspectiva. Isso tornará as coisas muito mais fáceis para todos. O que me leva a ...
Por que é uma dor para você com problemas no servidor ativo, mas não para esse cara? Você sabe algo que ele não sabe? O que você pode fazer para fazê-lo ver as coisas do jeito que você vê?
Se você conseguir isso, você trará o melhor dele e ele encontrará soluções para o problema que você nunca imaginou.
Em geral, tente trabalhar em conjunto com as pessoas para resolver problemas, em vez de forçá-las a processos que não compreendem.
fonte
Qual é o pior que poderia acontecer? Você tem backups suficientemente bons para que um bug que modifique registros aleatórios no seu banco de dados possa ser corrigido restaurando uma versão antiga?
Digamos que você tenha um bug no qual usa um ID de registro e, por engano, o valor de uma conta em centavos é armazenado em uma variável usada para o ID de registro. Portanto, se eu pagar $ 12,34, o registro com o ID 1234 será modificado. Você pode se recuperar disso, se o software for executado por algumas horas até que o bug seja detectado? (Se o registro correto e o registro 1234 forem atualizados, você o detectará apenas quando o registro 1234 for usado, para que isso possa não ser detectado por um bom tempo).
Agora pergunte ao seu desenvolvedor altamente motivado o que ele pensa sobre isso. Obviamente, ele não pode afirmar que nunca comete erros, porque o fez no passado.
fonte
Você entende claramente várias soluções técnicas e processos possíveis. A questão é como gerenciar o colega de trabalho.
Este é essencialmente um exercício de gerenciamento de mudanças.
Em primeiro lugar, gostaria de conversar com o fundador para ter certeza de que ele / ela está de acordo com o seu ponto de vista. Se houver uma queda de produção, eu esperaria que o fundador se preocupasse muito com isso e desejasse mudanças.
Em segundo lugar, você trabalha em uma equipe pequena e provavelmente vale a pena tentar envolver toda a equipe na melhoria do processo.
Configure retrospectivas de processo regulares (por exemplo, semanalmente). Tenha toda a equipe:
Deve seguir naturalmente que toda a equipe também ajuda a garantir a conformidade com as práticas aprimoradas.
fonte
Acho que você identificou alguns problemas:
Francamente, acho que essa configuração é simplesmente insana. No mínimo as pessoas que podem desencadear manualmente um impulso à produção deve ser restrito ao conjunto de pessoas que pode confiar completamente para rever cuidadosamente e testar todas as alterações de saída (independentemente de quem foi o autor das mudanças) antes de acionar o impulso. Conceder a alguém com permissão para verificar o código o poder de também arbitrariamente acionar um empurrão para a produção é apenas pedir problemas. Não apenas de desenvolvedores descuidados e / ou incompetentes, mas também de insatisfeitos ou de terceiros maliciosos que comprometem uma de suas contas.
E se você usar um processo de botão de pressão para implantar todas as alterações que receberem check-in, precisará de um conjunto abrangente de testes automatizados e pressionar o botão precisará executá-los (e abortar a implantação se qualquer teste falha!). Seu processo não deve permitir que o código que ainda não tenha sido testado superficialmente chegue ao ponto em que está sendo implantado no sistema de produção.
Seu colega de trabalho cometeu um grande erro em termos de verificação de código sem testá-lo primeiro. Sua organização cometeu um erro muito maior ao adotar um processo de implantação que permite que o código não testado alcance a produção em qualquer circunstância.
Portanto, a primeira ordem dos negócios é corrigir o processo de implantação. Limite quem pode acionar um empurrão para a produção ou incorpore uma quantidade razoável de testes ao processo de implantação automatizada, ou ambos.
Em particular, parece que você está perdendo uma " definição de feito " clara e / ou usando uma que não inclua "o código foi testado" como um fator determinante na verificação do código / implantação do código na produção. Se você tivesse isso, em vez de apenas indicar que "um bom código não é produzido dessa maneira", você poderia dizer "esse código não está cumprindo os padrões mínimos com os quais todos concordamos e precisa ser melhor no futuro".
Você deve tentar estabelecer uma cultura que comunique claramente o que é esperado dos desenvolvedores e os padrões e o nível de qualidade que eles devem manter. A definição de uma definição de feito que inclua pelo menos testes manuais (ou preferencialmente, casos de teste automatizados que podem ser executados como parte do processo de compilação / implantação) ajudará nisso. Como pode ter consequências para quebrar a compilação. Ou consequências mais graves para a quebra do sistema de produção. Observe que essas duas coisas devem ser realmente independentes e deve ser completamente impossível interromper a compilação e o sistema de produção simultaneamente (porque as compilações quebradas nunca devem ser implementáveis).
fonte
Você deve integrar um processo de Integração Contínua + Revisão por Pares na empresa. Bitbucket torna mais fácil.
E +1 no servidor de desenvolvimento sugerido por outros usuários.
Não seja rude com ele, isso só vai prejudicar sua relação de trabalho.
fonte