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

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

Перед аварийным выходом из подпрограммы не восстановлено правильное состояние данных

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

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

Два процесса могут иметь собственные копии общих данных. Так же может быть и с двумя подпрограммами внутри одного и того же процесса. Когда данные меняются, обе копии должны быть обновлены. Однако не­редко оказывается, что один из процессов по-прежнему работает со стары­ми данными, поскольку другой забыл сообщить об их изменении.

Связанные переменные не синхронизированы

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

Локальная установка глобальных данных

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

Глобальное использование локальных переменных

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

Неверная маска битового поля

Чтобы сэкономить несколько байтов или микросекунд, некоторые про­цессы могут пользоваться битовыми полями. Каждый байт такого поля

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

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

Неверное значение из таблицы

Данные часто организованы в виде таблиц (простейшими примерами могут быть массивы и записи). Переменная-указатель определяет, какой элемент таблицы будет записываться или считываться. Программа может обратиться не к тому элементу таблицы, или же ее элемент может содер­жать неправильное значение.

Границы расположения данных

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

Не обозначен конец нуль-терминированной строки

Пусть 8ТКШС_УАЫ является строковой переменной. В ней может содержаться строка Привет или строка Я — строковая переменная, а мо­жет быть, нечто гораздо более длинное. Если количество хранящихся в строковой переменной символов не фиксировано, должен быть какой-ни- будь индикатор конца строки. Распространенным решением является по­мещение в конец строки нуль-символа (все его биты нулевые). Этот символ называется терминатором строки. В тех языках программирования, в кото­рых используются нуль-терминаторы, все процедуры, работающие со стро­ками, ищут этот символ. Однако по ошибке его может не оказаться (его забыли, поверх него что-то записали или не скопировали его из исходной переменной). Подпрограмма, печатающая такую строку, будет печатать все содержимое памяти до тех пор, пока не найдет нуль-символ или не достиг­нет конца памяти. Возможно, впрочем, она сразу выдаст сообщение об ошибке. При копировании такой переменной в другое место памяти так­же возможны неприятности с затиранием нужных данных.

Неожиданный конец строки

Предполагается, что в переменной ЗТИШОУАЯ должна храниться строка Я — строковая переменная, однако подпрограмма, отображающая ее содержимое на экране, выводит только Я — стр. Это может означать, что нуль-символ случайно скопирован в середину строки. Если же длина стро­ки хранится в отдельном байте (байте длины), возможно, что это значение неправильно вычислено или испорчено.