Методика разработки модульных приложений на пользовательском уровне SaaS и программная реализация в служебной библиотеке modules. Js

УДК 004.053

МЕТОДИКА РАЗРАБОТКИ МОДУЛЬНЫХ ПРИЛОЖЕНИЙ НА ПОЛЬЗОВАТЕЛЬСКОМ УРОВНЕ БААБ И ПРОГРАММНАЯ РЕАЛИЗАЦИЯ В СЛУЖЕБНОЙ БИБЛИОТЕКЕ MODULES.JS

Ю.В. Трухин, аспирант

METHODOLOGY OF MODULAR APPLICATIONS DEVELOPMENT ON THE CLIENT SIDE OF SAAS AND IMPLEMENTATION OF THE MODULES.JS FRAMEWORK Trukhin Yu. V., Postgraduate Student (Tver State Technical University, Quay Nikitin, Tver, 22, 170026, Russian Federation, yuri@trukhin.com) Abstract. The paper describes the methodology of developing modular applications on the client side for systems «software as a service» (SAAS) and implementation of the modules.js framework. The paper presents the rationale for software

modularization on the SaaS client side and unsolved problems in the existing technologies. A set of actions for software modularization is considered in the section on methodology for developing modular applications on the client side of the SaaS. The section on the software implementation methodology considers a set of modules.js framework subsystems and their practical application in the methodology. Software implementation allows creating single page application with dynamic loading and unloading of modules, dynamical redirecting requests to a scalable server-side and creating specific types of modules for data visualization using data templates. This approach simplifies the development of complex SAAS applications and improves code supportability.

