Поделиться через


Другая ошибка. Что-то до сих пор не так

Обновлен: Ноябрь 2007

В этом разделе будет рассказано об обнаружении логических ошибок, происходящих в определенных ситуациях.

В предыдущем разделе Что? Это не было запланировано! Поиск логических ошибок было показано, как искать и исправлять ошибки в логике. В примере кода для этого раздела все еще скрыта ошибка, которую обнаружить труднее, так как она происходит только в определенных ситуациях.

Тестирование программы

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

Например, что случится с программой, вычисляющей мили в час путем деления числа пройденных миль на число часов пути, если пользователь введет ноль для значения часов или миль? Попробуйте сделать это и посмотрите на результат.

Практическое задание

Чтобы проверить программу

  1. Откройте проект LogicErrors, созданный в разделе Что? Это не было запланировано! Поиск логических ошибок, предшествующем данному.

    ms172595.alert_note(ru-ru,VS.90).gifПримечание.

    Если он не был завершен или сохранен, необходимо вернуться назад и завершить его перед продолжением.

  2. Нажмите клавишу F5 для запуска программы. В первом текстовом поле введите 0 (для обозначения количества минут), во втором текстовом поле введите 5 (для обозначения количества миль) и нажмите кнопку Button1.

    Отобразится окно сообщения с надписью "Средняя скорость равна бесконечности".

    Не закрывайте проект. В следующей процедуре будет рассказано о том, как найти логическую ошибку.

При делении 5 на 0 получается бесконечность?

В предыдущей процедуре "бесконечность" может быть совсем не тем результатом, который ожидается пользователем, но математически это правильно — 0 входит в 5 неограниченное число раз. Однако, совершенно не желательно, чтобы пользователи программы получали такой результат. Каким образом можно избежать этого?

Можно предположить, что необходимо добавить обработчик ошибок, о котором было рассказано в разделе Что делать, если что-то идет не так. Обработка ошибок. Однако, в данном случае он окажется бесполезным — результат "бесконечность" не является ошибкой, просто он нежелателен.

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

В следующей процедуре предстоит изменить код в обработчике событий Button1_Click таким образом, чтобы функция GetMPH вызывалась только при значениях больше нуля.

Практическое задание

Чтобы исправить ошибку

  1. В редакторе кода измените код в обработчике событий 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
    
  2. Нажмите клавишу F5 для повторного запуска приложения. В первом текстовом поле введите 0, и во втором текстовом поле введите 5. Затем нажмите кнопку Button1.

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

Следующие действия

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

Следующее занятие: Создание заметок в программах. Использование комментариев

См. также

Задачи

Что? Это не было запланировано! Поиск логических ошибок

Что делать, если что-то идет не так. Обработка ошибок

Знайте свои ошибки. Три типа ошибок в программировании

Поиск ошибок. Введение в отладку в Visual Basic

Ссылки

Оператор / (Visual Basic)