Услуги
Сайты и магазиныЛендинги ★Создание сайтовИнтернет-магазины
ИИ и автоматизацияИИ-секретарь ★Автоворонка и прогрев ★Telegram-боты ★Автоматизация ★CRM-разработка
ПродвижениеSEO-продвижениеAI-продвижение ★Контекстная рекламаSMM и соцсети
Наружка, печать и производствоВывески и буквыНаружная рекламаБаннеры и штендерыТипографияВизиткиШирокоформатБрендированиеОклейка автоТорговое оборудованиеМатериалы для рекламы
Дизайн и поддержкаДизайнПоддержка
КомплексDigital под ключ ★
РешенияКейсыПортфолиоЦеныО студииБлогКонтакты Обсудить проект

Сведение инструментов

Три инструмента насчитали 6, 7 и 3 цены — и все трое правы

Пока инструменты живут порознь, расхождение незаметно: у каждого свой отчёт, и каждый внутренне непротиворечив. Оно всплывает, когда два отчёта кладут рядом — обычно перед клиентом.

Замер: 9 августа 2026наш замер

Чем проверено: прогон на одной тестовой странице, мутационные тесты по кодам правил, побайтовая сверка выходов

Короткий вывод. Три наших инструмента посчитали цены на одной и той же странице и дали 6, 7 и 3. Все трое работали правильно — просто «цена» нигде не была определена формально. Разница между первым и вторым — ровно в одном числе «75»; третий резал по диапазону и схлопывал повторы. Там же нашлось расхождение поинтереснее: два способа вытащить текст со страницы дали 488 знаков против 148 — разницу в 3,3 раза никто не мерил, потому что мерить было нечем. Сведение инструментов — это не «сделать одинаково», а превратить случайные расхождения в названные.

Откуда берутся три ответа на один вопрос

Инструменты писались в разное время под разные задачи. Каждый решал свою — и каждый по-своему прав:

ИнструментНасчиталПочему именно столько
Первый6берёт всё, что похоже на сумму
Второй7то же плюс мелкое двузначное значение
Третий3режет по диапазону разумных цен и схлопывает повторы

Пока эти инструменты живут порознь, расхождение незаметно: у каждого свой отчёт, и каждый отчёт внутренне непротиворечив. Оно всплывает в тот момент, когда два отчёта кладут рядом — обычно перед клиентом.

Опасен не сам разброс, а его безымянность. «Инструменты дают разное» — повод для спора. «Первый берёт любую сумму, третий — только из диапазона цен и без повторов» — это уже спецификация: можно выбрать нужный и объяснить выбор. Разброс не исчезает, он перестаёт быть случайным.

Код, который выглядит работающим

Сплошной разбор того же конвейера дал класс, который стоит знать всем: код на месте, комментарий обещает работу, работы нет.

  1. Отсечка, которая ничего не отсекала. Стояло условие «пропустить значения меньше 30». Но шаблон, по которому значения вообще попадали в обработку, требовал от трёх цифр — то есть двузначное число не могло дойти до этой проверки в принципе, а трёхзначное всегда больше 30. Условие не срабатывало никогда. Комментарий рядом при этом обещал фильтрацию по реальным ценам рынка.
  2. Детектор, работавший по случайности. Он искал символ, которого в очищенном от разметки тексте не бывает. На странице, свёрстанной в одну строку, он не сработал бы вовсе. Завели его после настоящего случая на шестнадцати страницах — то есть проблема была реальной, а защита от неё держалась на совпадении.
  3. Дважды скопированный блок в одном файле — две почти одинаковые версии одной логики в тридцати строках друг от друга.
Почему это переживает любые ревью. Такой код не падает и не выдаёт ошибок. Он проходит проверки, читается осмысленно и годами живёт в продукте. Единственный способ его найти — прогнать проверку на заведомо дефектном образце и посмотреть, покраснеет ли она.

Как мы это чиним: считать по кодам правил, а не по сумме

Главный приём, который сработал, — мутационные тесты с раздельным учётом. Идея простая: берём заведомо дефектный образец, ломаем в нём одну конкретную вещь и проверяем, что покраснело именно то правило, которое за неё отвечает.

Как считатьЧто видно
Суммарно: «сработало N проверок»отключение одного детектора маскируется срабатыванием соседнего — прибор молчит, а отчёт зелёный
По кодам правил отдельновидно, какое именно правило перестало работать

На нашей проверке это 50 тестов, все зелёные, с разбивкой по шести кодам правил. На казахской странице девять признаков проверяются поимённо — потому что условие «сработало не меньше N признаков» зеленело бы даже при полностью слепом конкретном детекторе.

И последний шаг, без которого рефакторинг не считается закрытым: сверка выходов до и после побайтово. У нас девять файлов из двенадцати изменились, три совпали — и ни одного необъяснённого изменения. Формулировка «вроде работает так же» здесь не проходит.

Что забрать себе

  • Если один вопрос считают несколько инструментов — сравните их на одном образце. Не для того, чтобы выбрать победителя, а чтобы назвать разницу.
  • Проверьте, доходит ли поток до ваших условий. Отсечка, стоящая после фильтра, который её обесценивает, — самый частый мёртвый код.
  • Мутационные тесты считайте по правилам отдельно. Сумма скрывает выключенный детектор.
  • После рефакторинга сверяйте выход побайтово и объясняйте каждое расхождение.

Источники материала

  • Аудит конвейера обработки страниц: сравнение парсеров на тестовой странице, расхождение способов извлечения текста, разбор мёртвых условий и дублированного блока.
  • Тот же документ, раздел мутационного тестирования: раздельный учёт по кодам правил, поимённая проверка признаков, сверка выходов до и после.
  • Инвентарь замеров: сюжет о трёх инструментах, насчитавших разное число цен на одной странице.

Седьмой модуль курса — сведение инструментов

Как сравнить свои проверки на одном образце и назвать разницу вместо спора о том, кто прав. Там же — мутационные тесты с раздельным учётом по правилам: сумма скрывает выключенный детектор.

Программа курса и цены
Соседние материалы
Предыдущий замер: Что у нас реально сработалоСледующий замер: Норма в четырёх версияхВсе материалы журнала

Обсудим ваш проект

Оставьте заявку — свяжемся в течение 15 минут в рабочее время, зададим пару вопросов и пришлём ориентир по цене и срокам. Бесплатно, без обязательств.

  1. 1. Заявка или квиз
  2. 2. Короткий созвон / переписка
  3. 3. Бесплатная смета и план
  4. 4. Договор и старт

Бесплатно и ни к чему не обязывает. Ответим за 15 минут.