Изолируйте и докажите причину — Примеры
Пример 1 — Бисекция регрессии по коммитам
Тест, который проходил в релизе 40, падает в релизе 47. Скажите, сколько проверок нужно бисекции, и проведите её до конца.
хорошо: релиз 40 плохо: релиз 47
тест 43 -> падает -> диапазон кандидатов 41..43
тест 41 -> проходит -> диапазон кандидатов 42..43
тест 42 -> падает -> коммит 42 принёс это
Решение
семь релизов, каждый раз пополам: около 3 проверок, а не 7
диапазон 41..43 содержит 3 коммита -> не более 2 проверок дальше
результат: коммит 42, поэтому читать нужно дифф одного коммита
Проверка середины вдвое сокращает число кандидатов независимо от результата, поэтому семь релизов требуют около трёх проверок, а не семи, и ответ — один коммит, чей дифф можно прочитать целиком. Ловушка — начинать сверху и читать самые свежие изменения: это использует ту же информацию, однако выбрасывает деление пополам и предполагает, что регрессия пришла вместе с релизом, который кто-то тестировал.
Пример 2 — Ложная гипотеза, опровергнутая одним измерением
Точка входа работает 800 мс, и первая гипотеза — медленное соединение в базе данных. Измерение ниже — то, что вернулось, и по нему скажите, что предсказывала гипотеза, выжила ли она и что делать дальше.
гипотеза: соединение по orders медленное
прогноз: запрос занимает большую часть 800 мс
проверка: запрос 2 мс, обработчик 790 мс до того, как делает запрос
Решение
опровергнуто: запрос — это 2 мс из 800 мс, поэтому исключён весь слой
базы данных, а не только этот запрос.
дальше: делите пополам 790 мс до запроса. Этот код оборачивает обработчик
в помощник повторов, засыпающий на 404 от проверки состояния.
убрать повторы -> 12 мс; вернуть их -> 800 мс
Формулировка прогноза заранее и делает измерение решающим: оно исключает базу данных из пространства поиска, а это настоящий прогресс, пусть ничего ещё и не исправлено. Деление пополам того, что осталось, указывает на код, который вовсе не фигурировал в исходной истории; удаление и возврат подтверждают причину, а не просто коррелируют с ней. Ловушка — объяснение, подходящее под симптом, ведь соединение по большой таблице — ровно та догадка, которая ведёт к изменению, которое потом никто не сможет обосновать.