Отладка
Что это такое
Отладка — это систематический поиск того, почему программа ведёт себя не так, как должна. Метод короткий: воспроизведите сбой, изолируйте самое малое, что его вызывает, докажите причину вместо того, чтобы её предполагать, исправьте причину, а не симптом, и оставьте после себя тест. Трудность отладки почти всегда не техническая: она берётся оттого, что один из этих шагов пропущен и работа идёт от догадки.
Почему это важно
Время, ушедшее на отладку, — это время, не ушедшее на создание, и разница между методичным отладчиком и тем, кто угадывает, часто десятикратная. Угадывание соблазнительно, ведь каждая догадка ощущается продуктивной: вы читаете код, что-то меняете, перезапускаете. Однако догадка, оказавшаяся неверной, стоит дороже отсутствия прогресса. Она добавляет в систему изменение, которое теперь придётся учитывать. Дисциплинированный путь — воспроизвести, сжать, доказать, исправить — медленнее первые пять минут, зато к концу часа он резко быстрее.
Что в этом треке
- Воспроизведите, прежде чем исправлять (01-cs-fundamentals/11-debugging/01-reproduce-before-you-fix) — как превратить отчёт в детерминированное и минимальное воспроизведение, которое можно запускать когда угодно.
- Изолируйте и докажите причину (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) — воспроизведение сбоя, который виден только в собранной системе.