Применение шаблонов требований к формальной спецификации и верификации автоматных программ

УДК 004.4'242

ПРИМЕНЕНИЕ ШАБЛОНОВ ТРЕБОВАНИЙ К ФОРМАЛЬНОЙ СПЕЦИФИКАЦИИ И ВЕРИФИКАЦИИ АВТОМАТНЫХ ПРОГРАММ А.А. Клебанов, О.Г. Степанов, А.А. Шалыто

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

Введение

Автоматное программирование [1] - это метод разработки программного обеспечения (ПО), основанный на расширенной модели конечного автомата. В рамках данного подхода программы представляются системой автоматизированных объектов управления, логика поведения которых задается системой взаимодействующих управляющих автоматов.

В ряде работ [2, 3] показано, что к автоматным программам хорошо применима верификация на модели (Model Checking) [4]. Суть такой верификации состоит в проверке соответствия модели с конечным числом состояний (структуры Крипке) формальной спецификации, заданной в виде набора формул темпоральной логики. При верификации преимуществом автоматного подхода перед традиционными подходами к разработке ПО является высокая степень автоматизации, так как в автоматных программах модель поведения задается априори. Разработаны методы [5-7], позволяющие автоматически преобразовывать как управляющие автоматы в модель, пригодную для верификации, так и построенный верификатором контрпример в автоматную модель. Однако, как при верификации автоматных программ, так и при верификации программ общего вида, существует следующая проблема - необходимость записи формальных требований в виде формул темпоральных логик, работа с которыми достаточно трудоемка и требует значительной математический подготовки.

В работе [8] эта проблема частично решается использованием контрактов [9]. Хотя контракты являются более простым формализмом (и, как следствие, ошибки в подобной формальной спецификации менее вероятны), рассматриваемый подход имеет несколько недостатков. Во-первых, контракты значительно уступают темпоральным логикам в выразительных возможностях. К записи требований они применимы только в том случае, когда необходимо специфицировать свойства инвариантности, предусловия или постусловия. Во-вторых, специфицирование требований, распространяющихся на группу состояний, может быть достаточно трудоемким процессом, поскольку для каждого состояния из группы потребуется разработать свою спецификацию. Таким образом, описанную выше проблему нельзя считать полностью решенной.

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

Актуальность применения шаблонов требований в контексте автоматного программирования отмечается в работе [2]: «... важным является вопрос о шаблонах (структуре) темпоральных свойств, наиболее применимых и адекватных для верификации автоматных программ. Наличие таких шаблонов позволяло бы говорить о классах темпоральных свойств автоматных моделей, что, несомненно, облегчало бы построение технологической схемы проверки автоматных программ на корректность относительно спецификации». Однако в указанной работе выделяется только одно требование, являющееся частным случаем существующего шаблона, и дальше этот вопрос никак не прорабатывается.

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

Шаблоны требований

В работах [10, 11] предлагается система шаблонов требований, разработанная на основе спецификаций для программ общего вида. Шаблоны можно классифицировать в соответствии с иерархической структурой, основанной на их семантике. В настоящее время выделено восемь основных шаблонов («Отсутствие», «Существование», «Всеобщность», «Ограниченное существование», «Предшествование»,

«Ответ», «Цепное предшествование», «Цепной ответ»), которые делятся на две группы - «Наличие» и «Порядок». В группу «Наличие» входят шаблоны, описывающие наличие или отсутствие состояний, в которых выполняется заданное требование. В группу «Порядок» - описывающие порядок состояний.

Описание шаблона состоит из его имени (или списка имен), цели, записи на различных формализмах (ЬТЬ, СТЬ и т.п.), примера использования и связи с другими шаблонами.

Каждое требование имеет ограничение - ту часть пути исполнения, на котором это требование должно выполняться. Всего выделены пять видов ограничений.

1. Глобально - на всем пути исполнения.

2. До - на пути до заданного состояния.

3. После - на пути после заданного состояния.

4. Между - на пути между двумя заданными состояниями.

