Научная статья на тему 'ПОСТРОЕНИЕ ГЕНЕРАТОРА ПРОГРАММНОГО КОДА ДЛЯ РЕШЕНИЯ ИНЖЕНЕРНЫХ ЗАДАЧ'

ПОСТРОЕНИЕ ГЕНЕРАТОРА ПРОГРАММНОГО КОДА ДЛЯ РЕШЕНИЯ ИНЖЕНЕРНЫХ ЗАДАЧ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
216
30
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
АВТОГЕНЕРАЦИЯ ПРОГРАММНОГО КОДА / РАЗРАБОТКА ПРОГРАММ / МОДЕЛЬ ПОТОКОВ ДАННЫХ / АРХИТЕКТУРА "КАНАЛЫ И ФИЛЬТРЫ"

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Минакова О.В., Трубников И.В., Курипта О.В.

Представлены результаты прототипирования генератора программного кода для потоковой обработки данных, предназначенного для использования инженерами различных специальностей без опыта программирования. Фреймворк осуществляет автоматическую генерацию программы по визуальной модели, составленной пользователем, что обеспечивает простоту и доступность самостоятельной разработки уникальных средств автоматизации. В качестве когнитивной модели представления инженерной задачи выбрана диаграмма потоков данных (DFD-нотация Йордана), которая широко известна, проста в понимании и хорошо согласуется с архитектурой «каналы и фильтры». Это позволило разработать веб-приложение для автоматической генерации программного кода с реализацией по шаблону Декоратор. Описание практической реализации фреймворка, генерирующего программный код на основе построенной пользователем диаграммы потоков данных, представлено в работе. Созданный прототип фреймворка сконструирован в стиле MVC, поддерживает собственный формат хранения данных, управляется из браузера и может быть использован для автоматизации обработки данных для различных инженерных задач. Результаты опытной эксплуатации кроссплатформенного программного обеспечения Generator Sourse Data Flow Diagram Framework детально проанализированы на примере расчета надежности вычислительной системы. Проведенные исследования подтвердили гибкость разработанного фреймворка для автоматизации сложноструктурированных задач при достаточной проработке исходной модели

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Минакова О.В., Трубников И.В., Курипта О.В.

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

BUILDING A SOFTWARE CODE GENERATOR FOR SOLVING ENGINEERING TASKS

The article presents the results of prototyping a program code generator for streaming data processing, intended for use by engineers of various specialties without programming experience. The framework automatically generates a program according to a visual model compiled by the user, which ensures simplicity and accessibility of independent development of unique automation tools. As a cognitive model for representing the engineering problem, we chose a data flow diagram (Jordan DFD notation), which is widely known, easy to understand, and is in good agreement with the “channels and filters” architecture. This allowed us to develop a web application for the automatic generation of program code with implementation according to the Decorator template. The paper presents a description of the practical implementation of a framework that generates program code based on a user-constructed data flow diagram. The prototype framework created is designed in the style of MVC, supports its own data storage format, is controlled from a browser and can be used to automate data processing for various engineering tasks. The results of the trial operation of the cross-platform software Generator Sourse Data Flow Diagram Framework are analyzed in detail on the example of calculating the reliability of a computer system. Studies confirmed the flexibility of the developed framework for automating complex structured tasks with a sufficient study of the original model

Текст научной работы на тему «ПОСТРОЕНИЕ ГЕНЕРАТОРА ПРОГРАММНОГО КОДА ДЛЯ РЕШЕНИЯ ИНЖЕНЕРНЫХ ЗАДАЧ»

DOI 10.25987/VSTU.2020.16.3.002 УДК 004.4'22

ПОСТРОЕНИЕ ГЕНЕРАТОРА ПРОГРАММНОГО КОДА ДЛЯ РЕШЕНИЯ

ИНЖЕНЕРНЫХ ЗАДАЧ

О.В. Mинакова, И.В. Трубников, О.В. Курипта

Воронежский государственный технический университет, г. Воронеж, Россия

