Что это такое в двух строчках
Позитивный контроль — заведомо дефектный образец, на котором проверка обязана сработать. Негативный — заведомо чистый, на котором она обязана промолчать. Оба прогоняются до того, как вы поверите хоть одному настоящему результату.
Четыре вещи, которые у нас поймал именно контроль
| Что поймано | Что было бы без контроля |
|---|---|
| Недостижимый потолок. Проверка считала полноту «из 52», фактический максимум был 50 из 52: три близких эталона схлопывались в один при нестрогом сравнении | в отчёт ушло бы «ни одна модель не дотянула до 100%» — при том что 100% недостижимы по построению |
| Две несуществующие дыры. Первые два «пропуска» обезличивателя оказались дефектом стенда: подставные значения не проходили контрольную сумму и формат | мы бы «починили» инструмент, который и до правки ловил оба класса |
| Тест, который только зеленеет. Девять проверок прогнали на непочиненном коде: зелёных 0 из 9. После фикса — 9 из 9 | девять зелёных галочек, не доказывающих ничего: они были бы зелёными и на сломанном коде |
| Неверный допуск в сравнении значений | систематический сдвиг во всех сравнениях сразу, незаметный в каждом по отдельности |
Третья строка — самая полезная для повседневной работы. Прогнать свои тесты на версии кода до исправления стоит одну команду и отвечает на единственный важный вопрос: а тест вообще ловит то, ради чего написан?
Сколько стоит контроль
Обычное возражение — «на это нет времени». Мы посчитали, потому что спорить числами дешевле.
| Вариант проверки | Цена |
|---|---|
| Быстрая, по разметке | 4,8 мс на страницу |
| Она же с дополнительной проверкой | 15,4 мс (+10,6) |
| Точная, через настоящий браузер | 430 мс на страницу, медиана 299 |
| На нашей базе в 2196 страниц | точная — ≈15,7 минуты, быстрая — +36 секунд. Разница ×40 |
Мы выбрали быструю и добавили точную выборочно — как контроль, а не как основной прогон. Итог по всему конвейеру: +15% ко времени и ноль новых зависимостей. Это и есть настоящая цена вопроса: не «в сорок раз дороже», а пятнадцать процентов, если точный прибор стоит рядом с быстрым, а не вместо него.
Экономия на контроле не бесплатна, она просто оплачивается позже. Наивный вариант одного из правил дал бы около 120 ложных красных на полной базе: на выборке из 358 страниц он показывал 52 против 30 у принятого — на 73% больше, и все лишние оказались легитимными аккордеонами и вкладками.
Правило, которое мы вывели про сам прибор
Прибор нельзя чинить в той же задаче, где по нему идёт приёмка. Когда инструмент и материал правятся вместе, невозможно сказать, что улучшилось: продукт или измеритель.
Мы разводим их по разным веткам работы: одно дерево контента, два разных дерева инструмента. Проверка результата — повторный прогон обоих: если он даёт ноль изменений, результат воспроизводим. Если даёт что-то — воспроизводимости нет, и цифры в отчёт не идут.
Что забрать себе
- Прогоните проверку на заведомо сломанном. Не покраснела — она не проверка.
- Прогоните на заведомо чистом. Покраснела — доверять её красному нельзя.
- Проверьте достижимость максимума. «Никто не дотянул до ста процентов» иногда означает, что ста процентов не существует.
- Повторите замер. Три прогона вместо одного — самая дешёвая страховка от вывода, который развалится при первой же проверке снаружи.
- Не правьте прибор и материал в одной задаче.