5. После-до - аналогично ограничению «Между», однако наличие правой границы интервала не является обязательным.

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

В табл. 1 приведен пример шаблона «Всеобщность». Оригинальный пример использования, предложенный в работе [10], заменен примером более применимым в контексте автоматного программирования. В этом состоит задача адаптации системы шаблонов для автоматного программирования.

Цель Используется для описания части пути исполнения системы, в которой содержатся только те состояния, в которых выполняется необходимое требование. Известен также как «Впредь» и «Всегда».

Запись ЬТЬ Ограничение Запись

Глобально

До я ◊Я ^

После 0

Между 0 и Я

После 0 до Я

СТЬ Ограничение Запись

Глобально Ав

До я А[(Р | Ав(!Я)) W Я]

После 0 Ав^ ^ Ав

Между 0 и Я Ав^ & !Я ^ А[

После 0 до Я Ав^ & !Я ^ А[Р W Я])

Пример Этот шаблон может быть применен для описания общих свойств модели в целом

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

выразить свойство вида: «Если автомат находится в состоянии 8, то верно свой-

ство Р».

При использовании ограничения «Глобально» подстановка темпоральных выра-

жений или АБ(£) в качестве параметра Р позволяет выразить свойство спра-

ведливости.

Связь с другими Этот шаблон тесно связан с шаблонами «Отсутствие» и «Существование». Нали-

шаблонами чие состояния, в котором выполняется требование, может рассматриваться как

отрицание его отсутствия.

Таблица 1. Шаблон «Всеобщность»

Применимость шаблонов требований к спецификации автоматных программ

Рассмотрим вопрос применимости шаблонов требований к формальной спецификации автоматных программ. Для этого проанализируем требования к различным программам, разработанным в СПбГУ ИТМО, Ярославском государственном университете, ОАО «Концерн «НПО «АВРОРА» и доступным на сайте [12], и проверим, как они выражаются при помощи шаблонов. Пример организации промежуточных результатов анализа приводится в табл. 2. В столбцах «Требование» и «Исходная формальная запись» приводятся оригинальные требования из источника (столбец «Источник»), записанные на естественном языке и одном из формализмов соответственно. В столбце «Шаблон, Ограничение» приводится запись шаблона, подстановка необходимых утверждений в который, даст эквивалентную исходной формальную запись. В случае необходимости приводится формальное доказательство эквивалентности.

Требование Исходная формальная запись Шаблон, Ограничение Источник

Если произошла поломка нагревателя или одного из клапанов, то кофеварка (основной автомат А0) обязательно перейдет в состояние 5. АО((уз: = 4 | У32 = 4 | у 2 = 4) & уо = 2 ^ А(уо = 2 и уо = 5)) Ответ (ограниченный), Глобально Ав(Р ^ А(8)), Р: (у31 = 4 | у32 = 4 | у2 = 4) & уо = 2, 8: уо = 2 И уо = 5 2

Таблица 2. Анализ применимости шаблонов требований к спецификации автоматных программ

Всего было рассмотрено 118 требований и их вариантов из 20 источников. Установлено, что 85% требований покрывается пятью шаблонами. Оставшиеся 15% не удается записать при помощи шаблонов из-за ряда причин, таких как ограниченность системы шаблонов и некоторых особенностей конкретной автоматной модели рассматриваемого приложения. Процентное соотношение между использованными шаблонами приведено на рис. 1, а между использованными ограничениями - на рис. 2.

Рис. 1. Процентное соотношение между использованными Рис. 2. Процентное соотношение

шаблонами между использованными ограничениями

Метод записи верифицируемых требований на естественном языке

Существуют различные подходы к выделению формальных (верифицируемых) требований из спецификаций, записанных на естественном языке. Отметим два основных направления [13] - синтаксический разбор текстов и использование формальных грамматик, ограничивающих естественный язык.

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

<требование> : := <ограничение> <шаблон>

<ограничение> : := «Для любого состояния верно, что»

| «До состояния, в котором р, верно что»

| «После состояния, в котором р, верно что»

