Зелёный гейт, который ничего не проверил, опаснее красного
За один день нашлись три: проверка секретов зеленела на обрезанной истории, проверка зависимостей принимала пустой ответ за «уязвимостей нет», третья не запускала сравнение ни разу.
Красная проверка раздражает, но чинится. Зелёная, которая ничего не проверила, воспринимается как доказательство — и тем прочнее, чем дольше стоит.
За один день мы нашли у себя три таких.
Три случая
Проверка секретов зеленела на обрезанной истории. В окружении, где репозиторий выкачивается одним коммитом вместо всей истории, ей просто нечего было сканировать. Ответ «секретов не найдено» был честным и бессмысленным.
Проверка зависимостей принимала пустой ответ за «уязвимостей нет». Когда реестр не отвечал, вывод оказывался пустым — и разбирался как «список уязвимостей пуст». Сбой сети выглядел как хорошая новость.
Проверка тарифов сравнивала не те ключи и не выполнила сравнение ни разу. Она была написана, лежала в репозитории, входила в общий прогон и всегда была зелёной.
Общее у всех трёх: отсутствие данных было прочитано как отсутствие нарушений.
Два правила, которые из этого выросли
Первое. Новая проверка обязана быть испытана подстановкой той поломки, ради которой написана. Сломайте нарочно, убедитесь, что ловит, верните обратно. Проверка, которая ни разу не краснела, не доказала о себе ничего.
Второе. «Данных нет» — это не «нарушений нет». Второй ответ обязан говорить о себе вслух и валить прогон отдельным текстом: «проверка не проведена».
Разница видна на примере: пустая папка материалов у нас краснит отдельно — ноль файлов даёт ноль нарушений при нулевой проверке, и молчать об этом нельзя.
Третье, найденное позже
Проверка может существовать и не запускаться вовсе. Файл на месте, при ручном запуске отвечает «ок», по репозиторию кажется, что правило стерегут.
У нас так прожили три штуки, пока не появился отдельный гейт: он читает список проверок и сверяет, что каждая входит в общий прогон, а исключения перечислены поимённо с причиной.
Как проверить у себя
Три вопроса к каждой вашей проверке:
- Она когда-нибудь краснела? Если нет — сломайте что-нибудь и посмотрите.
- Что она делает, когда данных нет? Пустой ответ, недоступный сервис, обрезанный клон — каждый из этих случаев должен давать «не проведена», а не «ок».
- Она вообще запускается? Сравните список файлов проверок со списком того, что зовёт ваш прогон.
Что из этого следует
Проверка — это утверждение о коде. Как всякое утверждение, оно может быть ложным, и ложность его не видна изнутри: зелёный цвет одинаков и когда всё хорошо, и когда проверять было нечего.
Поэтому у нас каждая проверка объясняет в своей шапке, почему она существует и на каком случае обожглись. Это не документация ради документации: через полгода только по этому тексту можно понять, что именно сломается, если проверку упростить.
Такими проверками у нас держится шестьдесят с лишним правил — от границ между арендаторами до формы материалов на сайте. Как устроена документация решений — Документы.
Читайте также
Автор
Александр ЦапковОснователь Скоупворк
Веду платформу и её боевой контур сам: разработка, выкат, дежурство. Пишу о том, на чём мы обожглись, — с датами, замерами и ссылками на решения в репозитории.