"Информатика. Учебное пособие для учреждений общего среднего образования с русским языком обучения", В. М. Котов, А. И. Лапо, Ю.А. Быкадоров, Е.Н. Войтехович
Получение решения задачи на компьютере — это запуск программы на подготовленных исходных данных и проверка результата. Даже если алгоритм кажется правильным, ошибка может появиться в его записи или в коде. Поэтому программу проверяют на тестовых наборах: заранее выбирают обычные, граничные и особые случаи, рассчитывают ожидаемые ответы и сравнивают их с результатами запуска. Если ответы расходятся, ищут причину, исправляют программу и проверяют её снова.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Получение решения задачи на компьютере — выполнение разработанной программы для исходных данных и получение результата. Иными словами, недостаточно придумать алгоритм и записать его: нужно запустить программу. Так проверяют, что компьютер действительно выполняет предусмотренные действия и выдаёт ответ.
Тестирование программы — проверка её работы на специально подобранных наборах исходных данных. Тесты позволяют увидеть, справляется ли программа с разными ситуациями, а не только с одним примером. Их подбирают так, чтобы проверить важные особенности условия задачи.
Тестовый набор данных — входные данные, для которых заранее известен или рассчитан ожидаемый результат. Такой ответ служит образцом для сравнения с тем, что выдала программа. Без него нельзя уверенно определить, правильно ли она решила задачу.
Отладка программы — поиск и исправление ошибок, обнаруженных при проверке её работы. Ошибка может быть связана с алгоритмом, кодом или неверно введёнными данными. После исправления программу запускают снова, чтобы убедиться, что ответ стал верным и исправление не нарушило работу.
После составления программы её необходимо выполнить на компьютере, потому что алгоритм и код сами по себе не гарантируют правильного решения. В рассуждении могла появиться неточность, а при записи кода можно ошибиться в условии или вычислении. Запуск показывает, как программа ведёт себя на конкретных данных, но ещё не подтверждает, что все её ответы верны. Для такой проверки нужны тесты и сравнение результатов.
Тестовые данные готовят так, чтобы проверить разные ситуации из условия задачи. Обычный пример помогает убедиться, что программа справляется с типичным случаем, но он не всегда выявляет ошибку. Поэтому добавляют граничные данные — значения на краях допустимого диапазона — и особые случаи, например равные числа или нулевое значение, если оно разрешено. Такой подбор помогает заметить ошибки, которые возникают только при определённых условиях.
Для каждого теста заранее рассчитывают ожидаемый результат, затем запускают программу и сопоставляют два ответа. Если они совпали, программа верно обработала именно этот набор данных, но это ещё не доказывает правильность для всех возможных входов. Если ответы различаются, значит, нужно искать причину: проверять ввод, рассуждение и запись алгоритма в коде. Сравнение превращает запуск в проверку, а не просто в получение числа или сообщения.
Если программа выдала неверный ответ, сначала убедитесь, что исходные данные введены без ошибки и относятся к допустимым. Затем проследите, верно ли алгоритм учитывает условие задачи, и проверьте соответствующие части программного кода. Найденную ошибку исправляют, после чего повторяют запуск и сравнивают ответ с ожидаемым. Повторная проверка нужна, потому что исправление может не устранить причину или затронуть другие случаи.
Проверка должна охватывать не только отдельные удобные примеры, но и допустимые ограничения задачи. Если во входных данных разрешены значения от 1 до 100, стоит учитывать и значения у обоих краёв диапазона, а также типичные значения между ними. За пределами условий задачи программа может вести себя иначе, но такие данные не заменяют проверку разрешённых вариантов. Чем точнее тесты отражают условие, тем надёжнее вывод о работе программы.
| Шаг | Что выполняют | Что проверяют | Результат |
|---|---|---|---|
| Подготовка теста | Выбирают входные данные | Есть ли обычные, граничные и особые случаи | Подготовлен набор тестов |
| Ввод исходных данных | Передают значения программе | Соответствуют ли они выбранному тесту | Программа получила нужный ввод |
| Выполнение программы | Запускают код | Выполняются ли действия без сбоев | Получен результат работы |
| Сравнение с ожидаемым результатом | Сопоставляют два ответа | Совпадают ли результаты | Понятно, пройден ли тест |
| Исправление и повторная проверка | Ищут и исправляют ошибку, снова запускают программу | Исчезло ли расхождение и не появились ли новые ошибки | Получено подтверждение после исправления |
Используйте таблицу как последовательность действий: переходите к следующему шагу, когда выполнен предыдущий. Для каждого теста фиксируйте ожидаемый и полученный ответы, чтобы не полагаться на память. Если они не совпали, возвращайтесь к проверке данных и логики программы, затем проходите шаги заново.
Задача 1. Программа вычисляет периметр квадрата по длине его стороны. Проверить её для стороны 5. Нужно не только запустить программу, но и заранее получить ответ, с которым можно сравнить результат. Периметр квадрата равен четырём длинам стороны, поэтому тест можно рассчитать вручную.
Ответ: для этого теста программа должна вывести 20. Если ответ другой, проверяем формулу и умножение в коде, а также правильность ввода стороны.
Задача 2. Программа находит большее из двух чисел. Составим тесты для пары с разными числами и для пары равных чисел. Первый тест проверит обычное сравнение, а второй — поведение условия при равенстве. Это важно, потому что ошибка в знаке сравнения может быть незаметна на паре разных значений.
Ответ: тесты — (3, 7) с ответом 7 и (5, 5) с ответом 5. Они проверяют два разных случая работы программы.
Задача 3. Программа определяет, принадлежит ли число заданному промежутку. Нужно проверить значение внутри него, вне его и на границах. Сначала выясняем по условию, включаются ли концы: например, для промежутка от 2 до 6 границы включены, если условие задаёт 2 ≤ x ≤ 6. Если в условии стоят строгие знаки, ответ на концах будет другим.
Ответ: набор тестов включает 1, 2, 4 и 6; для промежутка 2 ≤ x ≤ 6 ожидаемые ответы: не принадлежит, принадлежит, принадлежит, принадлежит. При другом условии о границах ответы для концов нужно изменить.
Проверять программу только на одном удобном примере — значит не заметить ошибку, которая проявляется при другом вводе. Так делают, потому что первый тест кажется достаточным, но он проверяет лишь один случай. Сверьтесь с условием и добавьте обычные, граничные и особые данные.
Считать ответ правильным только потому, что программа завершилась без сообщения об ошибке, — неверно: она могла выполнить вычисления с ошибкой. Обычно путают успешный запуск и правильное решение. Проверьте себя, рассчитав ожидаемый ответ независимо и сравнив его с результатом программы.
Не сравнивать ответ с заранее известным результатом — значит не иметь основания судить о правильности. Иногда полагаются на то, что программа «вывела число», но наличие ответа не подтверждает его точность. Для каждого теста запишите ожидаемый результат до запуска, а затем сопоставьте ответы.
Не запускать программу после исправления кода — значит оставить исправление непроверенным. Кажется, что найденная и устранённая ошибка уже решает проблему, однако в коде могла остаться другая ошибка или появиться новая. Повторите тесты, на которых обнаружили сбой, и проверьте остальные важные случаи.
До проверки решения нужно уметь сформулировать условие задачи, определить входные и выходные данные и разработать алгоритм. Без этого нельзя понять, какие значения вводить и каким должен быть правильный ответ. Этап опирается также на знание языка программирования и умение запускать программу на компьютере. Тестирование и отладка пригодятся при создании любых программ, в том числе проектов и алгоритмов, которые изучаются дальше.
Почему недостаточно просто написать программу?
В алгоритме или программном коде может быть ошибка, даже если запись выглядит верно. Только запуск на подходящих данных и сравнение ответов помогают проверить, решает ли программа задачу.
Как понять, какие тестовые данные выбрать?
Подберите данные для обычных ситуаций, а также для особых случаев и границ допустимых значений. Тесты должны охватывать разные варианты, которые могут повлиять на ход алгоритма.
Зачем заранее знать ожидаемый результат?
Он служит образцом для сравнения с ответом программы. Если ожидаемый результат неизвестен, нельзя установить, правильно ли выполнены вычисления.
Какие данные называют граничными?
Это данные, расположенные на границе допустимого диапазона или рядом с ней. Например, при проверке принадлежности промежутку полезно проверить его концы и числа непосредственно внутри и вне его.
Что делать, если программа выдаёт неверный ответ?
Сначала убедитесь, что исходные данные введены правильно, затем проверьте алгоритм и его запись в коде. После исправления снова запустите программу на тестах и сравните полученные ответы с ожидаемыми.
22.6. Получение решения задачи (этап 5)