Метод · инженерия проверок · разбор 9 из 13
Кто проверяет проверяющих: мы сломали каждую свою проверку нарочно
Один день мы потратили не на страницы, а на приборы: у каждой проверки спросили, покраснеет ли она, если подсунуть ей ровно тот дефект, ради которого она написана. Восемь проверок из восемнадцати покрытых свой тест провалили — это 44% приборов, чьим вердиктам нельзя было верить, а мы верили. Ещё 15 остались непокрытыми и честно помечены.
Паспорт замера: Проверка 05.08.2026 · изолированное дерево от актуальной версии · новых проверок не писали, писали тесты проверок
Зачем вообще проверять проверку
Из 33 наших проверок 15 не имели теста вовсе — это 45%. Прибор, который никогда не краснеет, бесполезен ровно так же, как прибор, который краснеет всегда. Обычный тест показывает, что проверка запускается и не падает с ошибкой. Мутационный тест показывает, что она различает хорошее и плохое: вы нарочно ломаете то, что она должна поймать, и смотрите на вердикт.
33
проверки в реестре после пересчёта — было заявлено 17
10
покрыты тестом и прошли его — вердиктам можно верить
8
покрыты впервые и тест провалили
15
без теста вовсе — помечены, вердикты приняты условно
Разница между «проверка работает» и «проверке можно верить» стоит недёшево: на непроверенном приборе строится приёмка, а на приёмке — решение публиковать. Ошибка прибора не видна никогда, потому что выглядит как отсутствие дефектов.
Первое, что рассыпалось, — само число
Задача пришла с формулировкой «из семнадцати проверок мутационно доказаны пять». При пересчёте 05.08.2026 не воспроизвелось ни 17, ни 5: поимённого списка из семнадцати не существовало ни в одном файле репозитория. Число жило только в пересказе.
Поэтому знаменатель посчитали заново — и вместе с ним записали способ подсчёта, чтобы следующий получил то же число, а не своё:
Признак проверки, которую считаем гейтом
Её вердикт блокирует — ненулевой код возврата, красный статус, остановка приёмки, коммита или выкладки — либо входит в приёмочный вердикт страницы, пачки, коммита или выкладки. Сборщики данных, отчёты и аудиты гейтами не считаются: они ничего не разрешают и не запрещают.
По этому признаку получилось 33. Заодно опровергнуты ещё два утверждения из того же источника: инструмент, «не существующий ни на одной из 1124 веток», нашёлся вместе с собственными тестами — прошлый поиск шёл по списку веток вместо истории добавлений; а проверка, названная «непокрытой», не существует вовсе, и проверять там нечего.
Семь способов, которыми прибор врёт
Все 7 из 7 найдены за один день 05.08.2026 на собственных инструментах. Ни один не был виден по отчётам — отчёты выглядели здоровыми.
| Дефект прибора | Как выглядит снаружи |
|---|---|
| Правило, которое не может сработать никогда | в отчёте ноль находок по этому правилу — читается как «на сайте всё чисто» |
| Слепота к валидной разметке | проверка ждёт двойные кавычки и один порядок атрибутов; честная страница с одинарными кавычками объявляется дефектной |
| Ложные тревоги на честных страницах | исполнитель идёт чинить то, что не сломано, и портит рабочее |
| Пропуск дефекта, ради которого проверка заведена | самый дорогой случай: инструмент есть, дефект есть, вердикт зелёный |
| Тавтология: судит по слову, а не по факту | проверка ищет слово, которое сам же генератор и вставляет — вечное зелёное |
| Несведённые пороги | «прошёл проверку» у двух инструментов означает разное, и сравнивать их результаты нельзя |
| Зависимость от порядка обхода | накопитель даёт разный вердикт при разном порядке файлов — воспроизводимости нет |
Байт, которого не видно: как один символ убил проверку в 8 файлах
Самая тихая поломка дня — невидимый управляющий байт внутри регулярных выражений. Он попал в код при копировании и не отображается ни в редакторе, ни при беглом чтении. Выражение с ним перестаёт совпадать с чем-либо вообще — и проверка молча возвращает «дефектов нет».
| Файл | Что было мертво |
|---|---|
| проверка страницы | весь цикл контроля веса картинок — выражение для тега изображения не совпадало ни с одним |
| проверка воронки | казахская формулировка цены не распознавалась |
| проверка юзабилити | то же в счётчике цен |
| разбор переписок | детектор запроса коммерческого предложения |
| + четыре зеркала в переносимом наборе инструментов | те же дефекты, размноженные копированием |
Отчёт называл четыре боевых файла и семь всего. Сквозной замер по каждому файлу дерева, а не по списку шаблонов, дал 8 из 8 заражённых файлов — на 4 больше, чем называл отчёт. Это отдельный урок: список для проверки, составленный человеком, почти всегда короче реальности.
Почему это класс, а не случайность
Контроль веса картинок молчал неизвестно сколько времени, и всё это время сайт считался прошедшим проверку. Признак, по которому такое ловится, один: проверка, которая никогда ничего не находит, подозрительна сама по себе. Не «у нас всё хорошо», а «покажите мне сломанную страницу, на которой она краснеет».
Как чинили: красный тест — это дефект прибора, а не помеха
Все восемь проваленных проверок починены в тот же день, и ни один порог не подкручен ради зелёного. Правило простое: если тест покраснел, сломан прибор, а не тест. Там, где ожидание теста всё же пришлось изменить, причина записана отдельной строкой — чтобы через месяц никто не принял это за подгонку.
Результат: 18 проверок с мутационным тестом свой тест проходят, и на 5 этапах производственного конвейера открыт каскад — то есть следующая стадия запускается автоматически, потому что вердикту предыдущей теперь можно верить. Там, где теста нет, каскад по-прежнему закрыт: непроверенный прибор не получает права пропускать работу дальше.
Инструменты-фантомы: есть на одном компьютере, нет в общей версии
3 из 33 проверок, названные в описании конвейера, нашлись в рабочем дереве и в переносимом наборе, но отсутствуют в общей версии проекта — каталог с инструментами исключён из системы контроля версий. На другом компьютере или в свежей копии их нет вовсе.
Практический смысл: описание конвейера ссылается на то, чего у половины участников не существует. Конвейер при этом «работает» — у того, у кого файлы лежат локально. Это ровно та ситуация, когда система держится не на механизме, а на конкретном диске конкретного человека.
Как проверить свои проверки за один вечер
Метод не требует ни инфраструктуры, ни фреймворков — только дисциплины и 5 шагов подряд.
- Составьте реестр по признаку, а не по памяти. Что блокирует работу или входит в вердикт — то проверка. Отчёты и сборщики данных не считаются. Запишите способ подсчёта рядом с числом.
- Для каждой возьмите её же дефект и внесите нарочно. Разметка обещает вопросы — сотрите видимые вопросы. Проверка ищет цену — уберите цену. Смотрите на вердикт.
- Отдельно проверьте обратное: на заведомо здоровой странице проверка обязана молчать. Прибор, который краснеет всегда, останавливает работу и потому будет отключён первым.
- Найдите проверки, которые никогда ничего не находят. Ноль находок за всё время — либо идеальный сайт, либо мёртвое правило. Второе вероятнее.
- Не подкручивайте пороги. Красный тест — находка. Подгонка порога превращает прибор в украшение отчёта.
Что это даёт, кроме спокойствия
Возможность отличить «работа принята» от «работа выглядит принятой». Пока проверки не проверены, любой зелёный отчёт — это утверждение о приборе, а не о сайте. После проверки у каждой строки отчёта появляется вес, и спорить с ней можно только данными.
Тот же случай в журнале замеров
Продолжение темы в журнале замеров: что делать, когда проверяющий инструмент врёт, и почему «сто процентов провала» почти всегда дефект теста.
Проверить приборы на вашем проекте
Модуль приёмки на курсе начинается именно с этого: не с чек-листа, а с вопроса, можно ли верить тому, кто вам этот чек-лист заполняет.
Разбираем, какие проверки у вас реально блокируют работу, какие только выглядят таковыми, и какие молчат годами, потому что сломаны. Обычно на этом этапе находится минимум одна проверка с нулём находок за всё время.
Программа курса и модулиЧастые вопросы
Что такое мутационный тест проверки?
Это тест, где вы нарочно ломаете то, что проверка должна поймать, и смотрите, покраснеет ли она. Обычный тест показывает, что проверка запускается и не падает. Мутационный показывает, что она вообще что-то различает: прибор, который никогда не краснеет, бесполезен ровно так же, как прибор, который краснеет всегда.
Почему нельзя доверять числу из отчёта без пересчёта?
Потому что число живёт в пересказе дольше, чем в данных. Нам пришла задача «из семнадцати проверок доказаны пять» — при пересчёте не воспроизвелось ни 17, ни 5: поимённого списка из семнадцати не существовало ни в одном файле. Проверок оказалось 33, и вместе с числом мы записали способ подсчёта, чтобы следующий получил то же самое.
Что делать, если проверка провалила собственный тест?
Чинить причину, а не подкручивать порог. Красный тест — это найденный дефект прибора, а не помеха. У нас 8 проверок провалили свой тест в первый же день покрытия; все починены без единого сдвига порога, а там, где пришлось тронуть ожидание теста, причина записана отдельной строкой.
Может ли невидимый символ в коде сломать проверку?
Да, и это самый тихий вид поломки. У нас байт 0x08 попал внутрь регулярных выражений в восьми исходниках: выражение перестало совпадать с чем-либо вообще, проверка веса картинок молча возвращала «дефектов нет». В отчёте такое выглядит как здоровый сайт.
Соседние разборы
Каждый самодостаточен и начинается с вывода, а не с подводки.
Метод · приёмка
Как отличить «сделал» от «работает»: 33 класса ошибок из собственного реестра
Мы полтора месяца записывали каждый случай, когда работа считалась выполненной и не была. Получился реестр классов с обходом для каждого — от «действие по снимку» до «инструмент врёт на краю».
SEO · метод
Активная семантика: рост на позициях 8–30, за который не надо платить новыми страницами
Спрос уже подтверждён показами, страница уже в индексе. Порядок приоритета, запрет на смену адреса и правило «3% кликабельности ≈ одна позиция вверх».
Все 13 разборов
Оглавление раздела: измерение ИИ-видимости, аудит 2196 страниц, пассажная оптимизация, предел гео-страниц, тихие отказы, приёмка работы.
Обсудим ваш проект
Оставьте заявку — свяжемся в течение 15 минут в рабочее время, зададим пару вопросов и пришлём ориентир по цене и срокам. Бесплатно, без обязательств.
- 1. Заявка или квиз
- 2. Короткий созвон / переписка
- 3. Бесплатная смета и план
- 4. Договор и старт