Отладка

Что это такое

Отладка — это систематический поиск того, почему программа ведёт себя не так, как должна. Метод короткий: воспроизведите сбой, изолируйте самое малое, что его вызывает, докажите причину вместо того, чтобы её предполагать, исправьте причину, а не симптом, и оставьте после себя тест. Трудность отладки почти всегда не техническая: она берётся оттого, что один из этих шагов пропущен и работа идёт от догадки.

Почему это важно

Время, ушедшее на отладку, — это время, не ушедшее на создание, и разница между методичным отладчиком и тем, кто угадывает, часто десятикратная. Угадывание соблазнительно, ведь каждая догадка ощущается продуктивной: вы читаете код, что-то меняете, перезапускаете. Однако догадка, оказавшаяся неверной, стоит дороже отсутствия прогресса. Она добавляет в систему изменение, которое теперь придётся учитывать. Дисциплинированный путь — воспроизвести, сжать, доказать, исправить — медленнее первые пять минут, зато к концу часа он резко быстрее.

Что в этом треке

  1. Воспроизведите, прежде чем исправлять (01-cs-fundamentals/11-debugging/01-reproduce-before-you-fix) — как превратить отчёт в детерминированное и минимальное воспроизведение, которое можно запускать когда угодно.
  2. Изолируйте и докажите причину (01-cs-fundamentals/11-debugging/02-isolate-and-prove-the-cause) — деление пространства поиска пополам, проверка по одной гипотезе за раз и исправление самой причины.

Предварительные требования

Нет.

Что читать дальше

  • Модульное тестирование (01-cs-fundamentals/10-unit-testing) — провальный тест — самое надёжное воспроизведение из существующих, и он же доказывает, что исправление держится.
  • Конкурентность и асинхронное программирование (01-cs-fundamentals/05-concurrency-async-programming) — ошибки, которые воспроизводятся один раз на тысячу запусков и требуют другого метода.
  • Сквозное тестирование (01-cs-fundamentals/26-end-to-end-testing) — воспроизведение сбоя, который виден только в собранной системе.