Aннотация: представлены результаты прототипирования генератора программного кода для потоковой обработки данных, предназначенного для использования инженерами различных специальностей без опыта программирования. Фреймворк осуществляет автоматическую генерацию программы по визуальной модели, составленной пользователем, что обеспечивает простоту и доступность самостоятельной разработки уникальных средств автоматизации. В качестве когнитивной модели представления инженерной задачи выбрана диаграмма потоков данных (DFD-нотация Йордана), которая широко известна, проста в понимании и хорошо согласуется с архитектурой «каналы и фильтры». Это позволило разработать веб-приложение для автоматической генерации программного кода с реализацией по шаблону Декоратор. Описание практической реализации фреймворка, генерирующего программный код на основе построенной пользователем диаграммы потоков данных, представлено в работе. Созданный прототип фреймворка сконструирован в стиле MVC, поддерживает собственный формат хранения данных, управляется из браузера и может быть использован для автоматизации обработки данных для различных инженерных задач. Результаты опытной эксплуатации кроссплатформенного программного обеспечения Generator Sourse Data Flow Diagram Framework детально проанализированы на примере расчета надежности вычислительной системы. Проведенные исследования подтвердили гибкость разработанного фреймворка для автоматизации сложноструктурированных задач при достаточной проработке исходной модели

Ключевые слова: автогенерация программного кода, разработка программ, модель потоков данных, архитектура «каналы и фильтры»

Введение

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

В 1Т задача автоматизации создания кода рассматривается постоянно, и примером тому огромное разнообразие CASE-средств, скрип-товых языков, фреймворков и пр. Но эти средства ориентированы на ГГ-специалистов, пусть даже начинающих. Для рядовых пользователей активно разрабатываются когнитивные пользовательские интерфейсы, например, управления голосом, жестами и т.п.

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

© Минакова О.В., Трубников И.В., Курипта О.В., 2020

га они не применимы, ввиду сложности и громоздкости самой аналитической платформы.

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

Современный уровень развития информационных технологий позволяет не программисту решить задачу автоматизации путем создания собственных программ средней сложности, которые могут быть получены в ходе автоматической генерации программного кода по мета-модели [4].

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

Фреймворк - это программное обеспечение, предназначенное для создания пользова-

тельских программ в определенном стиле или заданной архитектуры. Если библиотека может быть использована в программном продукте просто как набор подсистем близкой функциональности, не влияя на архитектуру основного программного продукта и не накладывая на неё никаких ограничений, то фреймворк задает правила построения архитектуры приложения и определяет модель взаимодействия компонентов. Использование такого генератора позволяет получить программу с определенным поведением и управлением, функциональность которой может быть расширена пользователем. Это позволит специалистам инженерно-строительного профиля сосредоточиться на построении моделей обработки данных прикладной задачи, т.е. формализовать задачу до последовательности простых и известных решений, которые могут быть автоматизированы программным путем.

Цель работы - разработка фреймворка для генерации программного кода по визуально формализованной модели.

Задачи исследования:

- выбор метода формализации прикладной задачи для построения когнитивного пользовательского интерфейса инженера;

- реализация автогенерации программного кода;

- анализ полученного решения на прикладных задачах.

Постановка задачи

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

Методологии представления потоков данных (DFD) используются для моделирования информационных систем с 80-х годов прошлого века, общеизвестны и хорошо себя зарекомендовали. При моделировании функционирования ИС в виде потока данных вся программная система рассматривается как серия преобразований набора входных данных, где данные и операции не зависят друг от друга. То есть данные поступают в систему и передаются от одного модуля преобразования к другому, пока они не достигнут выхода либо хранилища данных.

Общая модель потоков данных представлена на рис. 1. В ней присутствуют:

Т - функции преобразования, в терминах программиста (П) - модули или компоненты, в терминах инженера (И) - задачи;

Бу - соединения (П: потоки ввода/вывода, И: последовательность задач).

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

Рис. 1. Модель потоков данных

Известны два варианта нотации DFD — Гейна-Сарсона и Йордана. Их сравнение [6] показало, что основное различие в визуальном представлении. Ввиду субъективно лучшей наглядности, а именно выраженного различия в форме представления «Process» и «External Entity» (круг против прямоугольника), для моделирования процесса обработки данных при разработке фреймворка была выбрана нотация Йордана.

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

