На Горох
Информатика, 7 класс

§ 7. Отладка программ

"Информатика (в 2-х частях)", Горячев А.В., Макарина Л.А., Паволоцкий А.В., Платонова Н.С.

Объяснение темы В оглавлении: § 7. Отладка программ

Кратко о теме

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

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Отладка программы — процесс поиска причины ошибки и её исправления. Это не просто запуск программы, а последовательная проверка того, что она делает не так. Отладка нужна, чтобы привести работу программы в соответствие с заданием.

Ошибка программы — несоответствие её работы заданию или ожидаемому результату. Например, программа может вывести не ту сумму или неправильно обработать ноль. Понимание того, что именно считается ошибкой, помогает заранее сформулировать правильный ответ для проверки.

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

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

Как это устроено

Ошибку обнаруживают, запуская программу на тестовых данных и сравнивая полученный ответ с ожидаемым. Сначала ожидаемый ответ рассчитывают самостоятельно по условию задачи, иначе не с чем будет сравнить результат. Если ответы различаются, значит, программу нужно исследовать; если совпадают, это подтверждает правильность только для данного теста.

Чтобы найти причину, важно выяснить, при каких входных данных и условиях появляется сбой. Один и тот же участок программы может работать верно для одних значений и неверно для других, например из-за неверно заданной границы условия. Когда случай сбоя найден, проверяют команды, которые обрабатывают эти данные, и значения переменных в нужный момент.

Пошаговое выполнение помогает разобраться, как возник неверный ответ. После каждой команды можно посмотреть, изменились ли переменные так, как требует алгоритм. Если сравнивать их значения с ожидаемыми, получится найти первый шаг, на котором появляется расхождение; проверять всю программу одинаково подробно тогда не придётся.

Исправление одной команды не завершает работу над ошибкой, потому что причина могла быть понята неверно. Кроме того, изменённая команда может повлиять на другие части программы, которые раньше работали правильно. Поэтому после исправления запускают проверку ещё раз и сравнивают новые результаты с ожидаемыми.

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

Виды ошибок в программе и способы их обнаружения

Вид ошибкиКак проявляетсяКак искать
Синтаксическая ошибкаПрограмма не принимается или не запускается из-за нарушения правил записи команд.Проверить сообщение компьютера, написание команд, скобки и знаки.
Ошибка выполненияПрограмма останавливается или сообщает о сбое во время работы.Повторить запуск на проблемных данных и проверить команду, на которой произошла остановка.
Логическая ошибкаПрограмма запускается, но выдаёт неверный ответ или выполняет не то действие.Сравнить алгоритм с командами, проверить тесты и проследить значения переменных.

Сначала определи, как именно проявилась проблема: программа не запускается, прерывается или выдаёт неверный ответ. Это подскажет, какой способ поиска попробовать первым. Если программа запускается, но ошибается, обязательно проверь её на нескольких тестах и проследи вычисления.

Разбор задач

Сумма двух чисел выводится как 35 вместо 8

Программа должна сложить числа 3 и 5, но показывает 35. Нужно выяснить, выполнила ли она сложение или соединила запись чисел. Такое возможно, если введённые значения были прочитаны как текст, а не как числа.

  1. Определим ожидаемый результат: 3 + 5 = 8.
  2. Проверим, как хранятся введённые значения. Если это текст «3» и «5», команда соединения даст «35» вместо числовой суммы.
  3. Проверим преобразование входных данных в числа и команду, которая выполняет сложение. Затем снова запустим программу на 3 и 5 и сравним ответ с ожидаемым.

Ответ: возможная причина — программа соединяет текстовые представления чисел или воспринимает ввод как текст. Проверка: посмотреть тип или способ обработки входных значений, затем выполнить тест 3 и 5 и ожидать число 8.

Неверно вычисляется среднее арифметическое

Среднее арифметическое двух чисел находят, складывая их и деля сумму на 2. Для чисел 4 и 8 ожидается результат 6, потому что (4 + 8) / 2 = 6. Если программа отвечает неверно, нужно проследить все вычисления, а не менять формулу наугад.

  1. Запишем ожидаемую последовательность: сначала сумма 4 + 8 = 12, затем деление 12 на 2 = 6.
  2. Выполним программу пошагово и посмотрим, какие значения получают переменные после каждой команды. Сравним их с ожидаемыми: сумма должна быть 12, а результат деления — 6.
  3. Найдём первый шаг, на котором значение отличается. Проверим, не делится ли только одно из чисел на 2, не перепутаны ли переменные и указано ли деление суммы на 2.
  4. После исправления повторим тест на числах 4 и 8, а затем проверим другие данные, чтобы убедиться, что дело не только в одном примере.

