Методы тестирования вычислительных процессов

МЕТОДЫ ТЕСТИРОВАНИЯ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ

О.Ф. Немолочнов, А.Г. Зыков, Л.Г. Осовецкий, В.И. Поляков

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

Введение

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

Разрабатываемая на факультете компьютерных технологий и управления кафедрами информатики и прикладной математики, вычислительной техники и безопасных информационных технологий автоматизированная учебно-исследовательская система верификации и тестирования (АУИСВ и Т) вычислительных процессов, в частном случае порождаемых программами при интерпретации их команд процессорами, базируется на графо-аналитических моделях (ГАМ) и комплексных кубических покрытиях булевых функций, обеспечивающих вычисления искомых переменных по тем или иным аналитическим выражениям произвольного вида. Тестирование вычислительных процессов является одним из методов их верификации [1].

Графо-аналитические модели

ГАМ задается в виде множества вершин: условных, описывающих ветвления по условиям предикатам, линейных, описывающих вычисление переменных по аналитическим формулам - выражениям, и дуг связи между ними. Сходящиеся дуги описываются с применением виртуальных вершин объединения дуг.

Комплексное кубическое покрытие состоит из логической части в виде покрытий и алгебраических выражений переменных. Оно строится по ГАМ на основе алгебро-топологических методов [2].

Примитивы покрытий вершин

Примитивные вырожденные покрытия вершин ГАМ показаны на рис.1.

Покрытия объединяют в себе булевы переменные B={a, b, c ,...}, вырабатываемые по условиям предикатам АЛУ процессора в виде специальных признаков - флагов, и реализуются командами условной передачи управления (if Jump) и сигналами управления z gZ, вырабатываемыми ЦУУ и осуществляющими передачу управления от команды к команде.

Так как вершины ГАМ являются по определению замкнутыми множествами [3], то множества Z можно ограничить только переменными z, осуществляющими передачу управления от вершине к вершине, т.е. убрать из рассмотрения внутренние передачи управления от команды к команде, чтобы не затенять и не усложнять излишними подробностями кубические покрытия. Заметим, что кубические покрытия являются строгим математическим описанием ГАМ любого вычислительного процесса, построенного из указанных выше трех типов вершин.

А

ZL A

A

A

UD D,- D, UD2UD;

nv

A

Z? a t T Z2 rF Z2 z 1 Z 2 Z 3 z4

1 1 1 0 1 0 0 1

1 0 0 1 0 1 0 1

0 X 0 0 0 0 1 1

0 0 0 0

а)

б)

z? r r' Z2' Z1 r r' Z2'

1 X /IFR/ 1 1 Pr /RFR/ 1

0 Pr Pr 0 0 Pr Pr 0

в)

Рис.1. Примитивы и покрытия типовых вершин ГАМ: а) условной вершины (СУ); б) объединения дуг (иО); в) линейной вершины (IV); УП - условие-предикат; пу- номер вершины; рг- предыдущее значение переменной Г; х - безразличное значение переменной.

Комплексные покрытия переменных

Покрытия переменных rs R, задаваемых согласно концептуальной модели вычислительного процесса [4] в виде итеративных и рекуррентных формул и выражений, строятся путем перебора путей по ГАМ от точки Tin до точки Tout или наоборот и пересечения конкретных примитивных покрытий вершин, входящих в рассматриваемый путь. Если в процессе перебора путей встречаются противоречия, т.е. кубы из примитивов дают пустое пересечение, то данный куб просто удаляется из покрытия.

Методы верификации

Общая схема верификации показана на рис.2.

Здесь рассмотрен случай, когда один и тот же вычислительный процесс реализован двумя различными способами. На схеме показано, что на основании технических заданий (ТЗ) или разработанных программ строятся ГАМ и комплексные покрытия двух рассматриваемых вычислительных процессов. Из них исключаются значения, на которых функция не определена (don't care), методом алгебро-топологического вычитания, и строятся контролирующие тесты. Предложены два способа верификации этих процессов:

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

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

Программа 1

Программа 2

ГАМ 1

ТЗ

Полное покрытие С1'

С1=С1' # {don't care}

J

гам1 ? гам2

ГАМ 2

Полное покрытие С2

С2=С2' # {don't care}

1 г 1 Г

Тест Т1 Тест Т2

i 1 Г

1 , г 1

Cj # C2 = 0 С 2 # C1 = 0 Ri

V

ГАМ1 ? ГАМ2

Рис. 2. Общая схема процесса верификации вычислительных процессов

Различия вычислительных процессов могут порождаться:

• различными покрытиями одних и тех же множеств предикатов;

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

• проектированием программ на различных алгоритмических языках и различными трансляторами;

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

При проведении верификации по покрытиям следует учитывать следующие факторы:

• компенсацию условий предикатов;

• эквивалентность, т.е. размножение некоторых условий;