Следует отметить, что между нотацией DFD и архитектурой «каналы и фильтры» можно провести аналогию. Если сопоставить элементы с нотацией DFD, то получится, что фильтр - это процесс, канал - это поток данных, источник и приемник данных - это внешние сущности. Для временных хранилищ не предусмотрены отдельные элементы, но этот момент может проектироваться дополнительно.

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

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

Проектирование фреймворка и выбор технологий его реализации

Проектирование осуществлялось в соответствии с концепцией МУС (Model-View-СоШ;го1ег). Моделью в нашем случае выступал процесс автогенерации программного кода, представлением - графический интерфейс пользователя.

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

У

Пользователь

Локальное хранилище

Попытка открыть файл

<-----Показ диаграммы-

Pe дактирование диаграммы

-----Показ диаграммы-

Попытка сохранить файл

Попытка генерации кода

-------Показ кода—

—Загрузка кода-

Возврат архив с кодом

—Загружает файл— Преобразование

Изменение внутренних данных

—Сохраняет файл-

Генерация кода

Создание архива с файлами кода

«J

Рис. 2. Сценарий генерации кода с использованием фреймворка

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

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

Для хранения построенных диаграмм был разработан специальный формат фаИла, который содержит в себе собственную разметку на основе XML. Файл содержит информацию о входной и выходной сущности, процессах и временных хранилищах, надписи на блоках и связях и вид связи. В функциональных требованиях к фреймворку предусмотрены проверки при открытии или импортировании файла в сцену, а также на корректность содержимого.

Второстепенная страница - формируется в качестве ответа на действие «генерация кода».

Контроллер управляет запросами пользователя, получаемые в виде запросов HTTP GET или POST, когда пользователь нажимает на элементы интерфейса для выполнения различных действий. Его основная функция — вызывать и координировать взаимодействие необходимых ресурсов и объектов, нужных для выполнения пользовательских команд.

Диаграмма развертывания всех компонентов нашего фреймворка представлена на рис. 3.

Рис. 3. Диаграмма развертывания приложения

Следует отметить, что предметом разработки является серверная часть - dfd-editor-server, который и является кроссплатформен-ным фреймворком Generator Sourse Data Flow Diagram Framework (GSDFD) [9].

Реализация GSDFD осуществлялась на популярном универсальном фреймворке Spring Boot для создания приложений на языке Java. Он предоставляет полноценную платформу для создания веб-приложений.

Для построения диаграмм в окне браузера использована библиотека jGraph (mxGraph), распространяемая под лицензией Apache 2.0.

Результирующая страница со ссылкой на скачивание архива проекта написана с помощью языка разметки документов HTML, с применением CSS. Для взаимодействия веб-страниц с пользователем был использован Java Script. GUI всего фреймворка использует библиотеку jQuery с расширением jQuery UI, распространяемой под лицензией MIT и GPLv2.

Результаты

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

ности [11] вычислительной системы (ВС). Исходными данными для расчета являются показатели безотказности и ремонтопригодности отдельных компонентов ВС и структурная схема надежности, которая должна быть составлена для анализируемой ВС.

Любая модель имеет ограничения, поэтому при построении структурной схемы надежности ВС было принято разделение на шесть модулей - процессорная подсистема, оперативная память, системный интерфейс, внешние запоминающие устройства, подсистема ввода и вывода информации. Так как отказ одной подсистем нарушит функционирование всей ВС, то соединение последовательное. Элементы, составляющие каждый модуль, могут быть гетерогенны и соединяться как последовательно, так и параллельно, и одинаковые - в таком случае могут быть описаны как система т из п. Учитывая эту формализацию выполнения расчета, в программной среде GSDFD была построена визуальная модель потока данных (рис. 4).

Рис. 4. Диаграмма потоков данных расчета надежности ВС, построенная для работы GSDFD

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

• СотропеШтр1 - интерфейс процесса обработки;

• CentralProcessingUnitSystem - конкретная реализация процесса (стартовый процесс), который в соотвествии с шаблоном Декоратор

будет добавляться новый функционал или другие процессы;

• DecoratorComponent - абстрактный класс декоратора, который и будет являться базовым для конкретной реализации расчетов каждой подсистемы ВС;

• CentralProcessingUnitSystem, DataAccessSystem, MonitorSystem, OutputDataSystem, RandomAccessMemorySystem, SystemInterfaceSystem - это различные реализации расчетов подсистем;

