Главное меню

К вопросу моделирования программных систем PDF Печать E-mail
Автор: Диомидов И.А.   
13.12.2024 23:50

К ВОПРОСУ МОДЕЛИРОВАНИЯ ПРОГРАММНЫХ СИСТЕМ

 

Диомидов И.А., аспирант,

ИрГУПС, г. Иркутск, Россия

 

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

Ключевые слова: программное обеспечение, системный анализ, алгоритм, система, компьютерные науки

 

Введение. Момент становления компьютерных наук можно определить с появлением понятия алгоритма, введённого великим философом и математиком Аль-Хорезми. Алгоритм — это строго определенная последовательность шагов, направленная на решение конкретной задачи. Именно разбиение процесса на упорядоченные этапы — это основа любой компьютерной программы. Однако в реальном мире cложность процессов заключается в их глубокой взаимосвязанности, изменчивости и нелинейности. Для их анализа используется системный подход, предполагающий разбиение системы на элементы и изучение связей и взаимодействий между ними. Такой подход позволяет не только упростить анализ, но и раскрыть скрытые закономерности сложных систем. В целом, с увеличением сложности можно сказать, что постановка проблемы является специальной задачи, требующего отдельного рассмотрения [1]. Кроме этого, при работе с программными системами исследователь вынужден возвращаться к концепции алгоритма, ведь фактически именно алгоритм определяет сущность проходящих в программе процессов. Все эта вариативность порождает определенную путаницу и является источником сложности программных систем. С одной стороны, программа – это процесс, с другой стороны – система модулей.

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

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

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


При этом попытки подобрать общий теоретический аппарат или наиболее эффективную парадигму программирования, которая позволила бы рассматривать программу с точки зрения проблем и терминов предметной области, не привели к значимым результатам. Так, например, объектно-ориентированное программирование, при всех своих достоинствах, не смогла скрыть сложность программ и существенно снизить затраты на разработку. Данная проблема подробно описана в письме Фредерика Брукса «Серебряной пули - нет», где основной тезис заключался в том, что невозможно снизить сложность программ, из-за самой природы программного обеспечения. Несмотря на давность сообщения (от 1986 года), оно остается верным и по сей день [3].


Все еще теория и практика в программировании развиваются несколько раздельно. Например, подобная ситуация сложилась на уровне реляционных моделей и объектных, и известна как проблема соответствий реляционной и объектной модели (англ. object-relational impendance mismatch). Данная проблема была решена следующим образом: в настоящий момент разработаны ORM-инструменты, которые преобразуют реляционную модель в объектную.


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


Анализ проблемы. Следует различать исходный код и экземпляр программы. Исходный код определяет алгоритм работы программной системы и является самостоятельной сущностью (системой). Скомпилированная программа, в свою очередь, представляет собой отдельный объект. Следовательно, при исследовании программы как объекта необходимо учитывать ее двойственную природу: описание процесса и его исполнение. В упрощенном представлении, исходный код можно рассматривать как концептуальную систему, а конкретную программу – как физическую реализацию этой системы. Аналогичная проблема существует в системном анализе и связана с вопросом построения общей теории систем, которая объединяла бы концептуальные и физические системы [4].


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


Зависимости между модулями можно представить в виде графов, а для зависимостей между типами данных (что в ряде языков программирования - синонимично) – использовать морфизмы из теории категорий.


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


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


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


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


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


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


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

-                  Формальный подход хорошо подходят для моделирования программных аспектов (исходного кода в отрыве от предметной области). Так для понимания процессов и размещения модулей и зависимостей могут применяться модели потоков данных, конечных автоматов состояний и иных абстрактных математических структур.;

-                  Также традиционные формальные методы могут эффективно применяться для построения требований к системе (конкретного приложения): описание предикатов, которым должны удовлетворять система;

-                  Предметные (доменные) аспекты программы являются самостоятельной моделью и должны рассматриваться вместе с формальными методами;

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


Заключение. В данной работе рассмотрен вопросы и проблемы моделирования программных систем. Моделирование программных систем остаётся сложной задачей из-за расхождения между абстрактной теорией и конкретной реализацией. Для полного моделирования программных систем формальные методы должны использоваться в совместно с эвристическими. Отмечено, что конкретная реализация системы (исходный код) сама по себе может рассматриваться как модель предметной области. Таким образом, одним из перспективных направлений дальнейших исследований является изучение вопроса интеграции программных аспектов в формальные модели, а также применение новых инструментов (искусственного интеллекта) для выполнения конвертации исходного кода в конкретные спецификации предметной области.

 

Литература

1.                Денисов, А. А. Современные проблемы системного анализа: информационные основы : учеб. пособие для студентов вузов, обучающихся по специальностям направления "Систем. анализ и управление" / А. А. Денисов ; А. А. Денисов ; М-во образования Рос. Федерации, С.-Петерб. гос. политехн. ун-т. – СПб. : Изд-во СПбГПУ, 2003. – 275 с. – ISBN 5-7422-0454-X. – EDN QJNTYD.

2.                Дейт, К. Д. Введение в системы баз данных / К. Д. Дейт ; К. Дж. Дейт ; [пер. с англ. и ред. К. А. Птицына]. – 8-е изд.. – Москва [и др.] : Вильямс, 2008. – ISBN 978-5-8459-0788-2. – EDN QMSTGX.

3.                D. A. Grier, “There Is Still No Silver Bullet,” Computer, vol. 54, no. 2, pp. 60–62, Feb. 2021, doi: 10.1109/MC.2020.3042682.

4.                Маторин, С. И. Учет общесистемных закономерностей при концептуальном моделировании понятийных знаний / С. И. Маторин, А. Г. Жихарев, В. В. Михелев // Искусственный интеллект и принятие решений. – 2019. – № 3. – С. 12-23. – DOI 10.14357/20718594190302. – EDN WYSFCB.

5.                Антонов, В. В. Метод проектирования адаптивного программного комплекса на основе методологии категорийной формальной модели открытой предметной области / В. В. Антонов // Вестник Уфимского государственного авиационного технического университета. – 2015. – Т. 19, № 1(67). – С. 258–263. – EDN TPNUQL.

6.                S. Iyer, I. Konstas, A. Cheung, and L. Zettlemoyer, “Summarizing Source Code using a Neural Attention Model,” in Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), Berlin, Germany: Association for Computational Linguistics, 2016, pp. 2073–2083. doi: 10.18653/v1/P16-1195.

 


Обновлено 13.12.2024 23:54
 
Яндекс.Метрика