• несуществующие значения (don't care), возникающие в ходе функциональной декомпозиции неполностью определенных функций.

Указанные факторы вызывают основные затруднения в алгоритмизации и построении САПР верификации.

Пример верификации ациклического процесса

Пусть задана некоторая интервальная формула: FR1, при x < к1 ;

г = < FR2, при к1 < x < к2;

FR3, при x > k2,

реализующая вычисления некоторой переменной г по различным формулам: FR1, FR2 и FR3 произвольного вида в зависимости от двух булевых переменных, задающих некоторые условия предикаты в виде неравенств: a: х<к1; Ь: х>к2.

Переход от неравенств к булевым переменным при проектировании вычислительного процесса позволяет абстрагироваться от конкретного смысла неравенств и соответствующих им условий предикатов и рассмотреть решение задачи верификации в общем виде. Графо-аналитические модели вычисления переменной г приведены на рис. 3.

СЮ сю

1 и' Г-П11 С . т ш г=ГЯЗ

2 Ь-Х 2

ио

6

аЬ 00 01 11 10 аЬ 00 01 11 10

ГШ2 ЕЯ1 ГШ1 ГШ2 ЕЯ3 ГШ1

а) б)

Рис. 3. ГАМ вычисления интервальной формулы

На рис. 3а показана функциональная декомпозиция булевой функции/=/(а,Ь) с начальной вершиной условия предиката а (ГАМ 1), а на рис. 3б - с начальной вершиной Ь (ГАМ 2).

Построим комплексные кубические покрытия С1(г) и С2(г) для вычисляемой переменной г по ГАМ 1 и ГАМ 2:

С1(г)=

г1 а Ь г г' ¿2' {с} г1 а Ь г г' г2' {с}

1 1 X X ГШ/ 1 С1 11 1 X X Ш1/ 1 С1

1 0 1 X ГШ3/ 1 С2 ^ , 1 ) 1 0 1 X Ш3/ 1 С2

1 0 0 X /ГШ2/ 1 с С2г)= \ 1 0 0 X Ш2/ 1 Сз

0 X X р Р 0 С4 0 X X р Р 0 С4

По покрытиям С](г) и С2(г) построим тесты Т^г) и Т2(г) путем пересечения кубов из интервальных частей покрытий С](г) и С2(г), соответственно. Получим тесты:

г! а Ъ г г' г2г г! а Ъ г г' г2г

1 1' 0 X /¥Я1/ 1 и 1 0 1' X /¥Я3/ 1 и

1 0' 0 X /¥Я2/ 1 Г] 1 0 0' X /¥Я2/ 1 Г1

1 0 1' X /¥Я3/ 1 12 Т2(г) = 1 '' 0 X /¥Я1/ 1 г2

1 0 0' X /¥Я2/ 1 Г2 1 0' 0 X /¥Я2/ 1 г~2

1' 0 1 р /¥Я3/ 1 1' 1 0 р /¥Я1/ 1

0' 0 1 р р 0 Гз 0' 0 1 р р 0 Г3

Примеч. 1 О в С]Пс3 из С]

Заметим, что для формул должны выполняться условия: /¥Я1/ф/¥Я2/ф/¥Я3/фр, т.е. вычисляемые и хранимые значения должны различаться на разных наборах теста. Штрихами в тестах отмечены значения активно изменяемых условий-предикатов.

С учетом удаления аЪ=11 верификация по покрытиям дает С]# С2 = 0 и С2# С] =

0. что и свидетельствует об эквивалентности вычислительных процессов. Это наглядно можно наблюдать на картах Карно, приведенных на рис.3.

Перекрестное тестирование дает следующий результат: Я1(Т1)=Я2(Т1) и Я}(Т2)=Я2(Т2) , что также подтверждает эквивалентность вычислительных процессов. Заметим, что если переменную г вычислять по разным упрощенным формулам ¥Я1, ¥Я2 и ¥Я3, то метод перекрестного тестирования является предпочтительным, так как не требует приведения выражений формул к каноническому виду.

Заключение

Рассмотренные методы верификации вычислительных процессов с использованием покрытий и перекрестного тестирования являются алгоритмической основой построения САПР логических схем и программного продукта, в том числе и АУИСВ и Т.

Литература

1. Липаев В.В. Сопровождение и управление сложных программных средств. - М.: СИНТЕГ, 2006. - 372 с.

2. Проектирование цифровых вычислительных машин / С.А. Майоров, Г.И. Новиков, О.Ф. Немолочнов и др. Под ред. С. А. Майорова. - М.: Высш. шк., 1972. - 344 с.

3. Немолочнов О.Ф., Зыков А.Г., Поляков В.И. Комплексные кубические покрытия и графо-аналитические модели как средство описания вычислительных процессов программ /Труды Международных научно-технических конференций «Интеллектуальные системы» (А18'06) и «Интеллектуальные САПР» (САБ-2006), Научное издание в 3-х т. Т. 2. - М.: Физматлит, 2006. - С. 3-7.

4. Итерационно-рекурсивная модель вычислительных процессов программ / Немолоч-нов О.Ф., Зыков А.Г., Поляков В.И., Осовецкий Л.Г., Сидоров А.В. Кулагин В.С. // Известия вузов. Приборостроение. 2005. Том 48. № 12. С.14-20.