Изолируйте и докажите причину — Примеры

Пример 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 мс

Формулировка прогноза заранее и делает измерение решающим: оно исключает базу данных из пространства поиска, а это настоящий прогресс, пусть ничего ещё и не исправлено. Деление пополам того, что осталось, указывает на код, который вовсе не фигурировал в исходной истории; удаление и возврат подтверждают причину, а не просто коррелируют с ней. Ловушка — объяснение, подходящее под симптом, ведь соединение по большой таблице — ровно та догадка, которая ведёт к изменению, которое потом никто не сможет обосновать.