Информатика, 6 классОтладка4 минуты чтения
Отладка
Программа почти никогда не работает с первого раза. Поиск и устранение ошибок называют отладкой, и это отдельное умение, не менее важное, чем умение писать код.
6классТри вида ошибок
Ошибки записи ловит сама среда: она подчеркнёт незакрытую скобку и не даст запустить программу.
Второй вид проявляется при запуске. Программа останавливается и пишет, что случилось: деление на ноль, файл не найден, номер вне списка.
Труднее всего с ошибками замысла. Программа работает, но считает не то, и никакого сообщения не будет.
Три вида ошибок и чем они себя выдают
| Вид ошибки | Когда видна | Что говорит машина | Пример |
|---|---|---|---|
| Ошибка записи | до запуска | подчёркивает строку | забыта закрывающая скобка |
| Ошибка выполнения | во время работы | пишет, что случилось | деление на ноль |
| Ошибка замысла | никогда | молчит | сложили вместо вычитания |
Читай сообщение
Начинающие часто пугаются красного текста и закрывают его не читая. А там написано главное: что случилось и в какой строке.
Читать нужно с конца: последняя строка обычно говорит о самой ошибке, а верхние показывают путь, которым программа туда пришла.
Незнакомое сообщение стоит поискать целиком. Скорее всего, с ним уже сталкивались тысячи людей.
Печать значений
Самый простой и надёжный приём это печатать значения переменных по ходу работы. Вывел число до расчёта и после, и сразу видно, где оно испортилось.
Так проверяют и условия: печатают, какая ветка сработала. Часто выясняется, что программа идёт совсем не туда, куда задумано.
После отладки такие печати убирают, чтобы не мешали пользователю.
Поиск ошибки печатью
- 1Найди место, где ответ уже неверен
- 2Поставь печать значений в середине программы
- 3Запусти и посмотри, верны ли значения там
- 4Если верны, ищи ниже, если нет, ищи выше
- 5Повторяй, деля оставшийся кусок пополам
Деление пополам
Приём из предыдущего списка стоит запомнить отдельно. Он превращает поиск в игру «угадай число».
Каждая проверка отсекает половину программы. В коде из тысячи строк ошибка находится за десяток проверок.
Так же ищут неисправность электрики и врачи. Способ старый и надёжный.
Наугад
Делением пополам
Смотрим строки подряд
Проверяем середину
Тысяча проверок
Около десяти
Легко пропустить
Ошибка загнана в угол
Пошаговое выполнение
В среде есть режим, где программа выполняется по одной строке. Рядом видны значения всех переменных.
Это как замедленная съёмка. Видно, как значение меняется на каждом шаге, и в какой момент становится не тем.
Особенно полезно в циклах: сразу заметно, что счётчик уходит на один оборот дальше нужного.
Когда виноват не код
Иногда программа верна, а виноваты данные: файл в другой кодировке, лишний пробел в числе, пустая строка в конце.
Проверить это просто. Напечатай то, что программа прочитала, а не то, что ты ожидал в файле увидеть.
Разница часто оказывается неожиданной, и правка нужна не в расчёте, а в чтении данных.
Проверка на крайних случаях
Ошибки любят прятаться на границах. Пустой список, ноль, отрицательное число, самое большое допустимое значение.
Поэтому программу проверяют не только на обычных данных. Три-четыре крайних случая находят больше ошибок, чем двадцать обычных.
Тот же приём применяют к вводу от человека: что будет, если он введёт букву вместо числа.
Ошибка воспроизводится
Прежде чем чинить, ошибку нужно повторить. Пока непонятно, при каких данных она возникает, чинить нечего.
Записывают точные шаги: какие числа ввели, что нажали, что получилось. Такое описание и есть половина решения.
Если ошибка появляется через раз, дело обычно во времени, в случайных числах или в данных извне. Такие ищут дольше всего.
Не чини вслепую
Соблазн велик: поменять наугад знак или границу, вдруг заработает. Иногда действительно срабатывает, но причина остаётся неизвестной.
Через неделю она вылезет в другом месте. Поэтому правило простое: сначала понять, потом исправлять.
Объясни вслух
Есть приём, который выглядит странно, а работает. Объясни свою программу строчка за строчкой кому угодно: другу, младшей сестре, игрушечному медведю.
Проговаривая вслух, ты замечаешь несоответствие сам, ещё до ответа собеседника. Программисты называют это методом утёнка и пользуются им всерьёз.
Про написание программы читай урок «Первая программа». Про поиск ошибок в алгоритме есть урок «Ошибка в алгоритме».
Проверь себя: Программа считает сумму десяти чисел, а выдаёт сумму девяти. Где искать ошибку?
В границах цикла. Скорее всего, счётчик идёт от единицы до девяти или от нуля до девяти в языке, где нумерация начинается с единицы. Это классическая ошибка на единицу.
Короткие ответы
- Почему ошибку называют багом?
- По легенде, в старой вычислительной машине нашли залетевшего мотылька, из-за которого сбоило реле. Слово прижилось и осталось.
- Что делать, если ошибка не находится совсем?
- Отложить работу и вернуться позже или объяснить программу другому человеку вслух. Оба способа работают лучше, чем упорное разглядывание одного и того же кода.