Как искать ошибку в коде: пошаговая отладка первого проекта
Редакция Школьного Университета «Синергия»
Редакционный материал об образовании и обучении
Отладка кода — поиск причины, по которой программа ведёт себя не так, как ожидается. Для начинающего полезнее менять один понятный шаг, чем сразу просить переписать весь проект. Начните с короткого описания: что сделали, что получили и что должно было произойти.
Сделайте ошибку воспроизводимой
«Корзина сломалась» — слишком общее сообщение. «При ценах 100 и 50 функция возвращает 50 вместо 150» уже задаёт проверку. Сохраните исходный ввод и повторите запуск. Если проблема возникает не каждый раз, отметьте условия: порядок действий, состояние данных, устройство или браузер. Ожидаемый результат должен опираться на требования. Иногда программа работает последовательно, но сам автор по-разному понимает правило. Поэтому перед исправлением важно согласовать, что именно считать правильным поведением.
Уменьшите пример
Рассмотрим учебную функцию с логической ошибкой. Она не падает, но вместо суммы возвращает последнее значение:
function sumPrices(prices) {
let total = 0;
for (const price of prices) {
total = price;
}
return total;
}На каждой итерации прежняя сумма заменяется очередной ценой. Для [100, 50] сначала total равно 100, затем 50. Большой интерфейс корзины не нужен, чтобы увидеть причину: достаточно маленькой функции и двух чисел.
Проверьте одну гипотезу
Гипотеза: сумму нужно увеличивать, а не заменять. Меняем одну строку и снова запускаем тот же пример:
function sumPrices(prices) {
let total = 0;
for (const price of prices) {
total += price;
}
return total;
}Теперь результат для [100, 50] равен 150. Но на одном удачном наборе проверка не заканчивается. Протестируйте пустой список и одно значение. Затем решите, какие типы ввода допустимы: строки "100" и "50" потребуют отдельного решения, а не случайной надежды на автоматическое преобразование.
Для наблюдения можно временно вывести total до и после обновления вместе с текущим price. Если вместо числа приходит строка, проверьте тип значения в месте получения данных. Удаляйте диагностический вывод после проверки, чтобы он не засорял обычную работу.
Отличайте типы ошибок
| Наблюдение | Что искать сначала |
|---|---|
| Код не запускается | Синтаксис и первую понятную ошибку сообщения |
| Возникло исключение | Строку, входные данные, состояние переменных |
| Результат неверный без исключения | Логику и соответствие требованиям |
| Проблема только после нескольких действий | Изменение состояния и порядок шагов |
Читайте сообщение ошибки целиком, но не пытайтесь сразу исправить все вторичные последствия. Одно пропущенное объявление может породить цепочку других сообщений. Не публикуйте в вопросах и скриншотах токены, пароли и персональные данные.
Как просить помощь у человека или нейросети
Покажите минимальный пример, вход, ожидаемый и фактический результат. Попросите объяснить конкретный переход, а не написать новую версию без разбора. После подсказки повторите проверку самостоятельно и добавьте один случай, которого в объяснении не было. Для подростка полезно сохранять короткий журнал: симптом, гипотеза, изменение, результат. На треке full-stack разработки такой пример можно принести преподавателю. Умение разобраться в небольшой ошибке важнее случайно заработавшего большого проекта, устройство которого автор не понимает.
Читайте также: Программирование для подростков: как выбрать курс и проверить результат.
Выберите подходящую программу и уточните условия занятий или поступления.
Программа и условиячитайте также
easycode
Списки в Python: инвентарь игры с примерами
Списки Python на игровом примере: индексы, append, remove, len, проверка наличия, перебор и типичные ошибки. Файл для самостоятельного запуска.
easycode
Godot или Unity: что выбрать для первого проекта
Godot и Unity для подростка: язык, сложность первого проекта, 2D и 3D, лицензия, оборудование и выбор курса без бесконечной смены движков.
easycode
Условия в Scratch: если и иначе на примере игры
Условия в Scratch: что проверяет блок «если», как работает «иначе» и почему проверку повторяют. Пример игры и тесты для ребёнка.