Научная статья на тему 'Проектирование бизнес-систем с использованием формальных методов'

Проектирование бизнес-систем с использованием формальных методов Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
237
37
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ФОРМАЛЬНЫЕ МЕТОДЫ / EVENT-B / ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ / ТЕСТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ / FORMAL METHODS / SOFTWARE DESIGN / SOFTWARE TESTING

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Татьяна Николаевна Романова, Татьяна Вячеславовна Вотева

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

DESIGNING BUSINESS - SYSTEMS USING FORMAL METHODS

The paper presents an approach for software design using formal Event-B models within the Agile methodology. An example of designing payment systems on the Rodin platform with code and tests generation in Java based on the proposed approach is presented.

Текст научной работы на тему «Проектирование бизнес-систем с использованием формальных методов»

Open Source Systems (OSS 2020). - IFIP Advances in Information and Communication Technology, V. 582. - Springer, 2020. - doi:10.1007/978-3-030-47240-5_17.

12 Po L., Bikakis N., Desimoni F., Papastefanatos G. Linked Data Visualization Techniques, Tools, and Big Data. - Morgan & Claypool Publishers. 2020. doi: 10.2200/S00967ED 1V01Y201911WBE019.

Сведения об авторах

Константин Сергеевич Николаев

Инженер

Казанский федеральный университет Казань, Россия

Эл. почта: konnikolaeff@yandex.ги

Александр Витальевич Кириллович

Канд. техн. наук, науч. сотр. Казанский федеральный университет Казань, Россия

Эл. почта: gmail.com

Information about authors

Konstantin Nikolaev

Engineer

Kazan Federal University Kazan, Russia

E-mail: konnikolaeff@yandex. ru

Alexander Kirillovich

PhD in Computer Science, Researcher Kazan Federal University Kazan, Russia

E-mail: alik.kirillovich@gmail.com

УДК 004.415.28 Т.В. Вотева, Т.Н. Романова

ГРНТИ 20.15.05 МГТУ им. Н.Э. Баумана

ПРОЕКТИРОВАНИЕ БИЗНЕС-СИСТЕМ С ИСПОЛЬЗОВАНИЕМ ФОРМАЛЬНЫХ МЕТОДОВ

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

Ключевые слова: формальные методы, Event-B, проектирование программного обеспечения, тестирование программного обеспечения.

T.V. Voteva, T.N. Romanova

Bauman Moscow State Technical University

DESIGNING BUSINESS - SYSTEMS USING FORMAL METHODS

The paper presents an approach for software design using formal Event-B models within the Agile methodology. An example of designing payment systems on the Rodin platform with code and tests generation in Java based on the proposed approach is presented. Keywords: formal methods, Event-B, software design, software testing.

Введение

Современные системы становятся все более сложными, а безопасность становится все более важной проблемой. Поэтому разработчики программных комплексов всё чаще стали обращаться к формальному подходу при проектировании систем, поскольку он предлагает другой и более высокий уровень страхования. Формальные методы - это методы проектирования систем, которые используют строго определенные математические модели для построения программных и программно-аппаратных комплексов [1]. Основные принципы системы должны быть подтверждены, прежде чем они будут приняты, поэтому разработчики программного обеспечения используют математическое доказательство в качестве дополнения к тестированию и верификации системы для обеспечения её правильного поведения.

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

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

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

• обеспечить требуемое поведение в спецификации системы;

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

Существует множество различных инструментов и программных языков для создания формальных моделей. Широко известны такие формальные нотации как Z, TLA+, Classical B, Event-B, LTL. Разнообразие доступных формальных инструментов является результатом различных подходов к методам проектирования и доказательств, применяемых для конкретных областей разработки ПО. Кроме того, для разных этапов создания системы могут потребоваться различные инструменты и методы. В настоящее время существуют различные методологии разработки ПО, применимость которых обусловлена масштабом и сложностью системы, а также размером бюджета на разработку программного продукта.

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

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

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

Концепция формального подхода при использовании Agile-методологии

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

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

В работе приведен пример проектирования, разработки и тестирования ПО на основе предложенного подхода. В качестве формального языка выбран язык Event-B, а программная реализация представляется в виде JML-аннотированного кода на Java.

