Применение аппарата кубических покрытий для гарантированного обнаружения НДВ

ПРИМЕНЕНИЕ АППАРАТА КУБИЧЕСКИХ ПОКРЫТИИ ДЛЯ ГАРАНТИРОВАННОГО ОБНАРУЖЕНИЯ НДВ

И.А. Ларионов Научный руководитель - д.т.н., профессор Л.Г. Осовецкий

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

Введение

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

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

Метод

Проектирование программного продукта можно представить в виде некоторого технологического процесса, состоящего в переходе от технического задания к системе программ или, в частном случае, к одной программе (Р), реализуемых в заданной вычислительной среде. Так как все команды конкретного процессора делятся на две категории - команды обработки данных (обработка десятичных знаков, сдвиги, пересылки, арифметические команды) и команды, регулирующие последовательность управления (вызовы процедур, команды возврата, условные и безусловные переходы), - то программа Р, в свою очередь, может быть представлена в виде булева графа БО(Р), который содержит линейные и условные вершины. Линейная вершина содержит одну точку входа и одну точку выхода, в ней происходит вычисление некоторой переменной на безальтернативной основе, которое впоследствии реализуется в виде последовательности операторов (машинных операций в исполнительных командах). Условная вершина имеет одну точку входа и две точки выхода, задающие адреса ветвления в зависимости от выполнения или невыполнения условия, задаваемого в вершине. Каждый возможный путь I выполнения программы Р соответствует некоторому пути на графе БО(Р), соединяющему начальную и конечную вершины [1].

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

\LFR1, при х < к1 или х > к2;

г = \

\LFR2, при к1 < х < к2.

Переменная г вычисляется по линейным формулам LFRJ и LFR2 в зависимости от значений переменной х, диапазон значений которой разбит на три интервала константами к1 и к2.

Видно, что условия вычисления г по формуле LFR1 или LFR2 заданы в избыточной форме, и с учетом перестановок существует восемь вариантов их последовательного вычисления. Поэтому существует и несколько различных программных реализаций. Закодируем условия: х < k1 как a, х > k1 как а , х > k2 как Ь , х < k2 как Ь . На рисунке приведен булев граф одной из реализаций.

Рисунок. Булев граф одной из реализаций интервальной формулы

Итак, для программы P в машинных кодах, закодировав условия-предикаты булевыми переменными, можно построить её булев граф BG(P). Каждый путь l на графе BG(P) можно задать логическими переменными, которые описывают условия его прохождения и принимают значения 1 или 0 в зависимости от истинности или ложности выражений в условных вершинах. Таким образом, можно построить кубическое покрытие C(P)=[cj, C2,...,cm}, где каждый куб Cj представляет собой набор условий, определяющих путь lj на графе BG(P). Координаты куба Cj могут принимать значения 0, 1 или x, где 0 соответствует значению False (невыполнению условия), 1 - значению True (выполнению условия), а x - неопределенному значению, т.е. неопределенному условию, которое может быть произвольно доопределено как в 0, так и в 1.

Покрытия C(P) и кубы Cj соответствуют определению покрытий в исчислении кубических комплексов, поэтому к ним применимы алгебро-топологические операции пересечения (П), вычитания (#) и звездчатого произведения (*) [2].

Операция # вычитания двух кубов a = (a1, a2,..., an) и b = (b1, b2,..., bn) осуществляется по следующим правилам:

a # b =

0, если а{ # bi = z для всех /;

а, если а{ # Ь = у для хотя бы одного ^

U (a1, a2,..., ai-1, p, ai+1,..., an) длявсех i таких, что ai # bt = p, p e {0,l}.

Здесь г и у - вспомогательные величины, определяемые из таблицы значений опе-

0 1 X

0 г у г

1 у г г

X 1 0 г

Таблица. Значения операции # на элементах кубов

Например, для рассмотренной нами ранее реализации Р интервальной формулы (см. пример 1) кубическое покрытие С(Р) имеет следующий вид: 'а Ь г л 1 х

С (Р) = .

0 1 ЬРЯ1

к 0 0

С помощью операции # можно определить эквивалентность покрытий С(Р1) и С(Р2), а, следовательно, и программ Р1 и Р2 между собой. Более подробно, если для программ Р1 и Р2, имеющих одну и ту же спецификацию, верны равенства

С(Р1) # С(Р2) = 0 и С(Р2) # С(Р1) = 0,

то покрытия признаются эквивалентными, а программы - реализующими одно и то же, т.е. верифицированными относительно друг друга. Если же хотя бы одно из этих равенств неверно, то у программ есть участки, где они функционируют по-разному [3].

Заключение

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

Литература

1. Зыков А.Г., Немолочнов О.Ф., Поляков В.И., Сидоров А.В. Структурирование программ и вычислительных процессов на множество линейных и условных вершин // Научно-технический вестник СПбГИТМО (ТУ). - 2005. - Выпуск 19. Программирование, управление и информационные технологии / Гл. ред. В.Н. Васильев. - С. 207-212.

2. Немолочнов О.Ф., Зыков А.Г., Поляков В.И. Кубические покрытия логических условий вычислительных процессов и программ // Научно-технический вестник СПбГИТМО (ТУ). - 2004. - Выпуск 14. Информационные технологии, вычислительные и управляющие системы / Гл. ред. В.Н. Васильев. - С. 225-233.

3. Лаздин А.В., Немолочнов О.Ф. Метод построения графа функциональной программы для решения задач верификации и тестирования // Научно-технический вестник СПбГИТМО (ТУ). - 2002. - Выпуск 6. Информационные, вычислительные и управляющие системы / Гл. ред. В.Н. Васильев. - С. 109-111.