- •Введение
- •1 Описание предметной области
- •Общие понятия о верификации
- •Верификатор spin
- •Синтаксис языка Promela
- •Модель Крипке
- •Язык ltl
- •Автомат Бюхи
- •Концепция mvc
- •Постановка задачи
- •2 Описание методов решения
- •2.1 Выбор языка программирования
- •2.2 Архитектура приложения в фреймворке Yii2
- •3 Описание программной системы
- •3.1 Структура программного обеспечения
- •3.2 Описание основных разработанных классов
- •3.3 Модель данных
- •3.4 Системные требования к программному обеспечению
- •Заключение
- •Список использованных источников
Введение
Интернет с каждым днем приобретает все большую роль в производстве и повседневной жизни человека.
Данная работа посвящена созданию on-line средства для автоматической верификации автоматных программ. Практическим ее приложением явился инструмент, позволяющий строить модель программы и генерировать код, который в дальнейшем будет верифицироваться. Верификация производится с помощью метода Model Checking.
1 Описание предметной области
Общие понятия о верификации
Верификация модели программы – это один из основных методов поиска ошибок в программе. Для того, чтобы произвести верификацию программы, требуется:
Построить формальную модель, которая будет подходить для инструментальных средств верификации.
Сформулировать требования к модели на языке темпоральной логики. Также нужно помнить о полноте спецификации.
Произвести верификацию модели. Если модель не соответствует сформулированным требованиям, верификатор выдаст отчет с ошибкой, который поможет найти ошибку в программе. Также ошибка может появится в случае некорректной спецификации или неправильного построения модели. Отчет верификатора поможет устранить ошибку в формулировке спецификации или моделировании.
Верификатор spin
Существует большое число верификаторов, в том числе и с открытыми кодами. Наиболее популярным верификатором на данный момент является верификатор SPIN. На вход этот верификатор принимает код на языке Promela, сгенерированный по модели программы, и требования к модели, сформулированные на языке LTL. Далее по модели программы верификатор строит модель Крипке, а по требованиям к модели – автомат Бюхи. Затем строится пересечение модели Крипке и автомата Бюхи, и, если пересечение не пусто, выдается отчет с ошибкой.
Синтаксис языка Promela
Синтаксис языка Promela похож на синтаксис языка C. Модель состоит из следующих элементов:
объявление каналов передачи данных;
объявление типов данных;
определения и объявления процессов;
объявления переменных;
процесса init.
В принципе, процесс можно рассматривать как процедуру, выполняемую в отдельном потоке, соответственно процессы могут иметь локальные переменные и параметры. Также при использовании модификатора active, процесс можно запускать в нескольких экземплярах. Запуск осуществляется с помощью модификатора run. В языке Promela есть пять базовых типов данных: bit, bool, byte, short, int. Тело процесса представляет собой последовательность операторов. Операторы могут быть выполнимыми или заблокированными. Выполнимый оператор можно выполнить немедленно. Заблокированный оператор – это оператор, который выполнить мгновенно нельзя. Такой оператор блокирует выполнение процесса до тех пор, пока он не станет выполнимым. Например, оператор X < 7 может выполниться только когда X меньше семи. Пока условие не выполнено, процесс будет остановлен. Некоторые операторы, такие как оператор присваивания, всегда выполнимы.
Также язык Promela содержит операторы цикла и ветвления, синтаксис которых основан на охраняемых командах Дейкстры. Пример синтаксиса операторов цикла и ветвления приведен в таблице 1.1.
Таблица 1.1 – Синтаксис операторов цикла и ветвления
if :: guard1 → S1 :: guard2 → S2 … :: else → Sk fi |
do :: guard1 → S1 :: guard2 → S2 … :: else → Sk od |
Таблицу нужно понимать так: при условии выполнения guard выполняется действие Si. Если выполняются несколько условий, то недетерминированно выбирается одно из них. Если ни одно условие не выполняется, то выполняется действие Sk, соответствующее else. Конструкция else может отсутствовать. При этом выполнение процесса блокируется, пока хотя бы одно из условий не начнет выполняться.