• Entitylmpl - интерфейс моделей для архитектуры обработки данных;

• ComputerSystemModel - реализация модели входных данных;

• RedundantSystemOutputModel - реализация модели выходных данных;

• WorkProcess - точка входа в модель расчета, с которой осуществляется соединение объектов для работы программы.

Для завершения разработки приложения достаточно добавить интерфейс пользователя и формулы расчета для последовательного, параллельного соединения и модели m из n. Поэтому необходима загрузка кода приложения (пакет models) в среду разработки. Для реализации приложения в стиле MVC потребовалось разделение сгенерированных классов Модели (models) и реализации рабочего окна приложения для ввода параметров расчета и вывода результатов по разным пакетам.

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

В результате, из 22 классов законченного приложения - 12 (54,7%) сформированы нашим фреймворком, 3 (13,6%) сгенерированы менеджером проектов приложений JavaFx среды разработки, 3 (13,6%) класса потребовались для поддержки реализации интерфейса пользователя на шаблоне Абстрактная фабрика и только 4 (18,1%) класса для непосредственного выполнения расчетов. Следует отметить, что эти классы появились вследствие рефакторинга, ввиду повторного использования одних и тех же методов расчетов в различных подсистемах. Несомненным достоинством сгенерированного кода является построение зависимостей, не требующее изменения области видимости объектов, дополнительных интерфейсов, увеличения свойств и методов абстрактных классов и изменения контракта для уже сгенерированных конкретных классов.

Выводы

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

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

2. Предложенная концепция автогенерации программного кода по визуальной модели значительно облегчает разработку программ для автоматизации инженерных задач.

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

Литература

1. Zhao Y., Raicu I., & Foster I. Scientific workflow systems for 21st century, new bottle or new wine? In 2008 IEEE Congress on Services-Part I, 2008, July, pp. 467-471.

2. Talia D. Workflow systems for science: Concepts and tools. ISRN Software Engineering, 2013.

3. Тиханов М.В. Анализ результатов инженерного расчета системы CAE //Фундаментальные основы механики. 2017. №. 2. С. 126-128.

4. Sgirka R., Eessaar Е. A Quality Model of Metamod-eling Systems // Emerging Trends in Computing, Informatics, Systems Sciences, and Engineering: International Conference on Systems, Computing Sciences and Software Engineering (SCSS 10). Springer, 2013. P. 543 - 555.

5. Riehle D., Gross T. Role model based framework design and integration// ACM SIGPLAN Notices. 1998. Vol. 33. No. 10.

6. Dennis A., Wixom B.H., Roth R.M. Systems analysis and design. John wiley & sons, 2018. p.188.

7. Eden, Amnon H., and Rick Kazman. Architecture, design, implementation" proceedings of the 25th International Conference on Software Engineering. IEEE Computer Society, 2003.

8. Garlan D., Shaw M. An Introduction to Software Architecture." In V. Ambriola, G. Tortora, eds. Advances in Software Engineering and Knowledge Engineering, Vol. 2, pp. 1— 39. New Jersey: World Scientific Publishing Company, 1993.

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

9. Generator Source Data Flow Diagram Framework/Трубников И.В., Минакова О.В. Свидетельство о регистрации программы для ЭВМ RU 2019664536, 07.06.2018

10. Trubnikov I.V., Minakova O.V., Kuripta O.V. Framework for Building Data Flow Diagramm Based Applications //2019 International Multi-Conference on Industrial Engineering and Modern Technologies (FarEastCon). IEEE, 2019.

11. ГОСТ Р 51901.14-2007 (МЭК 61078:2006) Менеджмент риска. Структурная схема надежности и булевы методы.

Поступила 23.03.2020; принята к публикации 15.06.2020

Информация об авторах

Минакова Ольга Владимировна - канд. техн. наук, доцент, Воронежский государственный технический университет (394006, Россия, г. Воронеж, Московский проспект, 14), e-mail: olgmina@gmail.com

Трубников Иван Владимирович - студент, Воронежский государственный технический университет (394006, Россия, г. Воронеж, Московский проспект, 14), e-mail: trubnicov_ivan1996@mail.ru

