Сделайте так, чтобы на самом деле ничего не выпустить без исправления тестов.
- Сбой сборки, если какие-либо тесты не пройдены.
- Сбой сборки, если какие-либо тесты игнорируются.
- Сбой сборки, если охват тестами опускается ниже определенного уровня (поэтому люди не могут просто удалить тесты, чтобы обойти его).
- Используйте CI-сервер для создания своих сборок релиза и разрешайте переводить сборки только из сборки сервера на UAT / staging / production / что угодно.
Дело в том, что если ваша сборка прерывается более чем на 15 минут за раз (и это включает в себя неудачные тесты), то вы не выполняете непрерывную интеграцию .
«Ядерная опция» заключается в том, чтобы ваш сервер управления исходным кодом отказывался от фиксации / регистрации от любого пользователя, кроме того, кто нарушил сборку. Очевидно, что администратор должен иметь возможность временно отменить это, если указанный человек уходит в отпуск - но, если все знают, что вся команда испорчена, пока они не исправят свои тесты, то они решат это чертовски быстро.
Хорошей политикой (которая даже лучше, когда она автоматизирована) является возвращение источника к последней известной стабильной фиксации после 15 минут сбоя сборки. Другими словами, если вы не можете это исправить или не знаете, что привело к сбою сборки или теста, верните его и работайте локально до тех пор, пока оно не будет решено - никогда не заставляйте других разработчиков вертеть пальцами, пока вы не решите проблема, которая их не волнует.
PS Если у вас уже есть много неудачных тестов, вы можете использовать «конечный порог» в CI. Настройте его так, чтобы сборка завершалась неудачно только в том случае, если тестовых сбоев будет больше, чем в прошлый раз. Это, наряду с правилом покрытия, заставит разработчиков в конечном итоге улучшить тестовую ситуацию, если они захотят продолжать работать.
PPS Я понимаю, что некоторым это может показаться суровым, но это все в вашей культуре. Если вы попадаете в точку, когда люди просто не оставляют сборку неработоспособной или тесты не выполняются (моя команда почти никогда не делает этого, хотя мне иногда приходится им напоминать), тогда вам не нужно продолжать соблюдать самый строгий набор правил. Хотя IMO, вы всегда должны проваливать сборку на сломанном модульном тесте Интеграционные / браузерные тесты могут иногда проваливаться.