- •СамотестирующиЕся и самокорректирующиЕся программы
- •Вводные замечания
- •Общие принципы создания двухмодульных вычислительных процедур и методология самотестирования
- •Устойчивость, линейная и единичная состоятельность
- •Метод создания самокорректирующейся процедуры вычисления теоретико-числовой функции дискретного экспоненцирования
- •Обозначения и определения для функции дискретного возведения в степень вида gxmodulo m.
- •Построение самотестирующейся/самокорректирующейся программной пары для функции дискретного экспоненцирования
- •Метод создания самотестирующейся расчетной программы с эффективным тестирующим модулем
- •Алгоритм st
- •Исследования процесса верификации расчетных программ
- •Области применения самотестирующихся и самокорректирующихся программ и их сочетаний
- •Общие замечания
- •Вычислительная математика
- •Целочисленная арифметика и арифметика многократной точности
- •Теоретико-групповые и теоретико-числовые вычисления
- •Вычисления над полиномами
- •Вычисления над матрицами
- •Линейные рекуррентные соотношения
- •Аппроксимирующие функции
- •Криптография, интерактивные доказательства Вводные замечания
- •Распределение ключей, цифровая подпись, схемы аутентификации
- •Интерактивные системы доказательств
- •Задача «Изоморфизм графа»
- •Протокол ig
- •Чекер для задачи «Изоморфизм графа»
- •Чекер cgip(g,h,k)
- •Другие направления
- •Применение самотестирующихся и самокорректирующихся программ Вводные замечания
- •Применение вычислительных методов к задачам гидролокации
- •Метод наименьших квадратов и задача самотестирования
Метод создания самотестирующейся расчетной программы с эффективным тестирующим модулем
В качестве расчетной программы рассматривается любая программа, решающая задачу получения значения некоторой вычислимой функции. При этом под верификацией расчетной программы понимается процесс доказательства того, что программа будет получать на некотором входе истинные значения исследуемой функции. Иными словами, верификация расчетной программы направлена на доказательство отсутствия преднамеренных и/или непреднамеренных программных дефектов в верифицируемой программе.
В данном случае предлагается метод создания самотестирующихся программ для верификации расчетных программных модулей [КС2]. Данный метод не требует вычисления эталонных значений и является независимым от используемого при написании расчетной программы языка программирования, что существенно повышает оперативность исследования программы и точность оценки вероятности отсутствия в ней программных дефектов.
Пусть для функции Y = f (X) существует пара функций (gc,hc)Yтаких, что:
Y = gc (f (a1), ..., f (ac)),
X = hc (a1, ..., ac).
Легко увидеть, что если значения aiвыбраны изInв соответствии с распределениемDp, тогда пара функций (gc,hc)Yобеспечивает выполнение для функцииY = f (X) свойства случайной самосводимости. Пару функций (gc,hc)Yбудем называтьST-парой функцийдля функцииY = f (X).
Предположим, что на ST-пару функций можно наложить некоторую совокупность ограничений на сложность программной реализации и время выполнения. В этом случае, пусть длина кода программ, реализующих функцииgc иhc , и время их выполнения составляет константный мультипликативный фактор от длины кода и времени выполнения программыP.
Предлагаемый метод верификации расчетной программы Pна основеST-пары функций для некоторого входного значения вектораX*заключается в выполнении следующего алгоритма. (Всюду далее, если осуществляется случайный выбор значений, этот выбор выполняется в соответствии с распределением вероятностейDp).
Алгоритм st
1. Определить множество такое, что, гдевыбраны случайно из входного подмножестваIn.
2. Вызвать программу Pдля вычисления значения
3. Вызвать cраз программуPдля вычисления множества значений
4. Определить значения
5. Если , то принимается решение, что программаPкорректна на множестве значений входных параметровв противном случае данная программа является некорректной.
Таким образом, данный метод не требует вычисления эталонных значений и за одну итерацию позволяет верифицировать корректность программы Pна (n+1) значении входных параметров. При этом время верификации можно оценить как
где tiиtx- время выполнения программыPпри входных значенияхaiиX*соответственно;
tgи - время определения значения функцииgcи множестваA*соответственно:
TP(X) - временная (не асимптотическая) сложность выполнения программыP;
Kgh (X,c) - коэффициент временной сложности программной реализации функцииgcи определенияA*по отношению к временной сложности программыP (по предположению он составляет константный мультипликативный фактор отTP (X), а его значение меньше 1). Для традиционного вышеуказанного метода тестирования время выполнения и сравнения полученного результата с эталонным значением составляет:
,
где tieиtxe- время определения эталонных значений функцииY =f (X) при значенияхaiиX*соответственно (в общем случае, не может быть меньше времени выполнения программы).
Следовательно, относительный выигрыш по оперативности предложенного метода верификации (по отношению к методу тестирования программ на основе ее эталонных значений):
Так как, коэффициент Kgh< 1, аc 2, то получаем относительный выигрыш по оперативности испытания расчетных программ указанного типа (обладающих свойством случайной самосводимости) более чем в 1.5 раза.