| «Между состоянием, в котором р, до состояния, в котором Я, верно что»

| «После состояния, в котором р, до состояния, в котором Я, верно что»

<шаблон> : := <отсутствие> | <всеобщность> | <существование>

| <предшествование> | <ответ> | <ответ на следующем шаге>

<отсутствие> : := «никогда не выполняется Р»

<всеобщность> : := «всегда выполняется Р»

<существование> : := «когда-нибудь выполнится Р»

<предшествование> : := «всегда верно, что если выполнено Р, то до этого было выполнено 8»

<ответ> : := «всегда верно, что если выполнится Р, то когда-нибудь выполнится 8»

<ответ на следующем : := «всегда верно, что если выполнится Р, то в следующем состоянии вы-

шаге> полнится 8»

Таблица 3. Грамматика верифицируемых требований на подмножестве русского языка

В качестве примера рассмотрим реальное требование к системе управления кофеваркой, которое приводится в работе [3]: «Система управления кофеваркой никогда не попадет в такое состояние, в котором она не реагирует ни на события системного таймера, ни на нажатие кнопок «ОК» и «С». В автомат-

ной модели кофеварки требованию «Никак не реагирует ни на события системного таймера, ни на нажатие кнопок «ОК» и «С» соответствует предикат act = end. Наречие «никогда» подсказывает, что должен быть использован шаблон «Отсутствие» с ограничением «Глобально».

_Выполним порождение:_

<требование> ^ <ограничение> <шаблон> ^ Для любого состояния верно, что <шаблон> ^ Для любого состояния верно, что <отсутствие> ^ Для любого состояния верно, что никогда не выполняется _P_

Подставив вместо P реальное требование, получим искомое формальное требования на естественном языке: «Для любого состояния верно, что никогда не выполняется act = end». Этому требованию на языках CTL и LTL соответствуют выражения AG(! act = end) и (! act = end). Эти выражения совместно с автоматной моделью системы подаются на вход инструментальному средству, осуществляющему проверку на модели.

Заключение

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

В качестве приоритетного направления дальнейших исследований можно выделить инструментальную поддержку предложенного подхода. В работе [8] показывается, как система метапрограммиро-вания JetBrains MPS [14] может быть использована как для разработки, так и для верификации автоматных программ. На текущий момент требования записываются в виде формул темпоральных логик, что может быть улучшено на основе описанного выше решения. Аналогично работам [13, 15, 16] может быть реализован помощник для интерактивного выбора необходимого ограничения и шаблона. Наконец, остается открытым ряд теоретических вопросов, таких как расширение набора шаблонов или запись существующих шаблонов на новом формализме.

Исследование проводится в рамках Федеральной целевой программы «Научные и научно-педагогические кадры инновационной России на 2009-2013 годы».

Литература

1. Поликарпова Н.И., Шалыто А.А. Автоматное программирование. - СПб: Питер, 2009. - 176 с. [Электронный ресурс]. - Режим доступа: http://is.ifmo.ru/books/_book.pdf, своб.

2. Васильева К.А., Кузьмин Е.В. Верификация автоматных программ с использованием LTL // Моделирование и анализ информационных систем. - 2007. - Т. 14. - № 1. - С. 3-14.

3. Кузьмин Е. В., Соколов В. А. Моделирование, спецификация и верификация «автоматных» программ // Программирование. - 2008. - № 1. - С. 38-60.

4. Кларк Э., Грамберг О., Пелед Д. Верификация моделей программ. Model Checking. - М.: Изд-во МЦНМО, 2002. - 416 с.

5. Гуров В.С., Яминов Б.Р. Технология верификации автоматных моделей программ без их трансляции во входной язык верификатора // Тезисы научно-технической конференции «Научное программное обеспечение в образовании и научных исследованиях». - СПбГУ ПУ, 2008. - С. 36-40 [Электронный ресурс]. - Режим доступа: http://is.ifmo.ru/download/2008-02-24_iaminov_verifikazija.pdf, своб.

