Сервис анализа и визуализации кода и текстов на языках программирования как облачное приложение Google

Сервис анализа и визуализации кода и текстов на языках программирования как облачное приложение Google

В.Ю. Романов, факультет ВМК МГУ им. М.В. Ломоносова, vromanov@cs. msu. su, Vladimir. romanov@gmail. com

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

1. Введение

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

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

2. Технологии фирмы Google

Фирма Google предоставляет удобный инструментарий для разработки облачных приложений. Для работы приложения на сервере Google предоставляется платформа App Engine[1]. Эта платформа предоставляет библиотеку классов используемых серверной частью приложения и набор сервисов Google, которые приложение может использовать через программный интерфейс платформы.

Файловая система App Engine может использоваться лишь для хранения статических данных. Динамические данные приложения хранятся в хранилище данных (Data Store)[3] в виде объектов имеющих атрибуты и допускающих взаимные ссылки. Для выполнения функций, для которых недостаточна производительность стандартного хранилища, приложения могут использовать кэш данных Memcache, расположенный в оперативной памяти. В Google App Engine имеется программный интерфейс для работы с таким кэшем.

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

Следует отметить также поддержку фирмой Google разработки приложений на начальных этапах разработки. Начать использовать платформу App Engine можно бесплатно. Не нужно платить за приложения, использующие менее 500 МБ хранилища данных, а также ресурсы ЦП и трафик, достаточные для эффективного приложения, обслуживающего до пяти миллионов просмотров страниц в месяц. Включив оплату для приложения, эти ограничения повышаются, а оплата взимается только за ресурсы, использованные свыше бесплатных уровней. Таким образом, существенно упрощается как использование облачных приложений в образовании, а также проведение экспериментальных и исследовательских работ с использованием таких приложений.

Фирма Google предоставляет ряд web-сервисов которые могут быть полезны широкому классу облачных приложений. Некоторые из этих сервисов (например, сервис хранения и редактирования документов) доступны как облачные приложения. Вместе с тем платформа App Engine предоставляет для разрабатываемых облачных приложений программный интерфейс для доступа к этим сервисам.

Прежде всего, стоит отметить сервис авторизации пользователей с помощью аккаунтов Google [4]. Пользователи приложений Google (почты, хранилища документов и других) используют единый аккаунт для доступа к этим приложением. Этот аккаунт может быть использован также и вновь разрабатываемым на платформе App Engine облачным приложением. Для этого на этой платформе предоставляется API для программного доступа к службе аккаунтов.

Другим широко используемым сервисом является сервис получения данных по ссылке заданной в виде URL (URL Fetch) [5]. Данные ресурса в сети интернет, заданного с помощью URL, могут быть получены с помощью HTTP запросов и затем считаны в программе как поток данных языка Java.

Облачное приложение Google не может использовать файловую систему для хранения изменяемых файлов. Вместе с тем платформа App Engine предоставляет программный интерфейс для работы с сервисом Google Docs[6]. Этот бесплатный сервис дает возможность пользователю хранить и редактировать файлы и документы. Таким образом, изменяемые файлы могут храниться не в файловой системе вновь разработанного облачного приложения, а в памяти выделенной пользователю сервиса Google Docs.

Одним из наиболее известных облачных приложений фирмы Google является бесплатная почта Google (GMail)[7]. Вновь разработанное облачное приложение может использовать API для рассылки сообщений как от имени администратора облачного приложения, так и от имени пользователя приложения GMail. К этим сообщениям могут быть прикреплены файловые вложения.

Менее известным является экспериментальный сервис Google для поиска программного кода (Code Search)[8]. Данный сервис позволяет выполнить в сети интернет поиск программного кода на некотором языке программирования. При этом можно указать искомую конструкцию программы. Например, имя искомого класса и метода в этом классе. Результат такого поиска - архивный файл или директория в системе управления версиями, путь к искомому файлу в архиве или директории, положение в файле найденной конструкции выбранного языка программирования. Аналогичные возможности предоставляются облачному приложению и через программный интерфейс App Engine.

3. Анализ и визуализация программного обеспечения в

сети интернет

Наличие в сети интернет большого объема свободно распространяемого программного обеспечения существенно изменил подход к разработке программно обеспечения. Программа редко теперь разрабатывается «с нуля» без использования уже разработанных и расположенных в сети интернет кодов и текстов программ. Большое значение теперь приобретает поиск и анализ необходимого для разработки программного обеспечения. Существенную помощь в этой деятельности может оказать визуализация кода и текстов программ в виде автоматически построенных диаграмм языка моделирования программного обеспечения UML[9].

Задача обратного проектирования (reverse engineering) программного обеспечения является традиционной задачей выполняемой CASE-инструментами с использованием языка UML. Для работы с текстами программ в реализованном сервисе использовались распознаватели языков программирования сгенерированные с помощью генератора компиляторов CocoR[10]. Этот генератор компиляторов распространяется в исходных текстах, в том числе и на языке Java. Генерируемые CocoR распознаватели способны просматривать текст программы на неограниченное число лексем вперед. Это дает возможность генерировать распознаватели для таких сложных языков, как, например, язык C#.

Для решения задачи обратного проектирования не обязательно наличие исходных текстов программ. Эта задача применима и при наличии кода с хорошо документированной структурой. Например, для исполняемого кода виртуальной машины Java. Для работы с кодами виртуальной машины Java в реализованном сервисе использовалась библиотека ASM 3.0[11].

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

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

Литература

1. Инфраструктура Google. http://code .google. com/ intl/ru-RU/ appengine/

2. Google Web Toolkit. http://code.google.com/intl/ru-RU/webtoolkit/

3. Хранилище данных Data Store App Engine фирмы Google. http://www.googleappengine.ru/docs/datastore/

4. Интерфейс авторизации пользователей фирмы Google http://code.google.com/intl/ru-RU/appengine/docs/python/users/

5. Сервис получения данных по URL. http://code.google.com/intl/ru/appengine/docs/iava/urlfetch/overview.html

6. API работы со списком документов фирмы Google. http://code.google.com/intl/ru-RU/apis/documents/docs/3.0/_developers guide iava.html

7. API электронной почты Google. http://code.google.com/intl/ru-RU/appengine/docs/iava/mail/overview.html

8. API Сервиса поиска программного кода Google. http://code.google.com/intl/ru/apis/codesearch/docs/2.0/developers guide.html

9. Object Management Group, UML 2.1 Superstructure Specification, OMG document. ptc-06-04-02.pdf http://www.omg.org/uml

10. Compiler generator Coco/R.

http://www. ssw. uni-linz. ac. at/Research/Proi ects/Coco/

11. ASM 3.0 A Java bytecode engineering library. http://download.forge.obiectweb.org/asm/asm-guide.pdf

12. The Python Language Reference. http://docs.python.org/py3k/reference/index.html