Faça com que seja impossível realmente liberar qualquer coisa sem corrigir os testes.
- Falha na construção se algum teste falhar.
- Falha na construção se algum teste for ignorado.
- Falha na compilação se a cobertura do teste ficar abaixo de um determinado nível (para que as pessoas não possam simplesmente excluir os testes para contorná-la).
- Use o servidor de IC para fazer suas compilações de release e permita apenas que as compilações da queda de compilação do servidor sejam promovidas para UAT / staging / production / o que for.
O fato é que, se sua compilação for interrompida por mais de 15 minutos por vez (e isso inclui testes com falha), você não estará fazendo a integração contínua .
A "opção nuclear" é fazer com que o servidor de controle de origem recuse as confirmações / verificações de qualquer usuário que não seja aquele que quebrou a compilação. Obviamente, um administrador precisa substituí-lo temporariamente se a pessoa sair de férias - mas, se todos souberem que toda a equipe está ferrada até que eles façam seus testes, eles resolverão isso rapidamente.
Uma boa política (que é ainda melhor quando automatizada) é reverter a fonte para a última confirmação estável conhecida após 15 minutos de falha na compilação. Em outras palavras, se você não pode corrigi-lo ou não sabe o que causou a compilação ou o teste, revertê-lo e trabalhar localmente até que seja resolvido - nunca faça outros desenvolvedores mexerem o polegar enquanto você se afasta. problema que eles não se importam.
PS Se você já tiver muitos testes com falha, poderá usar um "limite à direita" no IC. Configure-o para que a construção falhe apenas se houver mais falhas de teste do que na última vez. Isso, juntamente com uma regra de cobertura, forçará os desenvolvedores a melhorar a situação do teste, se quiserem continuar trabalhando.
PPS: Eu sei que isso pode parecer draconiano para alguns, mas tudo depende da sua cultura. Se você chegar a um ponto em que as pessoas simplesmente não deixam a compilação quebrada ou os testes falham (minha equipe quase nunca o faz, embora eu precise lembrá-los ocasionalmente), não é necessário continuar com o conjunto mais estrito de regras. Embora IMO, você sempre deve falhar na compilação em um teste de unidade quebrado. Os testes de integração / navegador podem falhar às vezes.