Ответ: вероятная причина — команда не соответствует формуле (a + b) / 2 или переменные используются не в том порядке. Точное место ошибки покажет пошаговая проверка значений: сумма должна стать 12, а итог — 6.

Программа неверно определяет знак числа

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

  1. Выберем три теста: x = 2, x = −2 и x = 0. Ожидаемые ответы соответственно: положительное, отрицательное и ноль.
  2. Запустим программу на каждом значении и сравним ответ с ожидаемым. Если ошибка появляется при x = 0, особенно внимательно проверим, есть ли отдельная проверка равенства нулю.
  3. Проследим порядок условий. Условие «больше или равно нулю» уже включает ноль, поэтому расположенная после него проверка на равенство нулю может никогда не выполниться.
  4. Исправим порядок или границы условий и повторим все три теста. Так мы проверим, что изменение не испортило обработку положительных и отрицательных значений.

Ответ: возможная причина — не учтён граничный случай x = 0 либо условия ветвления расположены неверно. Проверка на 2, −2 и 0 помогает увидеть, какая ветвь выбирается неправильно.

Типичные ошибки

Считать запуск доказательством правильности. Программу могут запускать без сообщений об ошибке, хотя её ответ неверен: компьютер не всегда распознаёт неправильный алгоритм. Это путают с проверкой результата. Сверь ответ с ожидаемым хотя бы на нескольких подходящих тестах.

Проверять только один обычный набор данных. На знакомом примере программа может сработать случайно, а ошибка проявится при нуле или на границе условия. Один тест выбирают потому, что его быстрее всего выполнить. Проверь себя: предусмотрены ли отдельные тесты для каждого особого случая и ветви алгоритма?

Исправлять команду, не выяснив причину сбоя. Случайное изменение может скрыть неправильный ответ на одном примере, но оставить исходную ошибку. Так поступают, когда хотят быстрее получить ожидаемый результат, не прослеживая вычисления. Сначала найди первый неверный шаг по значениям переменных, затем исправь соответствующую команду.

Не проверять программу после исправления. Ошибка может остаться, если причина была определена неверно, или изменение может повлиять на другую часть программы. Иногда кажется, что достаточно увидеть исправленную строку. Проверь себя повторным запуском прежних тестов и добавь новые данные, особенно для соседних условий.

Связь с другими темами

Для отладки нужно уметь составлять алгоритмы и записывать программы на изучаемом языке: иначе трудно понять, какой результат должен получиться и как его достичь. Понадобятся знания о переменных, командах ввода и вывода, ветвлениях и циклах, потому что именно в них могут возникать ошибки. Навык проверять программу и находить причину неверного результата пригодится при разработке любых программ. Он также помогает разбираться в более сложных алгоритмах, где ошибки труднее заметить сразу.

Что запомнить

  • Отладка включает поиск причины ошибки и её исправление.
  • Тестирование помогает обнаружить ошибку, но один тест не доказывает правильность программы.
  • Ожидаемый результат теста нужно определить до запуска программы.
  • Трассировка помогает проследить выполнение команд и изменение переменных.
  • Проверяй обычные, граничные и особые случаи.
  • После исправления программы повторно запусти тесты.

Частые вопросы по теме

Чем отладка отличается от тестирования?

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

Почему программа может запускаться, но выдавать неправильный ответ?

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

Как выбрать данные для проверки программы?

Возьми обычные данные, а также граничные и необычные случаи, в которых условия могут работать по-разному. До запуска определи, какой ответ должна выдать программа для каждого набора.

Что показывает трассировка программы?

Трассировка показывает выполнение программы шаг за шагом и значения переменных после выполнения команд. По ней можно заметить, на каком шаге вычисление стало отличаться от ожидаемого.

Зачем проверять программу после исправления ошибки?

Нужно убедиться, что причина сбоя устранена и программа теперь выдаёт правильный ответ. Проверка также помогает заметить, если изменение повлияло на другие части программы или появилась новая ошибка.

Спросить по теме параграфа

§ 7. Отладка программ

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
7 класс
Учебник
"Информатика (в 2-х частях)", Горячев А.В., Макарина Л.А., Паволоцкий А.В., Платонова Н.С.