Метод Event-B

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

Метод Event-B появился в результате эволюции классического метода B, который успешно применялся при разработке многих критических программных систем. Наиболее известными являются автоматизированная система управления линией №14 Парижского метро, система управления экспрессом Парижского аэропорта. Event-B формализует процесс описания свойств и динамического поведения системы, а также обеспечивает контроль за соблюдением этих свойств в процессе функционирования на основе механизма предусловий [5].

При использовании Event-B спецификация системы представляется в виде ее формальной модели, которая состоит из контекстов и машин. Их основными элементами являются:

• набор системных переменных, конкретное значение которых отображает текущее состояние системы;

• инварианты - набор свойств, истинность которых должна быть соблюдена на протяжении всей работы системы;

• события, возникающие внутри системы или за ее пределами и переводящие системы из одного состояния в другое путем выполнения определенных операций, изменяющее значение системных переменных, в качестве реакции на определенное событие;

• набор предусловий на каждое событие [6].

Модели Event-B могут быть разработаны с использованием бесплатной платформы Rodin. Платформа представляет собой интеграционную среду разработки на основе языка Eclipse. Она содержит текстовый редактор для моделей Event-B, а также предоставляет средства для автоматического тестирования и поддержки интерактивных доказательств. Функциональность Rodin можно расширить за счет множества плагинов для моделирования, анимации, визуализация и генерации кодов [7].

Для реализации данного подхода были использованы следующие языки:

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

Java Modeling Language (JML) - язык для описания спецификаций для программ на языке Java. В основе JML лежит парадигма дизайна по контракту, которая предусматривает определение разработчиками ПО формальных спецификаций, ключевыми элементами которых являются предусловия, постусловия и инварианты класса. В программном коде такие конструкции представляются в виде Java-аннотаций, которые могут быть записаны в одном из следующих выражений: «/*@ <JML спецификация> @*/» или «//@ <JML спецификация>». Стандартный компилятор Java рассматривает их как комментарии и игнорирует [8].

Существует большое количество инструментов с различной функциональностью, которые поддерживают JML. Наиболее простой способ проверить код на соответствие спецификации - это произвести проверку во время его выполнения. JML-компилятор (jmlc) запускает аннотированный код на Java и динамически проверяет соответствие типов и нарушение спецификации. Существуют также инструменты, предназначенные для статической (ESC / Java2) и формальной проверки (KeY, Loop, JACK). Эти инструменты не требуют запуска приложения и способны решать гораздо более сложные задачи, но в отличие от jmlc требуют вмешательства пользователя.

В рамках данной работы для автоматизации данного подхода разработан плагин для платформы Rodin, который генерирует код и тесты на Java на основе формальных моделей Event-B. Инструмент осуществляет перевод всех функций и свойств модели Event-B, таких как переменные, константы, аксиомы, инварианты и события с помощью Rodin API. Плагин создает Java класс для каждой машины. Например, машина с именем «Person» будет переводиться как класс «Person.java». Событие инициализации машины переводится как конструктор класса, который выделяет память для атрибутов в соответствии с их типами, например таких как «имя», «возраст» и т. д. Событиям Event-B соответствуют функции на Java. Инварианты, предусловия и постусловия задаются с помощью JML-аннотаций. С помощью данного инструмента можно также сгенерировать код для неполных и абстрактных моделей Event-B, дополняя их уже

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

Рассмотрим применение данного метода на примере систем платежных переводов. Платежная система представляет собой сервис для перевода денег или иных средств, их заменяющих (чеки, сертификаты, условные платёжные единицы или специализированные ценные бумаги), в электронной или физической форме. Платежная система устанавливает определенный набор правил для передачи денежных средств от одной стороны другой. В настоящее время существуют различные виды таких систем: международные (например, Visa, Mastercard, МИР), внутрибанковские, электронные платежные системы (например, электронные кошельки, такие как PayPal, WebMoney, QIWI) [9]. Несмотря их большое разнообразие, все платежные системы имеют ряд общих функций и ограничений. Следовательно, для них можно определить некую общую абстрактную модель, а затем уточнить ее, исходя из конкретной спецификации бизнес-системы. В качестве примера рассмотрим платежи через электронные кошельки. Электронный кошелек является аналогом банковского счета. Он позволяет пользователю хранить электронные деньги и производить с их помощью безналичные расчеты в интернете. Можно выделить следующие общие функции для электронных кошельков:

