Ошибки, связанные с обработкой граничных условий



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

• Числовые ограничения. У треугольника ровно 3 стороны, сумма его углов равна 180 градусам. В одном байте могут храниться значения от 0 до 255. 

• Количественные ограничения. Если длина строки не должна превышать 80 символов, то что будет, если пользователь введет 79, 80, 81 символ?

• Пространственные ограничения. Если, например, программа рисует график в прямоугольнике определённого размера, что будет, если одну из точек графика нарисовать вне прямоугольника? 

• Ограничения времени. Предположим, что у пользователя есть 30 секунд для ответа на телефон ​ ный звонок. Через 30 секунд телефон перестает звонить и вызов перенаправляется оператору.

Что будет, если снять трубку на 30-й секунде?                    

• Ограничения обьема памяти. Существуют программы, которые не могут работать со слишком большим объемом памяти.

Ошибки вычислений

Даже самые простые арифметические операции всегда чреваты ошибками. Одними из самых распространенных среди математических ошибок являются ошибки округления. После нескольких промежуточных вычислений может оказаться, что 2 + 2 = -1, даже если на промежуточных этапах не было логических ошибок. К этой категории относятся и ошибки, вызванные неправильным выбо ром алгоритма. Сюда можно отнести неправильные формулы, формулы неприменимые к обрабатываемым данным, неверные способы разбиения сложных выражений на более простые элементы. В случае алгоритмичес кой ошибки код в точности выполняет то, что имел в виду программист, — он правильно закодировал неверную идею.

• Выполнение сложения вместо вычитания.

• Выражения с обилием скобок.

• Неправильный порядок операторов. Программа может выполнять вычисления не в том порядке, в каком ожидает программист. Например, если ** означает возведение в степень, так что 5 ** 3 означает 5 в кубе, будет ли 2 * 5 ** 3 равно 1000 (10 в кубе) или 250 (5 в кубе умноженное на 2)? 

• Переполнение и потеря значащих разрядов.Как программе сохранить число 0,34674335, если для хранения дробной части выделен только один байт? В этом случае программы поступают по-разному — отсекают непоместившиеся цифры или преобразуют результат в 0. 

• Ошибки отсечения и округления. Если программа может хранить числа длиной не более двух цифр. В числе 5,19 три цифры. Если программа просто отсечет циф​ру 9, она сохранит 5,1. Вместо этого она может округлить число, и тогда будет сохранено 5,2, что гораздо ближе к исходному значению. 

• Неверная формула.

Начальное и последующие состояния

Бывает, что при выполнении какой-либо функции программы сбой происходит только однажды — при самом первом обращении к этой функции. На экране может появиться искаженное изображение или странная информация. Возможно, неверно выполнятся расчеты, запустятся бесконечные циклы или операционная система выдаст сообщение о нехватке памяти. Причиной такого поведения программы может быть отсутствие файла с инициализационной информацией. После первого же запуска программа создаст такой файл, и дальше все будет в порядке. Получается, что такую ошибку невозможно повторить (точнее, для ее повторения нужно установить новую копию программы). Но не стоит думать, что ошибка, проявляющаяся только при первом запуске программы, безвредна: ведь это будет первое, с чем столкнется каждый новый пользователь. Иногда, программируя процесс, связанный с последовательными пре​образованиями информации, разработчики забывают о том, что пользова​телю может понадобиться вернуться к исходным данным и изменить их. Насколько корректно поведет себя программа в такой ситуации? Позволит ли она внести нужные изменения и не будет ли из-за этого потеряна вся выполненная пользователем работа? Что увидит пользователь при возвра​щении к исходному состоянию программы: свои данные или стандартные значения, которыми программа инициализирует переменные при запуске?

Ошибки управления потоком

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

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

• “Зависание” компьютера.При этом единственный выход из состояния - перезапуск компьютера. Причиной могут быть бесконечные циклы, бесконечное ожидание ответа какого-либо устройства.

• Завершение работы программы. Может происходить в случае возникновения ошибок определенных типов.

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

• Установленные условия проверок не должны пересекаться.

• Неверно заданные условия проверки. Программа выполняет Задание_16, только когда (VAR < 6)​ AND (VAR > 18). Это означает, что Задание_16 не выполняется никогда. 


Дата добавления: 2018-08-06; просмотров: 1296; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!