Интеграция сервиса UML-визуализации программного обеспечения с сервисами фирмы Google
В.Ю. Романов,
факультет ВМК МГУ им. М.В. Ломоносова, vromanov@cs. msu. su, Vladimir. romanov@gmail. com
В статье рассматривается CASE-инструмент для визуализации программного обеспечения, реализованного как веб-сервис, с использование инфраструктуры Google [1]. Данный инструмент выполняет визуализацию в виде UML-диаграмм программного обеспечения, код которого расположен с сети Интернет. Применение средств разработки App Engine фирмы Google позволило реализовать этот CASE-инструмент с использованием инфраструктуры фирмы Google. Данный инструмент использует ряд веб-сервисов фирмы Google через API предоставляемые для программного доступа к этим сервисам.
1. Введение
В последнее время наметилась тенденция использования программного обеспечения через сеть интернет. Программа рассматривается как сервис-услуга доступная через интернет (веб-сервис). У такого подхода есть ряд преимуществ. Например, нет необходимости в установке программного обеспечения на компьютер. Отпадает необходимость постоянного обновления программного обеспечения новыми версиями. Сервис доступен с любого компьютера, через который есть выход в интернет. Существенно снижаются требования к вычислительным ресурсам и памяти компьютера, поскольку приложение работает на сервере, и предоставляет интерфейс пользователя через стандартный интернет браузер.
В последнее время широкое распространение получили такие сервисы фирмы Google, как сервис поиска информации в интернете Google [2], использование почты Google Mail[3], использование сервиса для хранения и редактирования документов Google Doc [4], а также многие другие веб-сервисы этой фирмы.
Широкому распространению разработки приложений как веб-сервисов способствовало также предоставление фирмой Google специального инструментария для разработки таких приложений - App Engine [1]. Интерфейс пользователя приложения разрабатывается на языке Java c помощью библиотеки Google Web Toolkit[5], а затем транслируется в тексты на языках JavaScript[6] и HTML5[7] загружаемые в ин-
тернет браузер. Таким образом, и клиентская часть, и серверная часть приложения разрабатываются на языке Java. Для вновь разрабатываемых приложений предоставляется программный интерфейс к уже существующим сервисам Google. Таким образом, вновь разрабатываемое приложение может рассматриваться как набор взаимодействующих друг с другом и распределенных в сети веб-сервисов.
В данной статье рассматривается реализация как веб-сервиса инструмента визуализации кода программного обеспечения в виде диаграмм UML[8]. Большое количество свободно распространяемого в сети Интернет программного кода, доступного и в исходных текстах и бинарном виде, существенно упрощает разработку нового программного обеспечения. Вместе с тем становится актуальной задача анализа и сравнения доступного в сети кода. Для этих целей был разработан веб-сервис, позволяющий проанализировать структуру этого кода визуализированного с помощью графической нотации унифицированного языка моделирования UML[9]. При разработке данного сервиса весьма полезной оказалась интеграция с рядом уже существующих сервисов фирмы Google. Далее в статье делается обзор этих сервисов, а затем дается описание реализации сервиса визуализации программного кода с использованием рассмотренных сервисов Google.
2. Сервисы фирмы Google
Сервис поиска программного кода. Сервис поиска программного кода (Code Search) [10] позволяет выполнять поиск текстов программного кода в системах управления версиями и в архивных файлах. При формировании задания для такого поиска, в частности, можно указать язык программирования, на котором реализовано программное обеспечение, искомые конструкции языка. Например, могут быть указаны имена классов и функций, реализованных на заданном языке программирования. Результаты поиска кода содержат «пакет» содержащий искомый файл: архивный файл или директорию в системе управления версиями, путь до файла в этом пакете, положение в файле найденной конструкции языка программирования. Для доступа к сервису поиска программного кода из приложения в App Engine предоставляется API поиска программного кода[11].
Сервис получения данных по URL. Сервис получения данных по URL (URL Fetch) [12] позволяет инструменту получать ресурсы и соединяться с другими хостами через Интернет с помощью HTTP -запросов.
Сервис документов Google. Сервис работы с документами Google Docs [4] предоставляет возможность работы с множеством документов через интернет браузер. Таким образом, имеется возможность редактирования, например, текстовых документов, электронных таблиц, пре-
зентаций. Этот сервис по функциональным возможностям схож с возможностями Microsoft Office и предоставляется бесплатно. Для работы с этим хранилищем документов фирмой Google предоставляется API работы со списком документов [13].
Сервис авторизации пользователей с помощью аккаунтов Google. Использование службы аккаунтов Google позволяет быстро начать работу с приложением, нет необходимости проводить отдельную регистрацию учётных данных пользователя приложения на каждом сайте. Единый аккаунт пользователя используется для доступа ко всем сервисам Google. Этот же аккаунт может быть использован и вновь разрабатываемыми сервисами. Для этих целей в AppEngine предоставляется API авторизации пользователей[14]. Это позволяет разработчику нового сервиса не заботиться о реализации ещё одной системы авторизации пользователей специально для своего приложения.
Сервис хранилища данных. Работа приложения на сервере Google имеет ряд особенностей. Файловая система сервера может использоваться лишь для хранения статических (не изменяемых файлов). Такими файлами обычно бывают файлы используемых приложением изображений, таблиц стилей и других файлов, применяемые для построения интерфейса пользователя. Инфраструктура Google не предоставляет возможности записи в файловую систему сервера. Для хранения изменяемой информации приложения платформой App Engine предоставляется хранилище данных (Data Store) [15], которое позволяет выполнять запросы и сохранять данные, называемыми объектами. Каждый объект может включать в себя одно или несколько свойств, которые имеют имена и могут хранить значения одного из поддерживаемых типов данных. Свойство также может быть ссылкой на другой объект.
Сервис электронной почты. Приложения App Engine могут отправлять электронные сообщения от имени администраторов приложения и пользователей аккаунтов Google. Для отправки сообщений приложения используется API сервиса электронной почты [16]. Сообщение должно содержать тему и текст, а также может включать в себя дополнительное HTML-содержание. Кроме того, к нему можно прикреплять файловые вложения. Адрес отправителя сообщения должен быть адресом электронной почты администратора приложения или адресом акка-унта Google текущего пользователя, выполнившего вход в приложение.
2. Сервис визуализации программной системы с помощью диаграмм языка UML
Большой объем свободно распространяемого в сети интернет программного кода (библиотек кода) существенно облегчает разработку нового программного обеспечения. Вместе с тем большой объем про-
граммного кода требует большего времени на поиск, анализ и сравнение библиотек со схожими характеристиками.
Важным этапом работы с программным кодом является его поиск в интернете. Пользователь визуализатора может явно задавать визуализа-тору URL-ссылку на код в интернете, встретив ее, например, к какой либо статье. Для поиска кода может использоваться стандартный сервис Google для поиска информации [2]. Вместе с тем имеется возможность воспользоваться специализированным веб-сервисом Google для поиска программного кода, который пока находится на стадии экспериментальной разработки [11]. Веб-сервис визуализации кода интегрируется с этим сервисов через API этого сервиса. Сервис поиска кода выполняет поиск по текстам на языках программирования, не анализируя, например, байт-код виртуальной машины Java. Вместе с тем пакеты (архивные файлы или директории системы управления версиями) зачастую содержат и двоичные файлы. Данные пакеты могут быть дополнительно исследованы визуализатором для поиска двоичных файлов и включение их для анализа и визуализации в рабочее пространство пользователя сервиса визуализации.
При анализе структуры библиотек полезной может оказаться визуализация кода в виде диаграмм статической структуры языка UML[9]. Для построения таких диаграмм может использоваться двоичный код библиотеки, например байт-код виртуальной машины Java, так и тексты программы. Анализ байт-кода виртуальной машины при построении UML-диаграмм визуализатором осуществляться с помощью свободно распространяемой библиотеки ASM[17]. Ряд анализируемых библиотек написан на интерпретируемых языка программирования, например, на языках Python[18] и JavaScript^], и поэтому двоичного кода может не иметь. Для анализа текстов на языках программирования используется распознаватели языков программирования, созданные с помощью свободно распространяемого генератора компиляторов CocoR[19].
Важно заметить, что UML-диаграммы для анализируемого кода не строятся пользователем визуализатора вручную. Для каждого элемента программы визуализатором находятся его связи с другими элементами программы, которые отображаются с помощью графической нотации языка UML на автоматически построенных визуализатором диаграммах.
Перечислим некоторые их видов диаграмм, которые строятся для программного кода. Диаграмма уровней показывает распределение всех пакетов системы по уровням иерархии. Под пакетом, в данном случае, понимается конструкция языка Java. На такой диаграмме пакеты, от которых есть зависимость в других пакетах, располагаются на диаграмме на более низких уровнях иерархии. Этот вид диаграмм позволяет получить общее представление о зависимостях между пакетами.
Диаграмма зависимости пакета показывает все связи конкретного пакета с другими пакетами. Пользователь визуализатора может выбрать на диаграмме отношение зависимости языка UML для более детального рассмотрения причин возникновения такой зависимости.
На диаграммах состава пакетов (packages) классов показывается вложенность пакетов в пакеты, а также вложенность классификаторов (классов, интерфейсов, перечислений) в пакеты.
Для каждого классификатора анализируемой системы автоматически строится UML-диаграмма, показывающая с помощью отношений обобщения, реализации, ассоциации и зависимости языка UML связи этого классификатора с другими классификаторами. Показываются все непосредственные предки и потомки классификатора; реализуемые и используемые данным классификатором интерфейсы; классификаторы, реализующие и использующие данный интерфейс; классификаторы являющиеся типами полей данного классификатора; классификаторы, использующие данный классификатор в качестве типа своего поля. Пример такой диаграммы показан на рисунке 1.
Весьма важной для понимания анализируемой системы является визуализация иерархии наследования классификаторов. Визуализация для каждого из классификаторов всех предков в иерархии наследования позволяет увидеть унаследованные от предков поля и методы, а также реализуемые предками интерфейсы. Визуализация для каждого из классификаторов всех потомков в иерархии наследования позволяет увидеть классификаторы, оказывающие наиболее существенное влияние на большинство классов системы.
Рис.1. Визуализации CASE-инструментом связей класса системы
3. Документирование программных систем
Пользователь визуализатора при начале работы с визуализатором регистрируется через систему аккаунтов Google [14] и создает рабочее пространство для работы с кодом. Настройки рабочего пространства (например, ссылки на выбранные для анализа коды) анализируемые коды, хранятся веб-сервисом визуализации между сессиями работы. Вместе с тем анализ кода с помощью работающего только в режиме online сервиса, может быть по каким либо причинам не приемлем для пользователя инструмента. В этом случает сервис визуализации генерирует документы, содержащие UML-диаграммы, и записывает их через API сервиса работы со списком документов [13] в память сервиса Google Docs [4]. Для документирования UML-диаграмм используется разработанный консорциумом W3C формат векторной графики Scalable Vector Graphics[20] поддерживаемый наиболее популярными Интернет-браузерами Internet Explorer, Opera, Chrome, Mozilla FireFox. Хранение документов - диаграмм на сервере Google в хранилище документов Google Docs позволяет совместное использование единой документации распределенной группой разработчиков программной системы.
В том случае, если пользователь визуализатора не использует сервис хранения и редактирования документов, сгенерированные документы могут быть посланы по электронной почте по указанному адресу. Для этого сервис визуализации использует API сервиса электронной почты.
4. Заключение
В статье рассмотрена экспериментальная реализация как веб-сервиса инструмента визуализации программного кода в виде UML-диаграмм. Данный веб-сервис разрабатывался с использованием инструментария фирмы Google App Engine и располагается на сервере фирмы Google. При разработке этого сервиса он был с рядом сервисов фирмы Google.
Литература
1. Инфраструктура Google. http://code.google.com/intl/ru-RU/appengine/
2. Поиск информации в интернете. http://www.google.com
3. Почта Google Mail. http://gmail.com
4. Сервис работы с документами фирмы Google. http://docs.google.com
5. Google Web Toolkit. http://code.google.com/intl/ru-RU/webtoolkit/
6. Standard ECMA-262, ECMAScript Language Specification. 3rd edition http://www.ecma-international.org/publications/standards/Ecma-262.htm
7. HTML5. http://dev.w3.org/html5/spec/Overview.html
8. Инструмент визуализации кода программного обеспечения в виде диаграмм UML. http://uml4gwt.appspot.com/
9. Object Management Group, UML 2.1 Superstructure Specification, OMG document. ptc-06-04-02.pdf http://www.omg.org/uml
10. Сервис поиска кода Google. http://www.google.com/codesearch
11. API Сервиса поиска программного кода Google. http://code.google.com/intl/ru/apis/codesearch/docs/2.0/developers guide.html
12. Сервис получения данных по URL. http://code.google.com/intl/ru/appengine/docs/java/urlfetch/overview.html
13. API работы со списком документов фирмы Google. http://code.google.com/intl/ru-RU/apis/documents/docs/3.0/ developers guide java.html
14. Интерфейс авторизации пользователей фирмы Google http://code.google.com/intl/ru-RU/appengine/docs/python/users/
15. Хранилище данных Data Store App Engine фирмы Google. http://www.googleappengine.ru/docs/datastore/
16. API электронной почты Google. http://code.google.com/intl/ru-RU/appengine/docs/java/mail/overview.html
17. ASM 3.0 A Java bytecode engineering library. http://download.forge.objectweb.org/asm/asm-guide.pdf
18. The Python Language Reference. http://docs.python.org/py3k/reference/index.html
19. Compiler generator Coco/R. http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/
20. Scalable Vector Graphics (SVG). XML Graphics for the Web. http://www.w3.org/Graphics/SVG