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

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

Зависание” компьютера

“Зависнув”, компьютер прекращает реагировать на клавиатурный и иной ввод, прекращает печатать, индикаторы не меняют своего состояния, но при этом могут и гореть. Единственным способом, позволяющим вос­становить работоспособность системы, является аппаратный перезапуск компьютера (выключение и включение питания или нажатие кнопки Reset).

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

Синтаксические ошибки, сообщения о которых отображаются во время выполнения программы

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

Ожидание невозможных условий или комбинаций условий

Программа останавливается (“зависает”) в ожидании события, которое никогда не наступит. Вот несколько распространенных примеров.

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

• Взаимная блокировка. Это классическая проблема многозадачных систем. Две программы работают параллельно. Обеим нужна одна и та же пара ресурсов (скажем, принтер и дополнительная память под буфер печати). Программы захватывают по одному ресурсу и ждут, пока освободится второй.

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

• Простая логическая ошибка. Например, программа должна вводить числа от 1 до 5, отвергая любые другие данные. Однако в ней зап­рограммировано следующее условие допустимости числа: IF INPUT > 5 AND INPUT < 1. Такому условию не соответствует вообще ни одно число, поэтому программа отвергает любой ввод и ждет бесконечно долго.

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

Неверный приоритет пользователя или процесса

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

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

Циклы

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

1 SET LOOP_CONTROL = 1

2 REPEAT

3 SET VAR = 5

4 PRINT VAR * LOOP-CONTROL

5 SET LOOP_CONTROL = LOOP_CONTROL +1

6 UNTIL LOOP_CONTROL >5

7 PRINT VAR

Программа присваивает переменной LOOP_CONTROL значение 1, переменной VÄR значение 5, печатает произведение значений этих двух переменных, увеличивает значение LOOP_CONTROL на 1 и затем прове­ряет, не превысило ли ее значение число 5. Поскольку значением