Курипта Оксана Валериевна - канд. техн. наук, доцент, Воронежский государственный технический университет (394006, Россия, г. Воронеж, Московский проспект, 14), e-mail: kuripta-okcana@mail.ru

BUILDING A SOFTWARE CODE GENERATOR FOR SOLVING ENGINEERING TASKS

O.V. Minakova, I.V. Trubnikov, O.V. Kuripta

Voronezh State Technical University, Voronezh, Russia

Abstract: the article presents the results of prototyping a program code generator for streaming data processing, intended for use by engineers of various specialties without programming experience. The framework automatically generates a program according to a visual model compiled by the user, which ensures simplicity and accessibility of independent development of unique automation tools. As a cognitive model for representing the engineering problem, we chose a data flow diagram (Jordan DFD notation), which is widely known, easy to understand, and is in good agreement with the "channels and filters" architecture. This allowed us to develop a web application for the automatic generation of program code with implementation according to the Decorator template. The paper presents a description of the practical implementation of a framework that generates program code based on a user-constructed data flow diagram. The prototype framework created is designed in the style of MVC, supports its own data storage format, is controlled from a browser and can be used to automate data processing for various engineering tasks. The results of the trial operation of the cross-platform software Generator Sourse Data Flow Diagram Framework are analyzed in detail on the example of calculating the reliability of a computer system. Studies confirmed the flexibility of the developed framework for automating complex structured tasks with a sufficient study of the original model

Key words: program code auto-generation, program development, data flow model, architecture channels and filters

References

1. Zhao Y., Raicu I., Foster I. "Scientific workflow systems for 21st century, new bottle or new wine?", 2008 IEEE Congress on Services-Part I, 2008, July, pp. 467-471.

2. Talia D. "Workflow systems for science: Concepts and tools", ISRN Software Engineering, 2013.

3. Tikhanov M.V. "Analysis of the results of engineering calculation of the CAE system", Fundamentals of Mechanics (Fun-damental'nye OsnovyMekhaniki), 2017, vol. 2, pp. 126-128.

4. Sgirka R.A., Eessaar E. "Quality model of metamodeling systems", Emerging Trends in Computing, Informatics, Systems Sciences, and Engineering: International Conference on Systems, Computing Sciences and Software Engineering (SCSS 10), Springer, 2013, pp. 543-555.

5. Riehle D., Gross T. "Role model based framework design and integration", ACM SIGPLAN Notices, 1998, vol. 33, no. 10.

6. Dennis A., Wixom B.H., Roth R.M. "Systems analysis and design", John Wiley & Sons, 2018, 188 p.

7. Eden A.H., Kazman R. "Architecture, design, implementation", proc. of the 25th International Conference on Software Engineering, IEEE Computer Society, 2003.

8. Garlan D., Shaw M. "An introduction to software architecture", eds. V. Ambriola, G. Tortora, Advances in Software Engineering and Knowledge Engineering, New Jersey, World Scientific Publishing Company, 1993, vol. 2, pp. 1-39.

9. Trubnikov I.V., Minakova O.V. "Generator Source Data Flow Diagram Framework", Software Registration Certificate RU 2019664536, 07.06.2018

10. Trubnikov I.V., Minakova O.V., Kuripta O.V. "Framework for building data flow diagramm based applications", 2019 International Multi-Conference on Industrial Engineering and Modern Technologies (FarEastCon), IEEE, 2019

11. GOST R 51901.14-2007 (IEC 61078: 2006) "Risk management. Reliability block diagram and Boolean methods".

Submitted 23.03.2020; revised 15.06.2020 Information about the authors

Olga V. Minakova, Cand. Sc. (Technical), Associate Professor, Voronezh State Technical University (14 Moskovskiy prospekt, Voronezh 394006, Russia), e-mail: olgmina@gmail.com

Ivan V. Trubnikov, Student, Voronezh State Technical University (14 Moskovskiy prospekt, Voronezh 394006, Russia), e-mail: trubnicov_ivan1996@mail.ru

Oksana V. Kuripta, Cand. Sc. (Technical), Associate Professor, Voronezh State Technical University (14 Moskovskiy prospekt, Voronezh 394006, Russia), e-mail: kuripta-okcana@mail.ru

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