253_Уваров_3

advertisement
Международная научно-техническая конференция «Информационные системы и технологии»
ИСТ-2014
СЕКЦИЯ 5.1 ТЕХНИЧЕСКАЯ КИБЕРНЕТИКА (СИСТЕМЫ ОБРАБОТКИ ИНФОРМАЦИИ)
П.И. УВАРОВ (к.т.н., доцент)
(Нижегородский государственный технический университет им. Р.Е. Алексеева)
ТЕСТИРОВАНИЕ ФУКЦИОНАЛЬНО-ДЕКОМПОЗИРУЕМЫХ ПРОГРАММНЫХ
СИСТЕМ НА БАЗЕ МАССИВОВ СВЯЗАННОСТИ
С целью проведения тестирования, отладки и подтверждения достоверности работы программных систем (ПС) на этапе постановки задачи для ПС устанавливаются требования, чтобы
ПС имела свойства, повышающие её тестируемость. Для этого ПС даётся возможность функциональной декомпозиции (ФД) её структуры, когда в рабочем режиме ПС имеет структуру, предназначенную для выполнения поставленной пользовательской задачи, а в режиме тестирования динамическую перестраиваемую структуру, предназначенную для более эффективного тестирования.
Известна методика построения структуры функционально-декомпозируемого кода (СДК)
ПС, основанная на свойствах работы алгоритма ПС – потоке причинно-зависимых событий. В
этом потоке каждое событие представляет собой обработку одного из блоков алгоритма. При обработке алгоритма движение по его произвольно пронумерованным блокам будет представлять
некоторую трассу. В каждом текущем исполняемом блоке алгоритма после завершения его работы
однозначно определяется номер следующего исполнимого блока. Для движения по блокам алгоритма введём некоторую переменную пути (ПП) – Way, которая будет указывать номер текущего
исполнимого блока. Переключение блоков производится оператором множественного выбора
switch(Way), а выбор блока в соответствующем значению Way==N операторе case N. Вся СДК
охвачена бесконечным циклом, замыкание на который происходит после выполнения каждого
блока и задания номера следующего блока:
case N: Блок_N; Way=K; continue; .
В условных операторах производится анализ условия и задание Way для каждой ветви:
if(Блок условия) Way=(Номер блока при выполнении условия);
else
Way=(Номер блока при невыполнении условия);
continue;
Первым оператором в цикле располагается тестовая функция (ТФ), которая является единственным местом расположения контрольных точек (КТ) кода. Прохождение через эту КТ гарантировано после выполнения любого блока, а, т.к. сложность обработки внутри ТФ не ограничена,
то такой подход фактически позволяет иметь КТ до и после каждого блока.
При известных преимуществах такого построении СДК недостатком является необходимость задания после обработки каждого блока номера следующего блока. С целью упрощения
процедуры разработки кода, предлагается:
 ограничить применяемые ветвления в алгоритме только двунаправленными ветвлениями;
 внести все переходы в двумерный массив связанности (МС) с обращением вида MS[D][Way]:
где Way – значение ПП, соответствующее номеру только что обработанного блока;
D – переменная-диспетчер, задающая вид перехода:
 для безусловного перехода D=0, а MS[0][Way] содержит номер следующего активного
блока, MS[1][Way]=0 – не используется;
 для условного:
 D=0 – переход от блока по ветви НЕТ. MS[0][Way]=(Номер блока при НЕТ);
 D=1 – переход по ветви ДА.
MS[1][Way]=(Номер блока при ДА);
 Значение начальных элементов MS:
 MS[0][0] = (Номер начального блока алгоритма);
 MS[1][0] = 0 – не используется.
252
Международная научно-техническая конференция «Информационные системы и технологии»
ИСТ-2014
СЕКЦИЯ 5.1 ТЕХНИЧЕСКАЯ КИБЕРНЕТИКА (СИСТЕМЫ ОБРАБОТКИ ИНФОРМАЦИИ)
СДК с использованием МС будет иметь вид:
Определение ПП и задание значения для выбора начального блока.
int Way = 0,
Опред. переменной-диспетчера и уст. значения выбора начал. блока
D=0,
Определение массива связанности для N блоков
MS[2][N];
Функция инициализации МС – занесение переходов.
Inin_MS(MS);
Бесконечный цикл, выход из которого совершается по break.
for( ; ; ) {
Установка в ПП номера текущего блока для обработки.
Way = MS[D][Way];
Test(Way, P1, … , PN); Тестовая функция. P1, … , PN – параметры кода ПС, обрабатываемые в
тестовой функции.
D=0; Сброс значения переменной-диспетчера.
Оператор множественного выбора, выполняющий переключение работы
switch(Way) {
кода ПС на текущий исполнимый блок.
Подключение для исполнения блока 1 при равенстве Way единице
case 1:
Исполнение блока b1 (блок не условный). D и Way не задаются.
b1 ;
continue; Замыкание бесконечного цикла.
...case m: bm; continue; Подключение блока bm, замыкание цикла.
Подключение и проверка условия перехода. Исполнимый блок bn воз...case n: if(bn)
вращает значение булевого типа, анализируемое в if (блока else – нет!).
D=1; continue; При выполнении условия – задание перехода по ДА. Замыкание цикла.
...case g: bg;
break; Завершающий блок bg. Переход на прерывание цикла.
Обработка ситуации задания отсутствующей вершины.
default: ErrorWay();
Граница switch(Way).
}
Прерывание бесконечного цикла.
break;
Граница бесконечного цикла.
}
Пример соответствующего отрезка МС для начальной части алгоритма и кода:
Init_MS(MS); // Инициализация МС.
1 k=0
НЕТ ДА
for(;;) {
0
1
2 j=0
Way = MS[D][Way]; // Выбор пути.
0
1
●
Otladka(Way,i,j,k,x,y,D);
3
1
2
●
D = 0; // Сброс перем.-диспетчера
i=0
2
3
●
switch(Way) {
4
3
4
●
gotoxy(x+j*16+i, +14*k);
case 1: k=0;
continue;
4
5
●
case 2: j=0;
continue;
Вывод "*" 5
5
6
●
case 3: i=0;
continue;
6
7
●
case 4: gotoxy(x+j*16+i, y+14*k); continue;
i ++ 6
7
8
4
case 5: printf("*");
continue;
7
Да
8
9
●
case 6: i++;
continue;
i < 10
case
7:
if(i<10)
D=1;
continue;
Нет
8
case 8: i=0;
continue;
MS[0][7]=8 MS[1][7]=4
i=0
Сброс D производится после ТФ Otladka() иначе значение D в ТФ исказится.
Упрощен условный оператор, который не содержит части else. Отсутствует необходимость
задания в каждой строке величины Way, что значительно сократит количество вносимых дефектов
в код ПС. Текст кода более свободен и нагляден, что позволяет размещать в нём большее количество комментариев. При исправлении дефектов неправильных переходов текст кода не изменяется. ТФ не меняет своего назначения и возможностей по сравнению с ранее рассмотренным СДК.
При построении соответствующих ТФ работа производится с ПП Way, которая в момент действия
ТФ ПП уже инициализирована соответствующим значением из МС.
E-mail: pi23@bk.ru
253
Download