Методы и инструментальные средства формальной верификации функционально-потоковых параллельных программ
Введение …………………………………….. 5
1 Методы и средства формальной верификации программ . . . . . . . . . . . 11
1.1 Классификацияошибоквпрограммах …………………… 11
1.2 Методыверификациипрограмм………………………. 12
1.2.1 Классификация формальных методов верификации программ . . . . . . . 13
1.2.2 Методыпроверкимоделей ……………………… 16
1.2.3 Методыдедуктивногоанализа ……………………. 17
1.2.4 Применимость формальных методов к верификации ФПП программ . . . 21
1.2.5 Методыдоказательствазавершенияпрограмм . . . . . . . . . . . . . . . . 23
1.3 Инструментальная поддержка доказательства корректности программ . . . . . 27
1.3.1 Уточняющиетипы ………………………….. 27
1.3.2 Контрактноепрограммирование …………………… 28
1.3.3 ВерификаторBoogie…………………………. 29
1.3.4 Верификация Java-программ со спецификацией на JML . . . . . . . . . . 31
1.3.5 СредстваверификацииС-программ …………………. 32
1.3.6 Предикатноепрограммирование …………………… 34
1.3.7 Обобщённая схема инструментальных средств и её применимость к ФПП
программам……………………………… 35
1.3.8 Инструментальная поддержка доказательства теорем . . . . . . . . . . . . 37
Выводы …………………………………….. 40
2 АксиоматическаясемантикаФППпрограмм ………………. 41
2.1 СемантикаязыкаПифагор…………………………. 41 2.1.1 Общие принципы организации модели вычислений . . . . . . . . . . . . . 41 2.1.2 Этапывыполненияоператораинтерпретации . . . . . . . . . . . . . . . . 42 2.1.3 СемантикатиповданныхязыкаПифагор………………. 43
2.2 СпецификациясвойствпрограммнаязыкеПифагор. . . . . . . . . . . . . . . . 46 2.2.1 Систематиповязыкаспецификации…………………. 48 2.2.2 Синтаксисязыкаспецификации …………………… 48 2.2.3 Семантикаязыкаспецификации …………………… 51 2.2.4 Теорииязыкаспецификации …………………….. 52 2.2.5 Совместимость языка спецификации с системой HOL . . . . . . . . . . . . 58
2.3 АксиоматическаятеорияязыкаПифагор …………………. 59
3
2.3.1 Языкаксиоматическойтеории ……………………. 59 2.3.2Аксиомы……………………………….. 61 2.3.3 Правилавывода …………………………… 63
2.4 Преобразования информационного графа с разметкой . . . . . . . . . . . . . . . 67 2.4.1 Разметкадуг …………………………….. 68 2.4.2Свёртка……………………………….. 71 2.4.3 Изменениеинформационногографа…………………. 77
Выводы …………………………………….. 83
3 ФормальнаяверификацияФППпрограмм ……………….. 84
3.1 Доказательство корректности рекурсивных функций . . . . . . . . . . . . . . . 84 3.1.1 Доказательство частичной корректности рекурсивной функции . . . . . . 85 3.1.2 Доказательствозавершениярекурсии………………… 89
3.2 Верификацияпрограммсовзаимнойрекурсией. . . . . . . . . . . . . . . . . . . 92 3.2.1 Универсальнаярекурсивнаяфункция………………… 94 3.2.2 Объединениефункций………………………… 95 3.2.3 Алгоритм преобразования произвольной рекурсии в прямую . . . . . . . . 96 3.2.4 Преобразование рекурсивных функций на языке Пифагор . . . . . . . . . 97
Выводы …………………………………….. 110
4 Инструментальная поддержка формальной верификации ФПП программ 112
4.1 Реализациясистемы ……………………………. 114
4.2 МодульподдержкиРИГ ………………………….. 114
4.2.1 Текстовое и внутренне представление информационного графа программы 115
4.2.2 ОсновныефункциимодуляподдержкиРИГ . . . . . . . . . . . . . . . . . 116
4.3 Модульподдержкитермов…………………………. 117 4.3.1 Текстовоепредставлениетермов …………………… 117 4.3.2 Внутреннеепредставлениетермов ………………….. 118 4.3.3 Трансляция термов из текстового представления во внутреннее . . . . . . 122 4.3.4 Основныефункциимодуляподдержкитермов . . . . . . . . . . . . . . . . 123
4.4 МодульподдержкиИГР ………………………….. 123 4.4.1 Внутренне представление информационного графа с разметкой . . . . . . 123 4.4.2 ОсновныефункциимодуляподдержкиИГР . . . . . . . . . . . . . . . . . 124
4.5 Модульподдержкидеревадоказательства…………………. 127
4.6 Модульподдержкибиблиотекиаксиомитеорем . . . . . . . . . . . . . . . . . . 128 4.6.1 Внутреннепредставлениеаксиомитеорем ……………… 128
4
4.6.2 Основные функции модуля поддержки библиотеки аксиом и теорем . . . 130 4.7 Интерфейспользователя………………………….. 130 4.7.1 РедакторИГР ……………………………. 131 4.7.2 Редакторузловдеревадоказательства ……………….. 137 4.7.3 Управлениебиблиотекойаксиомитеорем ……………… 137 Выводы …………………………………….. 138
Заключение ……………………………………140 Списоклитературы ………………………………. 141 Списоксокращений ………………………………. 157 ПриложениеА Актыовнедрении ……………………… 158 Приложение Б Семантика встроенных функций языка Пифагор . . . . . . . 160 Приложение В Стандартные теории языка спецификации . . . . . . . . . . . 168 Приложение Г Описание условий корректности ФПП программ с помощью
| логики HOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Приложение Д Аксиомы встроенных функций языка Пифагор . . . . . . . . 181 Приложение Е Примеры верификации рекурсивных функций . . . . . . . . . 186 Приложение Ж Частный случай рекурсии с явно выраженным
| рекуррентнымсоотношением ………………. 198 Приложение З Алгоритм работы системы поддержки доказательства . . . . 204 Приложение И Пример текстового представления РИГ . . . . . . . . . . . . . 205 Приложение К Синтаксис текстового представления языка спецификации 206 Приложение Л Входные данные глобального окружения . . . . . . . . . . . . 209 Приложение М Диаграмма лексического анализа текстового
| представлениятермов …………………… 212 Приложение Н Диаграмма синтаксического анализа текстового
| представлениятермов …………………… 213 Приложение О Пример текстового представления ИГР . . . . . . . . . . . . . 215
Актуальность темы и степень её разработанности. Постоянный рост объёма разрабатываемых программных систем и их ориентация на параллельную обработку дан- ных ведут к увеличению сложности программного обеспечения (ПО), что, в свою очередь, повышает вероятность возникновения различных ошибок. Традиционный способ обеспече- ния надёжности программ путём тестирования не может полностью удовлетворить возрас- тающие требования практического использования. Альтернативой тестированию являются методы формальной верификации, которые обеспечивают анализ всех возможных вариан- тов поведения системы. Формальная верификация — это формальное доказательство того, что программа соответствует своей спецификации [1, 2]. Методы формальной верификации позволяют доказать отсутствие ошибок в программе, в то время как тестирование лишь выявляет ошибки, но не даёт гарантии их отсутствия.
Существуют разнообразные подходы к формальной верификации программ [3]. Основ- ными являются методы проверки моделей [4], дедуктивный анализ [1], различные варианты уточнения программ [5, 6].
В настоящее время достигнуты определённые успехи в практическом применении фор- мальной верификации к последовательным программам. Разработан ряд систем для под- держки этого процесса. В качестве примера можно привести верификаторы программ на языке Си: Boogie [7] и система СПЕКТР [8]; системы для верификации объектно-ориентиро- ванных программ на Java: LOOP [9] и KeY [10]; системы для верификации функциональных программ: DSOLVE [11], HSOLVE [12].
Параллельное программирование позволяет существенно увеличить производитель- ность на современных вычислительных системах. Однако параллелизм приводит к значи- тельному усложнению разработки, а особенно отладки и верификации программ. Непосред- ственная ориентация современного параллельного программирования на существующие ар- хитектуры затрудняет формальную верификацию, так как наряду с логической корректно- стью программ приходится исследовать и влияние ресурсных ограничений, порождающих дополнительные ошибки. Ситуация может быть улучшена, если при разработке параллель- ных программ на первоначальных этапах можно было бы избавиться от ресурсных конфлик- тов. Одним из таких подходом является архитектурно-независимое параллельное програм- мирование [13, 14, 15, 166]. Представитель данного направления — функционально-потоковая модель параллельных вычислений (ФПМПВ) и созданный на её основе язык программиро- вания Пифагор [16, 17]. Основными идеями подхода являются исключение ресурсных огра- ничений и неявное управление вычислениями. В функционально-потоковой параллельной (ФПП) программе описываются только информационные связи между выполняемыми функ-
6
циями. Взаимодействие между функциями при этом осуществляется по готовности данных, что позволяет создавать программы с неограниченным параллелизмом, «сжатие» которого к конкретным вычислительным ресурсам и условиям эксплуатации будет происходить после верификации и отладки написанных программ [166, 167].
Перспективным видится то, что в отсутствии ресурсных ограничений основной упор в разработке параллельных программ и их анализе можно сделать именно на формальную верификацию при отсутствии ресурсных конфликтов. Вместе с тем следует отметить, что вопросы, связанные с формальной верификацией, в рамках данного направления практиче- ски не проработаны. Имеются работы, связанные с организацией отладки ФПП программ и использованием методов верификации для анализа корректности данных, не связанных с формальным доказательством логической корректности кода [18, 19, 168, 169].
Поэтому актуальной является разработка формальных методов и средств верифика- ции для языка функционально-потокового параллельного программирования, обеспечиваю- щих проверку логики функционирования программ.
Цель и задачи исследования. Целью работы является повышение надёжности и корректности функционально-потоковых параллельных программ посредством разработки методов формальной верификации.
Для достижения указанной цели в работе решаются следующие задачи:
— проанализировать существующие подходы к формальной верификации и возмож- ности их использования при функционально-потоковом параллельном программировании;
— формально описать семантику языка ФПП программирования Пифагор для фор- мирования основы методов анализа ФПП программ;
— разработать методы, обеспечивающие формальную верификацию ФПП программ;
— разработать инструментальное средство, обеспечивающее поддержку методов фор- мальной верификации ФПП программ.
Объектом исследования является функционально-потоковая модель параллельных вычислений и язык функционально-потокового параллельного программирования.
Предметом исследования являются методы и средства формальной верификации функционально-потоковых параллельных программ.
Научная новизна.
1. Для доказательства корректности функционально-потоковых параллельных про- грамм, написанных на языке Пифагор, впервые разработан метод верификации на базе ис- числения Хоара, эквивалентный по сложности методам доказательства корректности для по- следовательных программ, но позволяющий доказывать корректность программы без огра-
7
ничения параллелизма, что обеспечивается концепцией неограниченных вычислительных ре- сурсов.
2. Для доказательства завершения функционально-потоковых параллельных прог- рамм впервые предложен метод, использующий ограничивающую функцию, который до- пускает изменение спецификации программы таким образом, чтобы доказательство частич- ной корректности одновременно характеризовало и завершение программы. Это позволяет строить инструментальные средства поддержки доказательства на одной общей основе.
3. Для функционально-потоковых параллельных программ впервые предложен метод удаления взаимной рекурсии нескольких функций, позволяющий преобразовывать произ- вольную функцию в функцию с прямой рекурсией, это повышает эффективность верифика- ции за счёт преобразования программы только к одной функции.
4. Впервые разработана архитектура и реализован прототип инструментального сред- ства, обеспечивающего поддержку верификации функционально-потоковых параллельных программ с помощью предложенных методов. Это позволяет упростить процесс формаль- ной верификации за счёт наглядной визуализации дерева доказательства и автоматизации преобразований графа анализируемой функции.
Положения, выносимые на защиту.
1. Разработанный метод верификации на базе исчисления Хоара для ФПП программ на языке Пифагор позволяет доказывать частичную корректность ФПП программ.
2. Разработанный метод доказательства завершения ФПП программ совместно с ме- тодом верификации позволяет доказать тотальную корректность программы.
3. Предлагаемый метод удаления взаимной рекурсии нескольких функций позволяет преобразовать любую рекурсивную функцию ФПП программы в прямую рекурсию, чтобы применить к ней метод верификации.
4. Разработанный прототип инструментального средства для поддержки верифика- ции ФПП программ позволяет визуализировать процесс доказательства и автоматизирует построение дерева доказательства для упрощения процесса формальной верификации.
Теоретическая и практическая значимость работы. Результаты работы могут быть использованы для повышения эффективности разработки параллельных программ. На основе предложенных методов формальной верификации разработано инструментальное средство, обеспечивающее поддержку верификации функционально-потоковых параллель- ных программ.
Исследование выполнено при финансовой поддержке РФФИ в рамках научных про- ектов No 13-01-00360, No 17-07-00288 и ФЦП «Научные и научно-педагогические кадры инно- вационной России» No 14.А18.21.0396.
8
Полученные научные и практические результаты использованы в учебном процессе на кафедре вычислительной техники и кафедре высокопроизводительных вычислений Ин- ститута космических и информационных технологий СФУ при изучении дисциплин «Техно- логии разработки программного обеспечения», «Параллельное программирование», «Высо- копроизводительные вычисления на графических процессах» и при выполнении выпускных квалификационных работ.
Результаты исследования использованы при разработке функционально-потоковых параллельных программ для процесса высокоуровневого проектирования цифровых схем на базе функционально-потоковой парадигмы. Для разработки ФПП программ использовалась формализованная семантика языка Пифагор, проводилась формальная верификация ФПП программ перед их преобразованием в программы для сверхбольших интегральных схем.
Результаты практического применения диссертационного исследования подтвержде- ны актами о внедрении (приложение А).
Методы исследования. В работе использовались элементы теории множеств, ме- тоды математической логики (различные логики и аксиоматические теории, -исчисление, метод доказательства теорем на основе исчисления Хоара, методы доказательства заверше- ния программ на базе трансфинитной индукции), методы теории рекурсивных функций (по- строение универсальной рекурсивной функции для удаления взаимной рекурсии нескольких функций), элементы теории графов, методы и понятия теории алгоритмов, теории языков программирования, теории языков и формальных грамматик, теория разработки транслято- ров. Для описания результатов использовались UML-диаграммы, диаграммы Вирта и формы Бэкуса-Наура.
При создании программных инструментов использовались структурное и объектно- ориентированное программирование, кросс-платформенная библиотека Qt.
Апробация работы. Основные положения диссертации докладывались и обсуж- дались на 15 конференциях и семинарах, основные из которых: Международная научная конференция «Параллельные вычислительные технологии» (Челябинск, 2013; Ростов-на- Дону, 2018), Parallel Computing Technologies International Conference (Санкт-Петербург, 2013), Международная конференция «IX Сибирский конгресс женщин-математиков» (Красноярск, 2016), Всероссийская научная конференция памяти А.Л. Фуксмана «Языки программирова- ния и компиляторы» (Ростов-на-Дону, 2017), Международная конференция «Суперкомпью- терные дни в России» (Москва, 2018).
Получено два свидетельства о регистрации программного обеспечения (2013, 2021).
По теме диссертации опубликовано двадцать три научные работы; из которых шесть статей в изданиях, рекомендуемых ВАК; три статьи входят в список Web of Science Core
9
Collection; пять статей индексируется в Scopus.
Личный вклад автора. Основные результаты являются новыми и получены лично
автором. Автором проведён значительный объём научных изысканий, подготовлены публи- кации; предложен метод верификации на базе исчисления Хоара и доказательства завер- шения ФПП программ на языке Пифагор; предложен метод удаления взаимных рекурсий нескольких функций в программах на языке Пифагор; разработано инструментальное сред- ство поддержки формальной верификации ФПП программ. Научные работы, опубликован- ные в соавторстве с научным руководителем, заключаются в разработке метода формальной верификации ФПП программ на основе дедуктивного анализа; разработке архитектуры ин- струментального средства поддержки формальной верификации ФПП программ. Совместно с научным руководителем автор осуществлял постановку целей и задач и анализ полученных результатов. В совместных публикациях автора с Удаловой Ю.В. включен разработанный автором метод доказательства завершения программ на языке Пифагор. В совместных пуб- ликациях автора с Непомнящим О.В., Матковским И.В., Васильевым В.М. и Романовой Д.С. научные результаты автора являются дополнением к концепции разрабатываемого ими транслятора функционально-потоковых параллельных программ.
Структура работы. Диссертационная работа состоит из введения, 4 глав, заклю- чения, списка литературы, включающего 188 наименований, списка сокращений и 14 при- ложений. Работа изложена на 157 листах машинописного текста, содержит 41 рисунок, 6 таблиц.
Во введении приводится общая характеристика работы и даётся краткий обзор содер- жания диссертации.
В первом разделе проводится анализ существующих подходов к формальной верифи- кации программ. На основе проведённого анализа выбираются наиболее подходящие методы для верификации ФПП программ. Проводится анализ инструментальных средств поддержки формальной верификации программ. На основе анализа предлагается общая схема архитек- туры инструментального средства, подходящая для верификации ФПП программ.
Во втором разделе анализируются и предлагаются методы формальной верификации ФПП программ. Разрабатывается аксиоматическая система для верификации ФПП про- грамм на языке Пифагор, являющегося практическим воплощением ФПМПВ. Для этого проводится формализация семантики ФПП программ, выбирается язык спецификации для формулировки свойств ФПП программ, разрабатываются аксиомы и правила вывода аксио- матической системы. Предлагается наглядный способ проведения доказательства на инфор- мационном графе программы.
В третьем разделе рассматривается доказательство корректности функций, содержа-
10
щих рекурсию. Процесс доказательства разделяется на два этапа: доказательство частич- ной корректности и завершения программы. Предлагается метод доказательства завершения программы, расширяющий исчисление Хоара для доказательства тотальной корректности, и метод удаления взаимной рекурсии нескольких функций.
В четвёртом разделе представлена архитектура системы, обеспечивающей поддерж- ку доказательства корректности ФПП программ, написанных на языке Пифагор. Описан прототип системы, построенный на базе данной архитектуры. Данная система визуализиру- ет процесс доказательства. Часть этапов доказательства выполняется автоматически; для другой части этапов, проходящих в интерактивном режиме, система предоставляет всевоз- можные варианты пути доказательства, из которых пользователь выбирает допустимые.
В заключении формулируются основные результаты работы.
Автор благодарен научному руководителю профессору Легалову Александру Ивано- вичу за постановку задачи и внимание к работе. Признателен сотрудникам кафедры вычис- лительной техники Института космических и информационных технологий СФУ за хорошие условия работы над диссертацией.
Помогаем с подготовкой сопроводительных документов
Хочешь уникальную работу?
Больше 3 000 экспертов уже готовы начать работу над твоим проектом!