Onde empurrar um teste que falhou?

14

Acabei de alterar as configurações de ramificação em meu repositório GitHub, para que minha ramificação [next] exija uma construção de IC de passagem através de uma solicitação pull.

Seguiu-se uma discussão com vários membros da equipe sobre falhas nos testes.

Por uma questão de contexto ...

O repositório possui uma ramificação [master] na qual somente o PR é liberado quando há uma versão, portanto [master] contém o código da última versão, independentemente de ser um major, um secundário, um hotfix, um beta, alfa / compilação de pré-lançamento.

O ramo [next] é o "padrão", onde pretendemos manter o código "release-ready"; tecnicamente, esse ramo poderia ser transferido para o [mestre] a qualquer momento e liberado.

Garfos individuais têm suas próprias ramificações de desenvolvimento e contribuem com o PR para o [próximo].

Quando eu reviso um PR não trivial, mesclarei o ramo de desenvolvimento do colaborador no meu ramo "review" e, se vir coisas que posso corrigir rapidamente, confirmará / enviará alterações e novos testes (às vezes com falha) e PR de volta ao ramo de desenvolvimento do colaborador; quando eles mesclam minhas alterações, fazem com que os novos testes com falha passem e, em seguida, pressionam, seu PR é sincronizado, e depois mesclarei o PR em [próximo].

Mas essa pergunta não é sobre passar nos testes, é sobre os que falham .


Testes com falha documentam o que precisa ser corrigido.

Bugs conhecidos devem ter testes escritos, para que possamos saber o que não está funcionando.

Tecnicamente, a lista de problemas do GitHub (filtrada por e / ou rótulos ) também faz isso. É uma boa prática também ter vários testes com falha para documentar bugs?

Uma compilação falha em [próximo] significaria que não estamos liberar-pronto ... mas, em seguida, "ser liberação-ready" é um pouco como "estar pronto" para ter filhos - você nunca está completamente pronto para isso, e algo, algum lugar (de importância variável) inevitavelmente dará errado com o lançamento.


Então, estamos apenas passando os testes para o [próximo]. Onde empurrar testes falhos, então? Quero dizer, fora do processo de PR / revisão?

Por exemplo, um usuário relata um novo bug na lista de problemas e eu gostaria de escrever um conjunto de testes com falha - para especificar o que precisa ser feito e onde, o que facilita a coleta de novos colaboradores e, eventualmente, PR uma correção.

Onde devo empurrar esses testes com falha? Ou é mesmo uma boa idéia enviar testes com falha para qualquer lugar?

Mathieu Guindon
fonte
@PhilipKendall good point! ainda estamos ajustando nosso processo; Não gosto de como o VS lança testes "ignorados" junto com testes "inconclusivos" - se um dos testes de nível inferior falhar, não queremos que metade dos testes falhe, por isso os tornamos inconclusivos quando os pré-requisitos não são atendidos ; isso faz com que os testes relatem uma falha pelos motivos certos e "inconclusivos" quando eles não podem testar para o que foram escritos. Não temos mais muitos deles, então ignorá-los pode ser uma opção ... mas, então, é um teste que falha se é ignorado ?
Mathieu Guindon
Por que parte do processo de revisão envolve você escrever algum código? Se você vir um bug, comente no PR e, opcionalmente, recuse o PR.
James
@ James, bem, eu gosto de escrever código. Além disso, à medida que mais colaboradores se juntam, eu estou fazendo mais e mais manutenção no GitHub e trabalho de relações públicas do que a codificação real!
Mathieu Guindon

Respostas:

11

O que eu faria nessa situação é marcar os testes com falha como "ignorados" - dessa forma, você ainda tem o teste para saber o que precisa corrigir no futuro, mas não vai acabar com construções quebradas .

Se você também marcar cada teste com a referência do rastreador de problemas para corrigir o problema, será uma maneira fácil de vincular as coisas.

Philip Kendall
fonte
4

Divulgação completa: Sou um dos participantes da discussão.

O ramo principal do repositório não é o ramo principal. A mesclagem no mestre não serve a nenhum "propósito real" e esse ramo não está fazendo as coisas que um ramo deve fazer (a saber, mover ).
Você está abusando deste ramo como um Tag da versão mais recente.

Em vez de usar uma ramificação, use uma tag. Quando você deseja liberar, execute as etapas necessárias em um "Release-Branch", assim como um tópico. Então você mescla isso em [next] e coloca um Tag nele.

O papel que [o próximo] cumpre é o de um ramo mestre. Somente código pronto para lançamento entra lá. Qualquer outra coisa seria um ramo [de desenvolvimento]. Uma ramificação de desenvolvimento contém trabalho que deve ser estabilizado . Isso significa: remover [mestre], redefinir [próximo] da maneira que você já fez e criar outro ramo para um trabalho "menos estável".

Como é mais uma exceção do que a regra de que precisa haver falhas nos testes, que lembram bugs pendentes, não seria um problema criar e destruir esse ramo menos estável, conforme necessário

Vogel612
fonte
1
Ter a versão mais recente no [master] facilita a ramificação da última versão para emitir um hotfix; então o hotfix pode ser enviado para [next] e de lá para cada ramificação do desenvolvedor .. ou estou faltando alguma coisa?
Mathieu Guindon
2
Você pode apenas git checkout -b HotFix ReleaseTag(ou seja, se eu me lembro do ramo criando a sintaxe do checkout corretamente). Isso deve criar uma ramificação HotFix fora do ReleaseTag
Vogel612 11/16