Другая ошибка. Что-то до сих пор не так
Обновлен: Ноябрь 2007
В этом разделе будет рассказано об обнаружении логических ошибок, происходящих в определенных ситуациях.
В предыдущем разделе Что? Это не было запланировано! Поиск логических ошибок было показано, как искать и исправлять ошибки в логике. В примере кода для этого раздела все еще скрыта ошибка, которую обнаружить труднее, так как она происходит только в определенных ситуациях.
Тестирование программы
При тестировании программы на предмет того, работает ли она ожидаемым образом, программист находится в невыгодном положении. Программисту известно, как должна работать программа, поэтому маловероятно, что он сделает ошибку, которая может вскрыть логическую ошибку кода. Однако пользователь, который не знаком с программой, может и обязательно выполнит действия, которые не предполагались программистом.
Например, что случится с программой, вычисляющей мили в час путем деления числа пройденных миль на число часов пути, если пользователь введет ноль для значения часов или миль? Попробуйте сделать это и посмотрите на результат.
Практическое задание
Чтобы проверить программу
Откройте проект LogicErrors, созданный в разделе Что? Это не было запланировано! Поиск логических ошибок, предшествующем данному.
Примечание. Если он не был завершен или сохранен, необходимо вернуться назад и завершить его перед продолжением.
Нажмите клавишу F5 для запуска программы. В первом текстовом поле введите 0 (для обозначения количества минут), во втором текстовом поле введите 5 (для обозначения количества миль) и нажмите кнопку Button1.
Отобразится окно сообщения с надписью "Средняя скорость равна бесконечности".
Не закрывайте проект. В следующей процедуре будет рассказано о том, как найти логическую ошибку.
При делении 5 на 0 получается бесконечность?
В предыдущей процедуре "бесконечность" может быть совсем не тем результатом, который ожидается пользователем, но математически это правильно — 0 входит в 5 неограниченное число раз. Однако, совершенно не желательно, чтобы пользователи программы получали такой результат. Каким образом можно избежать этого?
Можно предположить, что необходимо добавить обработчик ошибок, о котором было рассказано в разделе Что делать, если что-то идет не так. Обработка ошибок. Однако, в данном случае он окажется бесполезным — результат "бесконечность" не является ошибкой, просто он нежелателен.
Поскольку вычислять скорость за 0 часов скорее всего бесполезно, один из способов исправления проблемы заключается в проверке того, не введено ли значение 0, и в последующем предупреждении пользователя, что он должен ввести большее значение. Разработчик программы также может запретить пользователю вводить отрицательные числа, так как отрицательные числа также могут привести к неверному результату.
В следующей процедуре предстоит изменить код в обработчике событий Button1_Click таким образом, чтобы функция GetMPH вызывалась только при значениях больше нуля.
Практическое задание
Чтобы исправить ошибку
В редакторе кода измените код в обработчике событий Button1_Click следующим образом:
Dim minutes As Integer = CInt(Textbox1.Text) Dim miles As Double = CDbl(Textbox2.Text) Dim hours As Double = 0 If minutes <= 0 Or miles <= 0 Then MsgBox("Please enter a number greater than zero") Else hours = minutes / 60 MsgBox("Average speed " & GetMPH(miles, hours)) End If
Нажмите клавишу F5 для повторного запуска приложения. В первом текстовом поле введите 0, и во втором текстовом поле введите 5. Затем нажмите кнопку Button1.
Появится окно сообщения, говорящее, что необходимо ввести значение больше 0. Попробуйте протестировать программу с другими комбинациями значений, пока не убедитесь в том, что ошибка исправлена.
Следующие действия
В этом разделе было рассмотрено, как найти и устранить логическую ошибку, вызывавшую непредвиденный результат. В следующем разделе будет рассказано, как использовать комментарии в коде.
Следующее занятие: Создание заметок в программах. Использование комментариев
См. также
Задачи
Что? Это не было запланировано! Поиск логических ошибок
Что делать, если что-то идет не так. Обработка ошибок
Знайте свои ошибки. Три типа ошибок в программировании
Поиск ошибок. Введение в отладку в Visual Basic