Faites en sorte qu'il soit impossible de libérer quoi que ce soit sans corriger les tests.
- Échec de la génération en cas d'échec des tests.
- Échec de la génération si des tests sont ignorés.
- Échec de la génération si la couverture des tests est inférieure à un certain niveau (afin que les utilisateurs ne puissent pas simplement supprimer des tests pour contourner ce problème).
- Utilisez le serveur CI pour faire vos builds de version, et autorisez uniquement les builds à partir du drop de build du serveur à être promus en UAT / staging / production / any.
Le fait est que si votre build est interrompu pendant plus de 15 minutes à la fois (et cela inclut les tests qui échouent), alors vous ne faites pas d'intégration continue .
L'option "nucléaire" consiste à demander à votre serveur de contrôle de source de refuser les validations / enregistrements de tout utilisateur autre que celui qui a interrompu la génération. De toute évidence, un administrateur doit être en mesure de passer outre temporairement si cette personne part en vacances - mais, si tout le monde sait que toute l'équipe est foutue jusqu'à ce qu'elle corrige ses tests, alors elle le résoudra rapidement.
Une bonne politique (qui est encore meilleure lorsqu'elle est automatisée) consiste à rétablir la source sur le dernier commit stable connu après 15 minutes d'échec de la construction. En d'autres termes, si vous ne pouvez pas le réparer, ou si vous ne savez pas ce qui a causé la rupture de la construction ou du test, puis revenez en arrière et travaillez localement jusqu'à ce qu'il soit résolu - ne faites jamais en sorte que d'autres développeurs tournent le pouce pendant que vous broyez un problème dont ils ne se soucient pas.
PS Si vous déjà avez beaucoup de tests ayant échoué, vous pouvez utiliser un « seuil de fuite » dans CI. Configurez-le de sorte que la génération échoue uniquement s'il y a plus d'échecs de test que la dernière fois. Ceci, associé à une règle de couverture, forcera les développeurs à éventuellement améliorer la situation de test s'ils veulent pouvoir continuer à travailler.
PPS Je réalise que cela peut sembler draconien pour certains, mais tout dépend de votre culture. Si vous arrivez à un point où les gens ne quittent pas la version cassée ou les tests échouent (mon équipe ne le fait presque jamais, bien que je doive parfois le leur rappeler), alors vous n'avez pas besoin de continuer avec l'ensemble de règles le plus strict. Bien que l'OMI, vous devriez toujours échouer la construction sur un test unitaire cassé. Les tests d'intégration / de navigateur peuvent parfois échouer.