1. Внесение денежных средств на кошелек;

2. Частичное изъятие средств из кошелька;

3. Холдирование средств на кошельке (резервирование или замораживание некоторой суммы на счете кошелька);

4. Списание холдированных средств со счета кошелька.

В рамках операций над кошельком действуют следующие ограничения:

1. Баланс кошелька не может быть меньше нуля;

2. Баланс кошелька не может быть больше определенного установленного значения;

3. Сумма изъятия средств из кошелька не может быть больше текущего баланса.

Определим формальную модель «Электронный кошелек» на основе изложенных выше функций и ограничений. На Листинге 1 определены граничные условия данной формальной модели, описанные на языке Event-B. Здесь указаны ее глобальные атрибуты, такие как «amount» и «hold_amount», которые соответствуют доступному и зарезервированному балансу кошелька соответственно (в копейках). В блоке «INVARIANTS» обозначены типы атрибутов, а также требования для баланса кошелька, которые должны соблюдаться на протяжении всей работы системы.

MACHINE wallet SEES ctx

VARIABLES

amount hold_amount

INVARIANTS

@inv1 amountGZ @inv2 hold_amount£Z @inv3 amount > 0 @inv4 hold_amount > 0

@inv5 amount + hold_amount < MAX_AMOUNT

EVENTS

INITIALISATION:

THEN act1: amount := 0

act2: hold_amount — 0 END

Листинг 1. Фрагмент формальной модели «Электронный кошелек».

Определение граничных условий и инициализация переменных

Такой фрагмент машины Event-B на языке Java представлен на Листинге 2.

