Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тестирование программного обеспечения. Фундамен...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
935.81 Кб
Скачать

494 Часть III: Управление проектами и группами

Устаревшие константы

Иногда константы используются в программах непосредственно. При­мерами могут служить следующие значения: к компьютеру может быть подключено до 64 терминалов; длина конфигурационного файла не долж­на превышать 706 байтов; первыми двумя цифрами года являются 19. Когда эти значения меняются, приходится менять и программу. При этом случа­ется, что, изменив значение в одном месте программы, забывают изменить его в другом, что является источником множества ошибок.

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

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

Неверно расставленные скобки

(А + (В + С) * Р + (А / С - В Е / (В+ (Е + 18 /

(А - Е") ) ) ) ) )

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

Неправильный порядок операторов

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

Неверно работает базовая функция

Коммерческие языки и средства разработки программ обычно постав­ляются с определенным набором базовых функций, таких как функции, выполняющие сложение и умножение. Кроме того, некоторое количество таких функций программисты могут написать самостоятельно, и эти фун­кции могут содержать ошибки, вероятность возникновения которых прямо пропорциональна сложности функции. (Строго говоря, даже встроенные функции языка не гарантированы от ошибок, хотя обычно они очень тща­тельно протестированы.) Иногда, желая сделать код более быстрым или коротким, программисты пользуются неточными формулами аппроксима­ции.

Приложение: Распространенные программные ошибки 495

Переполнение и потеря значащих разрядов

Переполнение (overflow) —- это ситуация, когда результаты вычислений слишком велики, чтобы программа могла их обработать. Предположим для примера, что программа хранит все числа в целом формате, выделяя для них по одному байту. С числами от 0 до 255 все получается прекрасно. Однако сложить 255 и 255 такая программа не может, поскольку результат не помещается в один байт. Подобные вещи происходят и при вычислени­ях с плавающей точкой, когда дробная часть оказывается слишком боль­шой.

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

Ошибки отсечения и округления

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

Если язык программирования позволяет хранить до двух десятичных знаков, говорят, что он работает с точностью до двух цифр. Выполняемые им вычисления будут неточными. Например, 2,05б равняется приблизитель­но 74. Однако если округлить 2,05 до 2,1, тогда 2,056 будет равно прибли­зительно 86. Если отсечь цифру 5, получив 2,0, результатом возведения в степень будет 64.

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

Путаница с представлением данных

Одно и то же число может быть представлено несколькими способами, которые нельзя путать. Предположим, например, что программа просит вас ввести число между 0 и 9. Вы вводите 1. Программа может сохранить это число в формате с фиксированной точкой в одном байте. В байте 8 битов, так что его содержимое будет таким: 0000 0001. Программа может посту­пить и иначе и сохранить ASCII-код введенной цифры. ASCII-код едини­цы равен 49 или ООН 0001 в двоичном формате. В обоих случаях результат помещается в одном байте. Позднее можно перепутать способы хранения