Somos uma grande equipe (10 a 12 desenvolvedores e 4 qa) trabalhando em vários projetos com o mesmo repositório git. É um serviço web de back-end baseado em inicialização de primavera. Estamos procurando uma boa estratégia de ramificação e implantação de git. também temos uma equipe de controle de qualidade que garante que nossos recursos funcionem conforme o esperado (sem erros até certo ponto).
Depois de ler alguns artigos, tive a sensação de que o modelo Gitflow funcionaria bem para nós. Aqui vem a minha pergunta.
Onde nossa equipe de controle de qualidade deve testar nossos recursos?
- eles devem testar na ramificação do recurso, onde irão gerar bugs e o desenvolvedor irá corrigi-lo e, uma vez aprovado no teste de controle de qualidade, fundimos. e o controle de qualidade fará novamente o teste de integração na ramificação de desenvolvimento.
- devemos mesclar todos os recursos (após testes de unidade e testes básicos do desenvolvedor) para desenvolver ramificações e deixar o teste de qa a partir daí. correções e testes também acontecerão no desenvolvimento.
Estou curioso para saber qual abordagem funcionou bem para os outros.
Ótima pergunta. Não acho que exista uma resposta correta "oficial" para isso. Depende de quão rápido você pode testar.
O problema essencial é que cada mesclagem, compilação ou mesmo implantação, potencialmente pode criar um bug. Quanto mais a cadeia você testar, mais cedo você saberá sobre os bugs, mas também terá mais vezes que testar novamente.
Para ter certeza de que você testou o software que os clientes estão usando, você realmente precisa testar a implantação ao vivo antes que o tráfego dos clientes (supondo que um aplicativo Web) seja roteado para esses servidores por meio de um padrão de implantação azul / verde.
Mas, obviamente, é um pouco tarde para ser a primeira vez que você verifica o código!
Se você testar uma ramificação de liberação em um ambiente qa, poderá correr o risco e reduzir o teste ao vivo apenas para testes de fumaça. e aplique correções de erros ao ramo de lançamento. Mas você não pode avaliar se um recurso está completo antes de criar um release
Se você testar o desenvolvimento, obterá mini ramificações de correção de bug. Os recursos ainda são mesclados antes de serem avaliados, além dos recursos para a próxima versão poderem colidir com o teste da versão atual.
Se você testar ramificações de recursos, precisará de um milhão de ambientes e terá que orquestrar a ordem das mesclagens e dos testes de aprovação. além de muitos testes.
Da minha experiência, eu recomendaria:
teste rápido da ramificação de recursos na máquina de desenvolvimento. basta garantir que seu recurso seja concluído e os testadores / desenvolvedores concordem com o que os requisitos significam.
Teste diário / teste automatizado na ramificação de desenvolvimento implantada nos servidores qa. Permite testar todos os recursos juntos e dizer quando você está pronto para o lançamento.
Se todos os recursos estiverem ativados, mas o teste não estiver concluído. por exemplo, o sprint está completo. faça uma ramificação de liberação e implante em um segundo ambiente de qa. Isso permite que a correção / teste de bug na versão 1 continue ao mesmo tempo que os recursos da versão 2.
(os devotos do scrum dirão que você deve colocar apenas correções de bugs no sprint 2, mas vamos ser práticos)
Testes de fumaça na implantação verde / azul ao vivo antes da troca. Isso é super importante, pois você encontrará erros de configuração / ambientais que ninguém realmente procura durante o desenvolvimento.
fonte
Eu concordo com Thomas Owens. Você provavelmente deveria estar testando duas vezes. Uma vez na ramificação do recurso antes de ser mesclada e uma vez na ramificação principal antes de liberar.
Na verdade, eu amo tanto o fluxo de trabalho que criei uma ferramenta, o Topico , que cria e executa automaticamente versões descartáveis do seu aplicativo para cada solicitação pull, cada uma com seu próprio URL de teste exclusivo. Isso permite que sua equipe de controle de qualidade teste ramificações de recursos isoladamente, sem a necessidade de algum tipo de ambiente de teste dinâmico configurado em sua própria máquina.
Essa abordagem significa que apenas o código que passou no teste humano chegará ao ramo principal, mantendo assim sua integridade.
Eu a introduzi em algumas empresas e isso ajudou muito nossos ciclos de lançamento. Agora, podemos agendar com precisão os lançamentos, e somos muito melhores para entender o que provavelmente fará parte do próximo lançamento e o que terá que esperar por um lançamento futuro. Apenas lhe dá muito mais confiança.
fonte