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

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

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

Не предполагавшаяся модификация данных, выполняемая другими подпрограммами

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

Ошибочная инициализация

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

Зависимость от инструментальных средств, которыми пользователь может не уметь пользоваться или которых он может не иметь

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

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

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

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

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

Очевидно неверное поведение программы

Программа отображает на экране “мусор” или выводит искаженное изображение, сохраняет “мусор” на диске, невпопад начинает печатать или выполняет совершенно неожиданные действия. Все это означает, что про­грамма вышла из-под контроля. Такие ошибки наиболее очевидны, и их легко найти и исправить. Хотя они все выглядят похожими, их причины могут быть различны. Ниже приводится несколько примеров подобных ошибок. Искать их специально не имеет смысла, если только вы не обла­даете некоторыми познаниями в программировании и не знакомы с внут­ренней структурой программы.

Переход по БОЮ

Оператор СОТО передает управление другой части программы. Если управление передано не туда, возможны самые разнообразные, но, как правило, очевидные последствия. Программа может “зависнуть”, отобра­зить на экране нечто явно неподходящее и т.п.

У программистов команда вОТО крайне непопулярна, и ее использо­вание считается дурным тоном. Сторонники структурного программирова­ния утверждают, что нет такой программы, при написании которой без этих операторов нельзя было бы обойтись. И более того, без них програм­мы более последовательны и читабельны и содержат меньше ошибок (Йор­дан (Уоигёоп, 1976)).

Ошибки наиболее вероятны в следующих ситуациях.

• Выполняется переход назад, особенно к оператору, перед которым выполнялась необходимая инициализация данных и устройств;

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

Логика, основанная на определении вызывающей подпрограммы

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