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

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

Проблемы при передаче данных между подпрограммами

Программа вызывает подпрограмму и передает ей данные, например, таким образом:

DO SUB (VAR_1, VAR_2, VAR_3)

Все три переменные, VAR_1, VAR_2 и VAR_3, передаются основной программой подпрограмме. Они называются параметрами подпрограммы. Подпрограмма может обращаться к этим переменным по другим именам. Первая строка определения подпрограммы может быть такой:

SUB (INPUT_1, INPUT _2, INPUT _3)

Подпрограмма получает первую переменную из списка (VAR_1) и на­зывает ее INPUT_1. Вторую переменную (VAR_2) она называет INPUT_2, третью (VAR_3) - INPUT_3.

Определения переменных в программе и подпрограмме должны совпа­дать. Если VAR_1 определена как целая, такой же должна быть и INPUT_1.

Параметры указаны не в том порядке или пропущены

В программе стоит команда DO SUB (VAR_1, VAR_2, VAR_3), а под­программа связывает INPUT_1 с VAR_2 , a INPUT_2 с VAR_1. Програм­мисты часто путают порядок параметров подпрограмм, из-за чего возможны самые разнообразные ошибки.

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

Несоответствие типов данных

Предположим, что переменные VAR_1 и VAR_2 определены в програм­ме как двухбайтовые целые. При этом в подпрограмме параметры INPUT_1 и INPUT_2 определены как однобайтовые целые. Возможность такой ситуации и действия программы в этом случае определяются языком программирования. Вполне возможно, что в переменной INPUT_1 окажет­ся первый байт значения VAR_1, а в переменной INPUT_2 — второй байт значения VAR_1.

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

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

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

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

Если два разных имени относятся к одной и той же области памяти, они называются псевдонимами. Если VAR_1 и XX являются друг для дру­га псевдонимами, после выполнения программой команды SET XX = 20 значением переменной VAR_1 также становится 20.

Некоторые псевдонимы используются еще хитрее. Пусть переменные VAR_1 YAR_2 являются однобайтовыми целыми, а XX — двухбайтовым целым, первый байт которого совпадает с переменной VAR_1, а второй — с переменной VAR_2. В этом случае, если присвоить переменной XX зна­чение 20, переменная VAR_1 получит значение 0, а переменная VAR_2 — 20.

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

— ждите множества ошибок.

Неправильная интерпретация данных

Программа передает подпрограмме значение температуры по шкале Цельсия, а та интерпретирует его как температуру по Фаренгейту. Другой пример: подпрограмма присваивает флагу ошибки значение 1, желая его сбросить. Программа понимает это значение как “флаг установлен”.

Неадекватная информация об ошибке

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