public class Wallet {

public static final ghost Integer MAX_AMOUNT; @*/ Integer amount; Integer holdAmount;

/*@ invariant

amount >= 0 && holdAmount >= 0 &&

amount + holdAmount <= MAX_AMOUNT; @*/ /*@ initially

amount == 0 && holdAmount == 0; @*/

''' }

Листинг 2. Сгенерированный фрагмент класса на языке Java по модели «Электронный кошелек». Объявление переменных и инвариантов

Кошелек может быть пополнен на некоторую сумму денег («pay_amount»). Назовем данное событие «pay_in». Событие пополнения может произойти, только когда выполняются некоторые предусловия, а именно: сумма пополнения кошелька должна быть больше нуля и при этом суммарный баланс кошелька не должен превышать определенного установленного значения. Данные предусловия можно представить в виде следующих предикатов:

P(pay_amount): pay_amount е Z A pay_amount > 0

В (amount, hold_amount, pay_amount) : amount + hold_amount + pay_amount < MAX_AMOUNT

На формальном языке Event-B событие пополнения кошелька будет представлено следующим образом (Листинг 3):

EVENT pay_in ANY

pay_amount WHERE

@grd1 pay_amount е Z @grd2 pay_amount > 0 BEGIN

@act1 amount := amount + pay_amount

END

Листинг 3. Фрагмент формальной модели «Электронный кошелек».

Событие пополнения кошелька

Для данного события генерируется соответствующий метод на Java, представленный на Листинге 4.

/*@ requires payAmount > 0;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

ensures amount == \old(amount) + payAmount;

@*/

public void payIn(Integer payAmount)

{

// user defined code

}

Листинг 4. Сгенерированный фрагмент класса на Java по модели «Электронный кошелек». Метод пополнения кошелька

Для данного события генерируется соответствующий тест на Java, который представлен на Листинге 5.

@Test

public void payInTest() {

Wallet wallet = new Wallet(); Integer oldAmount = wallet.amount; Integer payAmount = generatePayAmount(); wallet.payln(payAmount);

Assert.assertEquals(oldAmount + payAmount, wallet.amount);

}

Листинг 5. Сгенерированный тест на Java для метода пополнения кошелька модели «Электронный кошелек»

Аналогичным образом можно произвести генерацию кода для других событий модели на формальном языке Event-B.

Заключение

Авторы считают, что в данной работе были достигнуты следующие результаты:

1. Разработан метод, который позволяет спроектировать, разработать и провести тестирование ПО с помощью формальной модели Event-B и языка описания спецификаций JML.

2. Для автоматизации данного подхода разработан плагин для платформы Rodin, который генерирует код и тесты на Java на основе модели Event-B.

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

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

5. Разработанный метод и плагин уже применяются при проектировании, верификации и тестировании новой банковской системы.

Литература

1. M. Collins. Formal Methods // Carnegie Mellon University. Режим доступа: https://users.ece.cmu.edu/~koopman/des_s99/formal_methods/ (дата обращения 17.09.2019).

2. Abrial J.R. Modeling in Event-B: System and Software Design // Cambridge University Press (New York, USA, 2010). P. 260.

3. Формальные методы в agile-разработке. Режим доступа: https://www.osp.ru/os/2014/09/13043851 (дата обращения 05.10.2019).

4. Christel Baier, Joost-Pieter Katoen. Principles of model checking // Cambridge University Press (New York, USA, 2008). P. 11.

5. Abrial J.R. Rodin: an open toolset for modelling and reasoning in Event-B // International Journal on Software Tools for Technology Transfer. 2010. V. 12 (6). P. 447-466.

6. Modeling in Event-B: System and Software Engineering // Event-B.org. Режим доступа: http://www.event-b.org/ (дата обращения 08.10.2019).

7. Michael Jastram. Rodin User's Handbook. P. 9-11.

8. The Java Modeling Language // Режим доступа: http://www.eecs.ucf.edu/~leavens/JML//index.shtml (дата обращения 10.03.2020).

9. Платежные системы // Информационный портал «Микрофинансирование в России». Режим доступа: http://rusmicrofinance.ru/news/history/payment-system/ (дата обращения 07.10.2019).

Сведения об авторах

Татьяна Николаевна Романова

канд. физ.-мат. наук, доцент,

факультет Информатика и системы управления

МГТУ им. Н.Э. Баумана,

Москва, Россия

Эл. почта: rtn@bmstu.ru

Татьяна Вячеславовна Вотева

студентка магистратуры,

факультет Информатика и системы управления МГТУ им. Н.Э. Баумана, Москва, Россия

Эл. почта: tatianavoteva@gmail.com

Information about authors

Tatiana Nikolaevna Romanova

Ph.D. Physical and mathematical sciences, Associate Professor, Department of Computer Science and Control Systems

Bauman Moscow State Technical University Moscow, Russia E-mail: rtn@bmstu.ru

Tatiana Vyacheslavovna Voteva

Master's degree student, University, Department of Computer Science and Control Systems Bauman Moscow State Technical Moscow, Russia E-mail: tatianavoteva@gmail. com

УДК 332.12 А.А. Урасова

ГРНТИ 06.52 Институт экономики УрО РАН

СКВОЗНЫЕ ТЕХНОЛОГИИ УПРАВЛЕНИЯ ПРОМЫШЛЕННОСТЬЮ СОВРЕМЕННОЙ РОССИИ

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

А.А. Urasova

Ural Branch of the Russian Academy of Sciences

ADVANCED TECHNOLOGIES OF MANAGEMENT OF THE INDUSTRY OF MODERN RUSSIA

The article discusses the main end-to-end technologies used in Russian industries in the context of dig-italization. The complex of technologies contributes to the transition of industry to a new technological mode in the conditions of industry 4.0.

Keywords: end-to-end technologies, digitalization, industry, industries, technological structure.

В современном научно-технологическом развитии России обозначилось несколько значимых факторов, определяющих перспективы в системе управления. Среди таких факторов можно отметить: инновационный цикл товара; технологии нового уклада; промышленная четвертая революция [1] и пр. Кроме того, среди основных тенденций в развитии фундаментальных наук наблюдается возрастание доли междисциплинарных исследований, появление новых технологий обработки информации, рост конкуренции на рынке квалифицированных трудовых ресурсов.

i Надоели баннеры? Вы всегда можете отключить рекламу.