Como Colocar Testes Instáveis em Quarentena Sem Esconder Bugs Reais
Quarentena é a disciplina de tirar um teste sabidamente instável do caminho que bloqueia merges sem excluí-lo - de modo que o build permaneça confiável enquanto você mantém o teste na lista para corrigir.
Quando um teste é comprovadamente instável, você tem três opções ruins (ignorá-lo, excluí-lo ou deixá-lo bloquear merges) e uma boa: quarentena. Feita corretamente, ela remove o ruído sem perder a coverage.
Por que quarentena em vez de excluir ou repetir para sempre
Excluir um teste instável perde a coverage que ele fornece quando não está falhando. Repetir indiscriminadamente esconde regressões genuínas. Deixá-lo bloquear merges treina a equipe a ignorar builds vermelhos. A quarentena encontra o meio-termo: o teste ainda roda e reporta, mas seu resultado já não serve de gate para o merge.
Como colocar em quarentena
- Marque o teste (por exemplo, um marcador
quarantine/flaky) para que o runner o separe. - Rode os testes em quarentena numa faixa não bloqueante que reporta mas não derruba o build.
- Abra um ticket de rastreamento vinculado ao teste no momento em que o colocar em quarentena.
- Mantenha o teste executando para que você colete dados de com que frequência ele ainda fica instável.
Mantenha a honestidade
A quarentena deve ser temporária e visível, ou se torna um cemitério de coverage morta. Limite quanto tempo um teste pode ficar em quarentena, exponha a lista de quarentena num dashboard e exija uma decisão de corrigir-ou-excluir quando o prazo expirar. O princípio da gestão de instabilidade vale: contenha o ruído, nunca silencie o sinal.
Promovendo de volta ou removendo
Quando o não determinismo raiz é corrigido, devolva o teste à suíte bloqueante e confirme que ele é estável ao longo de muitas execuções. Se ele não puder se tornar determinístico e não testar nada único, exclua-o deliberadamente - uma remoção honesta é melhor que um fantasma permanentemente em quarentena.
Principais conclusões
- A quarentena move um teste sabidamente instável para fora do caminho bloqueante, mas o mantém rodando.
- Ela preserva a coverage sem deixar o ruído servir de gate para merges nem esconder regressões.
- Sempre acompanhe a quarentena com um ticket de rastreamento e um prazo limite.
- Promova de volta quando corrigido, ou exclua deliberadamente - nunca deixe um fantasma permanente.