"Информатика (в 2-х частях)", Горячев А.В., Макарина Л.А., Паволоцкий А.В., Платонова Н.С.
Отладка программы — это поиск причины ошибки и её исправление. Она нужна, когда программа не запускается, останавливается во время работы или выдаёт не тот результат, который ожидается. Ошибки находят, проверяя программу на заранее выбранных данных и сравнивая ответы. Пошаговое выполнение помогает увидеть, где именно вычисления пошли не так. После исправления программу проверяют снова, в том числе на граничных и необычных данных.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Отладка программы — процесс поиска причины ошибки и её исправления. Это не просто запуск программы, а последовательная проверка того, что она делает не так. Отладка нужна, чтобы привести работу программы в соответствие с заданием.
Ошибка программы — несоответствие её работы заданию или ожидаемому результату. Например, программа может вывести не ту сумму или неправильно обработать ноль. Понимание того, что именно считается ошибкой, помогает заранее сформулировать правильный ответ для проверки.
Тестирование программы — проверка её работы на специально выбранных исходных данных. Для каждого теста нужно знать ожидаемый результат и сравнить его с тем, что выдала программа. Так можно обнаружить ошибку, хотя одного теста недостаточно, чтобы подтвердить правильность всей программы.
Трассировка программы — последовательное наблюдение за выполнением команд и изменением значений переменных. Она помогает увидеть, как программа пришла к своему ответу, а не только узнать сам ответ. Это полезно, когда нужно найти конкретную команду, после которой вычисления пошли неверно.
Ошибку обнаруживают, запуская программу на тестовых данных и сравнивая полученный ответ с ожидаемым. Сначала ожидаемый ответ рассчитывают самостоятельно по условию задачи, иначе не с чем будет сравнить результат. Если ответы различаются, значит, программу нужно исследовать; если совпадают, это подтверждает правильность только для данного теста.
Чтобы найти причину, важно выяснить, при каких входных данных и условиях появляется сбой. Один и тот же участок программы может работать верно для одних значений и неверно для других, например из-за неверно заданной границы условия. Когда случай сбоя найден, проверяют команды, которые обрабатывают эти данные, и значения переменных в нужный момент.
Пошаговое выполнение помогает разобраться, как возник неверный ответ. После каждой команды можно посмотреть, изменились ли переменные так, как требует алгоритм. Если сравнивать их значения с ожидаемыми, получится найти первый шаг, на котором появляется расхождение; проверять всю программу одинаково подробно тогда не придётся.
Исправление одной команды не завершает работу над ошибкой, потому что причина могла быть понята неверно. Кроме того, изменённая команда может повлиять на другие части программы, которые раньше работали правильно. Поэтому после исправления запускают проверку ещё раз и сравнивают новые результаты с ожидаемыми.
Набор тестов должен проверять разные варианты работы программы, а не только самый привычный случай. Обычные данные показывают, справляется ли она с типичной задачей, а граничные проверяют поведение около предела или в особой точке. Необычные данные помогают заметить, например, неправильную обработку нуля или отрицательных чисел; разнообразие тестов повышает шанс обнаружить ошибку.
| Вид ошибки | Как проявляется | Как искать |
|---|---|---|
| Синтаксическая ошибка | Программа не принимается или не запускается из-за нарушения правил записи команд. | Проверить сообщение компьютера, написание команд, скобки и знаки. |
| Ошибка выполнения | Программа останавливается или сообщает о сбое во время работы. | Повторить запуск на проблемных данных и проверить команду, на которой произошла остановка. |
| Логическая ошибка | Программа запускается, но выдаёт неверный ответ или выполняет не то действие. | Сравнить алгоритм с командами, проверить тесты и проследить значения переменных. |
Сначала определи, как именно проявилась проблема: программа не запускается, прерывается или выдаёт неверный ответ. Это подскажет, какой способ поиска попробовать первым. Если программа запускается, но ошибается, обязательно проверь её на нескольких тестах и проследи вычисления.
Программа должна сложить числа 3 и 5, но показывает 35. Нужно выяснить, выполнила ли она сложение или соединила запись чисел. Такое возможно, если введённые значения были прочитаны как текст, а не как числа.
Ответ: возможная причина — программа соединяет текстовые представления чисел или воспринимает ввод как текст. Проверка: посмотреть тип или способ обработки входных значений, затем выполнить тест 3 и 5 и ожидать число 8.
Среднее арифметическое двух чисел находят, складывая их и деля сумму на 2. Для чисел 4 и 8 ожидается результат 6, потому что (4 + 8) / 2 = 6. Если программа отвечает неверно, нужно проследить все вычисления, а не менять формулу наугад.
Ответ: вероятная причина — команда не соответствует формуле (a + b) / 2 или переменные используются не в том порядке. Точное место ошибки покажет пошаговая проверка значений: сумма должна стать 12, а итог — 6.
Программа должна сообщать, положительное число, отрицательное оно или равно нулю. Если проверено только одно положительное число, ошибка в остальных ветвях может остаться незамеченной. Для поиска причины нужно подготовить тесты, которые проверят каждую возможную ситуацию.
Ответ: возможная причина — не учтён граничный случай x = 0 либо условия ветвления расположены неверно. Проверка на 2, −2 и 0 помогает увидеть, какая ветвь выбирается неправильно.
Считать запуск доказательством правильности. Программу могут запускать без сообщений об ошибке, хотя её ответ неверен: компьютер не всегда распознаёт неправильный алгоритм. Это путают с проверкой результата. Сверь ответ с ожидаемым хотя бы на нескольких подходящих тестах.
Проверять только один обычный набор данных. На знакомом примере программа может сработать случайно, а ошибка проявится при нуле или на границе условия. Один тест выбирают потому, что его быстрее всего выполнить. Проверь себя: предусмотрены ли отдельные тесты для каждого особого случая и ветви алгоритма?
Исправлять команду, не выяснив причину сбоя. Случайное изменение может скрыть неправильный ответ на одном примере, но оставить исходную ошибку. Так поступают, когда хотят быстрее получить ожидаемый результат, не прослеживая вычисления. Сначала найди первый неверный шаг по значениям переменных, затем исправь соответствующую команду.
Не проверять программу после исправления. Ошибка может остаться, если причина была определена неверно, или изменение может повлиять на другую часть программы. Иногда кажется, что достаточно увидеть исправленную строку. Проверь себя повторным запуском прежних тестов и добавь новые данные, особенно для соседних условий.
Для отладки нужно уметь составлять алгоритмы и записывать программы на изучаемом языке: иначе трудно понять, какой результат должен получиться и как его достичь. Понадобятся знания о переменных, командах ввода и вывода, ветвлениях и циклах, потому что именно в них могут возникать ошибки. Навык проверять программу и находить причину неверного результата пригодится при разработке любых программ. Он также помогает разбираться в более сложных алгоритмах, где ошибки труднее заметить сразу.
Чем отладка отличается от тестирования?
Тестирование — это проверка программы на выбранных данных, которая помогает обнаружить неправильную работу. Отладка включает не только проверку, но и поиск причины ошибки, а затем её исправление.
Почему программа может запускаться, но выдавать неправильный ответ?
Запуск подтверждает, что программа может начать работу, но не доказывает, что команды выполняют нужные действия. Например, в условии или формуле может быть логическая ошибка, которую компьютер сам не считает нарушением.
Как выбрать данные для проверки программы?
Возьми обычные данные, а также граничные и необычные случаи, в которых условия могут работать по-разному. До запуска определи, какой ответ должна выдать программа для каждого набора.
Что показывает трассировка программы?
Трассировка показывает выполнение программы шаг за шагом и значения переменных после выполнения команд. По ней можно заметить, на каком шаге вычисление стало отличаться от ожидаемого.
Зачем проверять программу после исправления ошибки?
Нужно убедиться, что причина сбоя устранена и программа теперь выдаёт правильный ответ. Проверка также помогает заметить, если изменение повлияло на другие части программы или появилась новая ошибка.
§ 7. Отладка программ