6. Лукин М.А., Шалыто А.А. Автоматизация верификации визуальных автоматных программ / Материалы XV Международной научно-методической конференции «Высокие интеллектуальные технологии и инновации в образовании и науке». - СПбГПУ, 2008. - С. 296-297 [Электронный ресурс]. -Режим доступа: http://is.ifmo.ru/download/2008-02-25_politech_tezis.pdf, своб.

7. Kurbatsky E. Verification of Automata-Based Programs // Proceedings of the Second Spring Young Researchers Colloquium on Software Engineering. - 2008. - V. 2. - Р. 15-17 [Электронный ресурс]. - Режим доступа: http://is.ifmo.ru/verification/_kurbatsky_syrcse.pdf, своб.

8. Степанов О.Г. Методы реализации автоматных объектно-ориентированных программ. Диссертация на соискание ученой степени кандидата технических наук. - СПбГУ ИТМО, 2009. - Режим доступа: http://is.ifmo.ru/disser/stepanov_disser.pdf, своб.

9. Мейер Б. Объектно-ориентированное конструирование программных систем. - М.: Русская редакция, 2005. - 1204 с.

10. Dwyer M.B., Avrunin G.S., Corbett J.C. Property Specification Patterns for Finite-state Verification // Proceedings of the 2nd Workshop on Formal Methods in Software Practice. - 1998.

11. Dwyer M.B., Avrunin G.S., Corbett J.C. Patterns in Property Specifications for Finite-state Verification // Proceedings of the 21st International Conference on Software Engineering. - 1999.

С.И. Бастраков, Р.В. Донченко, И.Б. Мееров, А.Н. Половинкин

12. Веб-сайт кафедры «Технологии программирования» [Электронный ресурс]. - Режим доступа: http://is.ifmo.ru/, своб.

13. Konrad S., Cheng B.H.C. Facilitating the Construction of Specification Pattern-based Properties // Proceedings of the IEEE International Requirements Engineering Conference. - 2005.

14. JetBrains Meta Programming System [Электронный ресурс]. - Режим доступа: http://www.jetbrains.com/mps/index.html, своб.

15. Smith R.L., Avrunin G.S., Clarke L.A., Osterweil L.J. PROPEL: An Approach Supporting Property Elucidation // Proceedings of the 24th Int'l. Conference on Software Engineering. - 2002.

16. Mondragon O., Gates A.Q., Roach S. Prospec: Support for Elicitation and Formal Specification of Software Properties // Proceedings of Run-time Verification Workshop. - 2004.

Клебанов Андрей Александрович - Санкт-Петербургский государственный университет информационных

технологий, механики и оптики, магистрант, klebanov.andrey@gmail.com

Степанов Олег Георгиевич - Санкт-Петербургский государственный университет информационных

технологий, механики и оптики, кандидат технических наук, ассистент, oleg.stepanov@gmail.com

Шалыто Анатолий Абрамович - Санкт-Петербургский государственный университет информационных

технологий, механики и оптики, доктор технических наук, профессор, заведующий кафедрой, shalyto@mail.ifmo.ru

УДК 519.863:336.714

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

ОПЦИОНОВ ЕВРОПЕЙСКОГО ТИПА

С.И. Бастраков, Р.В. Донченко, И.Б. Мееров, А.Н. Половинкин

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

Введение

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

Постановка задачи и метод решения

Цена европейского опциона, основанного на облигации, может быть вычислена по следующим формулам [4, 5]:

s

-jr(u)du

C

где t - текущий момент времени; s - срок исполнения опциона; P(s, T) - цена в момент времени s облигации со сроком погашения T; К - цена исполнения опциона; r(t) - краткосрочная безрисковая ставка в момент времени t. Искомая величина - цена опциона C = C(0, s). (Дополнительная информация об использованных понятиях может быть получена из работы [4]). Математическая постановка задачи, метод решения и вычислительная схема подробно описаны в [5]. Приведем краткое описание схемы проведения вычислений на концептуальном уровне.

Задача решается методом Монте-Карло.