С развитием вычислительной техники и средств передачи данных все большую актуальность приобретают программные системы (ПС), предоставляемые пользователю как услуга (Software as a Service, SaaS) (см. http://www.gartner.com/ it/page.jsp?id=1739214&M=6e0e6b7e-2439-4289-b697-863578323245). Основные преимущества SaaS по сравнению с традиционной установкой ПО [1]: повышение безопасности и надежности работы с данными, простота и скорость доставки ПС до пользователя, уменьшение стоимости владения и обслуживания (TCO); повышение масштабируемости. При этом ПО SaaS может быть использовано как в центре обработки данных (ЦОД) хостинг-провайдеров, так и в собственных ЦОД предприятия.

В программной архитектуре SaaS можно выделить уровни: пользовательский, серверный, доступа к данным, хранилища (http://www.progress. com/docs/whitepapers/public/SaaS/SaaS-Architectu-re.pdf). Пользовательский уровень состоит из веб-браузера и клиентского ПО, исполняющегося в веб-браузере. Для корректной работы клиентского ПО внутри различных браузеров необходимо следовать веб-стандартам консорциума W3C (http:// www.w3.org/Consortium/).

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

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

- требуют предварительной автоматической обработки исходных текстов перед развертыванием (компиляцию), не позволяют создавать одно-

страничные приложения с контролем загрузки/выгрузки модулей в процессе исполнения ПО (БЭМ (http://ru.bem.info/));

На практике автор статьи столкнулся с необходимостью разработки модульной технологии для пользовательского уровня SaaS при создании интеллектуальной системы хранения, обработки и анализа данных GEO4GEO [4].

В процессе работы над системой были выявлены следующие проблемы, полностью не решаемые существующими методиками на клиентской стороне SaaS:

- отсутствие поддержки отказоустойчивой масштабируемой серверной стороны в системах SaaS, a именно возможности динамического перенаправления запросов к необходимому ресурсу серверной стороны SaaS на клиентской стороне без изменения модулей;

- сложность создания одностраничных приложений с динамической загрузкой/выгрузкой модулей и контроля жизненного цикла модулей в процессе исполнения ПО;

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

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

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

ния и отказоустойчивости, и высокой доступности для пользователей.

В настоящей работе будут представлены методика разработки модульных приложений на пользовательском уровне SaaS и программная реализация в служебной библиотеке modules.js [6].

Методика разработки модульных приложений на пользовательском уровне SaaS

Данная методика предназначена для использования на пользовательском уровне систем SaaS, разработанных с использованием стандартизированных технологий W3C (HTML5, CSS 3, Ecma-script 5.1 и выше).

Основная задача методики - модуляризация программного кода при разработке пользовательского уровня SaaS.

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

1. Анализ предметной области и постановка пользовательских задач в рамках разрабатываемого ПО.

2. Выделение подзадач, которые необходимо решить на пользовательском уровне SaaS.

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

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

6. Тестирование разработанного приложения с помощью автоматических и ручных тестов (в том числе приемочных).

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

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

Программная реализация методики в служебной библиотеке modules.js

Служебная библиотека modules.js разработана для практического использования методики разработки модульных приложений на пользовательском уровне SaaS и является ПО с открытым исходным кодом. Служебная библиотека автоматизирует служебные операции, требуемые для выполнения действий 4 и 5 методики при решении основной задачи. Автоматизируются следующие служебные операции.

1. Управление загрузкой и выгрузкой компонентов приложения (функция Modules.Loader), в частности, возможность загрузки и выгрузки модулей целиком, разработанных в соответствии с требованиями служебной библиотеки (функции load, unload) [6], возможность загрузки и выгрузки компонентов модуля (функции loadHTML, unload-HTML, loadCSS, unloadCSS, loadJS, unloadJS), возможность загрузки специализированных типов модулей (в настоящее время реализована возможность загрузки шаблонов данных, функция load-Template). Все функции могут выполняться асин-

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

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

3. Управление коммуникацией с серверной стороной (функция Modules.Server). Данная часть содержит возможность создания приложений клиентского уровня SaaS, которые позволяют перенаправлять запросы модулей к серверной стороне SaaS так, чтобы от модуля не требовалось знание конкретного адреса сервера для организации запроса, а использовался относительный путь к КБ8Т-сервису. Данные о серверах конфигурации загружаются при старте клиентской стороны SaaS из конфигурационного файла json. Серверы конфигурации сообщают клиентской стороне SaaS список адресов серверов в рамках домена, готовых обработать запрос. Таким образом обеспечивается динамическое масштабирование серверной стороны без изменения программного кода модулей. Возможно также использование данной части служебной библиотеки без внедрения на серверной стороне серверов конфигурации, указав в файле конфигурации текущие адреса всех обслуживающих запросы модулей, серверов серверной стороны SaaS.

Созданная программная реализация методологии помогает разработчику SaaS решать задачу модуляризации ПО согласно методологии, описанной в данной статье, в случае разработки как простых сайтов, так и сложных масштабируемых программных систем. К недостаткам данной программной реализации можно отнести большие, чем у статических страниц на пользовательском уровне SaaS, временные затраты на программную сборку клиентского уровня в браузере. Программная реализация в служебной библиотеке modulesjs используется в интеллектуальной системе хранения, обработки и анализа геоданных GEO4GEO для построения пользовательского уровня SaaS из модулей [4].

В результате были созданы методика разработки модульных веб-приложений на пользовательском уровне SaaS и программная реализация в служебной библиотеке modulesjs. В рамках методики предложен набор действий для решения проблемы модуляризации пользовательского уровня SaaS. Разработанная служебная библиотека то-

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

Литература

1. Konary E. Traudt Software as a Service Taxonomy and Research Guide // IDC Research Report, June 2005.

2. Максимчук Р., Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений. М.: Вильямс, 2010. С. 37-54.

3. Papapetrou P. Real modular web applications: Why there is no standard for developing them? [Java Developers Resource Center]. URL: http://www.javacodegeeks.com/2011/09/ real-modular-web-applications-why-there.html (дата обращения: 16.01.2013).

4. Трухин Ю.В. Исследование семантической высокоуровневой файловой системы в масштабируемых центрах обработки данных: сб. науч. ст. Брянск: Изд-во БГИТА, 2011.

5. Bertrand M. Object-oriented software construction. lst ed., Prentice Hall Publ., 1988.

6. Трухин Ю.В. Modules.js source repository [GitHub]. URL: https://github.com/trukhinyuri/modules.js (дата обращения: 16.01.2013).

7. Grossman J. The origins of Cross-Site Scripting (XSS). URL: http://jeremiahgrossman.blogspot.ru/2006/07/origins-of-cross-site-scripting-xss.html (дата обращения: 16.01.2013).

8. Sirkisoon F., Haggerty J. Spending in the Age of Compliance. AMR Research Report, Boston, 2006.

9. Dijkstra E.W. Programming Considered as a Human. EWD117, 1995. URL: https://www.cs.utexas.edu/~EWD/transcrip-tions/EWD01xx/EWD 117.html (дата обращения: 16.01.2013).

References

1. Konary A., Traudt E. Software as a Service Taxonomy and Research Guide. IDC Research Report, June 2005.

2. Maksimchuk R., Buch G. Obyektno-orientirovanny analiz i proektirovanie s primerami prilozheniy [Object-oriented analysis and design with application examples]. Moscow, Williams Publ., 2010, pp. 37-54 (in Russ.).

3. Papapetrou P. Real modular web applications: Why there is no standard for developing them? Java Developers Resource Center Available at: http://www.javacodegeeks.com/2011/09/real-modular-web-applications-why-there.html (accessed 16 January 2013).

4. Trukhin Yu.V. The research of the semantic high-level file systems in scalable datacenters. Articles of Bryansk State Academy of Engineering and Technology, 2011.

5. Bertrand M. Object-oriented software construction. lst ed., Prentice Hall Publ., 1988.

6. Trukhin Yu.V. Modules.js source repository. GitHub. Available at: https://github.com/trukhinyuri/modules.js (accessed 16 January 2013).

7. Grossman J. The origins of Cross-Site Scripting (XSS). Available at: http://jeremiahgrossman.blogspot.ru/2006/07/origins-of-cross-site-scripting-xss.html (accessed 16 January 2013).

8. Sirkisoon F., Haggerty J. Spending in the Age of Compliance. AMR Research report, Boston, 2006.

9. Dijkstra E.W. Programming Considered as a Human. EWD117, 1995. Available at: https://www.cs.utexas.edu/~EWD/ transcriptions/EWD01xx/EWD117.html (accessed 16 January 2013).