Результат: ученик превращает наблюдаемый дефект в воспроизводимое исследование, локализует первую инструкцию, нарушившую ожидаемое состояние, и подтверждает минимальное исправление регрессионным набором.
Содержание:
-
Зафиксировать симптом
- конкретный вход;
- ожидаемый результат;
- фактический результат;
- версия программы и среды;
- стабильность повторного воспроизведения;
- различие симптома и причины.
-
Сформулировать проверяемые гипотезы
- предполагаемая область дефекта;
- наблюдаемое выражение, различающее гипотезы;
- минимальное число необходимых наблюдений;
- приоритет проверки простых и ранних причин;
- отказ от случайного изменения кода.
-
Выбирать точки останова
- перед подозрительным переходом;
- на входе в метод;
- перед возвратом;
- внутри цикла на определённой итерации;
- граница между двумя методами;
- условная остановка средствами среды на обзорном уровне.
-
Использовать основные средства отладчика
Step Into;Step Over;Step Out;Locals;Watch;Call Stack;- наблюдение массива, структуры и nullable-значения.
-
Искать первое неверное состояние
- последнее состояние, соответствующее инварианту;
- первая инструкция, после которой ожидание нарушено;
- переход между двумя состояниями;
- отделение ранней причины от позднего повреждения;
- фиксация значений до и после инструкции.
-
Отлаживать типичные механизмы
- неверная инициализация;
- неверная граница;
- неправильный порядок ветвей;
- потеря меры прогресса;
- переполнение;
- координата не того измерения;
- изменение копии вместо исходного значения;
- общий объект или накопленное состояние между вызовами.
-
Исследовать незавершимость и аварийное завершение
- повторяющееся состояние цикла;
- пропущенное изменение;
- неуменьшающаяся рекурсия;
- выход за индекс;
- исключение без перехвата;
- состояние непосредственно перед отказом.
-
Строить минимально воспроизводимый пример
- сокращение входа;
- удаление несущественных методов;
- сохранение механизма дефекта;
- один проект и один сценарий;
- сравнение сокращённой и полной программы.
-
Проверять сам эталон
- корректность ожидаемого результата;
- числовой допуск;
- предусловия контрольного примера;
- соответствие спецификации;
- случай, когда программа верна, а проверка ошибочна.
-
Устранять причину минимально
- одна правка для одного доказанного механизма;
- отказ от ветви, скрывающей симптом;
- сохранение исходного алгоритма, если его исследование является целью;
- повторная трассировка после исправления;
- возможность обнаружения второго дефекта.
-
Строить регрессионный набор
- исходный дефектный пример;
- соседние границы;
- пустой и минимальный вход;
- случай, на котором ошибочная версия случайно проходила;
- полный повтор ранее подтверждённых сценариев.
-
Оформлять карточку отладки
- симптом;
- вход и ожидание;
- гипотезы;
- последнее правильное и первое неверное состояние;
- механизм;
- минимальная правка;
- регрессионные проверки.

