Результат: ученик превращает наблюдаемый дефект в воспроизводимое исследование, локализует первую инструкцию, нарушившую ожидаемое состояние, и подтверждает минимальное исправление регрессионным набором.

Содержание:

  1. Зафиксировать симптом

    • конкретный вход;
    • ожидаемый результат;
    • фактический результат;
    • версия программы и среды;
    • стабильность повторного воспроизведения;
    • различие симптома и причины.
  2. Сформулировать проверяемые гипотезы

    • предполагаемая область дефекта;
    • наблюдаемое выражение, различающее гипотезы;
    • минимальное число необходимых наблюдений;
    • приоритет проверки простых и ранних причин;
    • отказ от случайного изменения кода.
  3. Выбирать точки останова

    • перед подозрительным переходом;
    • на входе в метод;
    • перед возвратом;
    • внутри цикла на определённой итерации;
    • граница между двумя методами;
    • условная остановка средствами среды на обзорном уровне.
  4. Использовать основные средства отладчика

    • Step Into;
    • Step Over;
    • Step Out;
    • Locals;
    • Watch;
    • Call Stack;
    • наблюдение массива, структуры и nullable-значения.
  5. Искать первое неверное состояние

    • последнее состояние, соответствующее инварианту;
    • первая инструкция, после которой ожидание нарушено;
    • переход между двумя состояниями;
    • отделение ранней причины от позднего повреждения;
    • фиксация значений до и после инструкции.
  6. Отлаживать типичные механизмы

    • неверная инициализация;
    • неверная граница;
    • неправильный порядок ветвей;
    • потеря меры прогресса;
    • переполнение;
    • координата не того измерения;
    • изменение копии вместо исходного значения;
    • общий объект или накопленное состояние между вызовами.
  7. Исследовать незавершимость и аварийное завершение

    • повторяющееся состояние цикла;
    • пропущенное изменение;
    • неуменьшающаяся рекурсия;
    • выход за индекс;
    • исключение без перехвата;
    • состояние непосредственно перед отказом.
  8. Строить минимально воспроизводимый пример

    • сокращение входа;
    • удаление несущественных методов;
    • сохранение механизма дефекта;
    • один проект и один сценарий;
    • сравнение сокращённой и полной программы.
  9. Проверять сам эталон

    • корректность ожидаемого результата;
    • числовой допуск;
    • предусловия контрольного примера;
    • соответствие спецификации;
    • случай, когда программа верна, а проверка ошибочна.
  10. Устранять причину минимально

    • одна правка для одного доказанного механизма;
    • отказ от ветви, скрывающей симптом;
    • сохранение исходного алгоритма, если его исследование является целью;
    • повторная трассировка после исправления;
    • возможность обнаружения второго дефекта.
  11. Строить регрессионный набор

    • исходный дефектный пример;
    • соседние границы;
    • пустой и минимальный вход;
    • случай, на котором ошибочная версия случайно проходила;
    • полный повтор ранее подтверждённых сценариев.
  12. Оформлять карточку отладки

    • симптом;
    • вход и ожидание;
    • гипотезы;
    • последнее правильное и первое неверное состояние;
    • механизм;
    • минимальная правка;
    • регрессионные проверки.