Универсальная интерактивная среда визуализации атрибутированных иерархических графовых моделей Золотухин Т.А, Колбин Д.С. Новосибирский государственный университет, Факультет информационных технологий Введение Визуализация информации — это процесс преобразования больших и сложных видов абстрактной информации в визуальную форму. Универсальным средством представления такой информации являются графы. Любая информация, состоящая из объектов, между которыми имеется связь, может быть наглядно представлена в виде графа. Во многих приложениях используемые графы являются иерархическими и/или атрибутированными [4], наглядное представление этих графов позволяет эффективнее работать с предоставленной информацией. Цели Целью предлагаемого проекта является построение расширяемой системы визуализации атрибутированных иерархических графов с интерактивным управлением этой визуализацией, а так же удобной навигацией по графам. Также перед проектом стоит цель предоставления дополнительных средств, позволяющих повысить качество сопровождения, разрабатываемой системы визуализации. Обозначения Visual Graph – название разрабатываемой нами системы. В дальнейшем вместо разрабатываемой нами системы будет употребляться ‘программа’ Область применения Основной областью применения будут структуры данных, обрабатываемые компиляторами, т.е. компилятор может сохранить свое внутреннее представление в виде файла (одного из поддерживаемых программой форматов), и программа Visual Graph сможет прочитать граф, содержащийся в этом файле, и отобразить его. В дальнейшем мы предполагаем расширение областей применения. Так, мы планируем охватить генеалогию (семейные деревья), спорт (турнирные деревья), бизнес-менеджмент (визуализация схем предприятий), веб-дизайн (карты сайтов) и другие области, традиционно поддерживаемые аналогичными системами визуализации графов [3]. Программа Visual Graph может работать как в Unix системах, так и в Windows. Существующие проблемы При решении задачи возникло большое количество проблем. Ниже перечислены те из них, которые будут решаться в рамках данного проекта: Выбор эффективного внутреннего представления является первостепенной задачей для создания универсальной расширяемой системы визуализации. От этого выбора зависит то, насколько быстрым будет реакция системы на запросы пользователей по локализации определенных сущностей в графах, а также возможность добавления новых методов параметризуемого поиска сущностей. Выбор алгоритма раскладки для создания понятного для пользователей визуального представления графов также является проблемой, поскольку не существует понятия «универсального» или «хорошего» алгоритма раскладки. Алгоритмы раскладки могут разница в зависимости от сферы их применения. Например, одним из основных видов графов, создаваемых компилятором, является граф управления программы. Поэтому в рамках этого проекта будет выбран алгоритм раскладки, позволяющий наиболее понятным образом визуализировать именно такие графы. Не существует универсальных методов навигации по (иерархическим атрибутированным) графам. В рамках нашего проекта будут созданы методы навигации, позволяющие выделять из больших графов небольшие фрагменты, интересующие пользователей в конкретный момент времени. Также будет предоставлена возможность быстрого перемещения между существующими фрагментами. Контроль над подмножеством атрибутов для визуализации, также является критичным для работы с визуализированными графами. Поскольку неограниченное наложение атрибутов на изображение может препятствовать пониманию обозримого визуализированного фрагмента. Мы предоставим пользователю методы по контролю множества атрибутов отображаемых в конкретный момент времени. Архитектура системы Сложность разрабатываемой системы, а так же необходимость длительной поддержки системы и обслуживания требуют серьезного и аккуратного подхода к построению архитектуры программы. При построении архитектуры системы был использован шаблон проектирования MVC(Model View Controller) (см. рис. 1)[2]. Рис. 1. Иллюстрация MVC архитектуры [5] Model К модели относятся: внутреннее представление графа в программе и класс ядра, который заведует всей выдачей и складированием информации, а так же все несущие интерфейсы данной системы. Это такие интерфейсы как: графический интерфейс, интерфейс для бизнес-логики, интерфейс для логирования в системе, а так же интерфейс для исключений, которые могут возникнуть при работе системы. View К виду относится, все классы, взаимодействующие с пользователем. В частности это вкладка с мини картой, вкладка для отображения текущего графа, вкладка для отображения свойств вершин и дуг и многое другое. Controller К контроллеру относятся все классы, реализующие алгоритмы по раскладке графов. А так же чтение из разных форматов файлов. Поддержка разработки и сопровождения программы Так как система разрабатывается больше, чем одним человеком, то естественно, что необходимо каким-то образом синхронизовать все изменения вносимые разными людьми. Для этого в нашем проекте мы используем систему Subversion (SVN)(www.subversion.apache.org). Эта система очень популярна при разработке программных продуктов небольшими командами. Для отслеживания ошибок на этапе разработки, мы используем модульное тестирование. Оно работает по принципу белого ящика. Это когда мы знаем, что содержится в том или ином классе. Таким образом, после добавления нового класса, к нему пишутся тесты, которые гарантируют, что по крайне мере на каких-то данных он работает верно. При модификации старого класса, прогоняются все старые тесты, чтобы убедиться, что внесенные правки не нарушили логику работы программы. Не секрет, что иногда в программе происходят ошибки. Некоторые программы ограничиваются тем, что выводят сообщение об ошибки. А некоторые просто не сообщают об этом, и пользователь получает неправильный результат, но думает, что он правильный. В нашей системе, помимо сообщений об ошибки предусмотрено еще и логирование. Т.е. программа ведет журнал, в который она записывает ход своей работы. При ошибке программы, пользователь может выслать файл лога разработчикам. И у тех в свою очередь будет намного больше информации, для устранения ошибки, по сравнению с тем, если бы пользователь просто сказал, что у него произошла какая-то ошибка. Текущее состояние проекта На текущий момент: разработана use-case диаграммы и дизайн диаграмма классов, написано ядро системы, отвечающее за складирование и выдачу информации (в частности графов), написаны загрузчики графов из файлов форматов gml и graphml, разработан начальный пользовательский интерфейс, внедрена модульная система тестирования, внедрена система логирования, внедрено использование SVN и Trac. Ведутся работы над созданием: удобной навигации по графу, системы контроля отображения атрибутов вершин и ребер, системы фильтров для вершин графа. Пользовательский интерфейс программы Visual Graph На рис. 2 изображено текущее состояние пользовательского интерфейса программы Visual Graph. Он включает следующие основные области. Рис. 2. Пользовательский интерфейс программы Visual Graph Мини карта Мини карта позволяет обозревать весь граф, находящийся в данной вкладке. Панель инструментов Панель инструментов позволяет работать с графом находящимся в текущей вкладке. Дерево навигации Дерево навигации помогает быстро переключаться между вложенными графами, подграфами и вкладками. Рабочая область Так как наш продукт предназначен исключительно для визуализации графов и навигации по ним, то вы не можете изменять структуру графа (вносить новые вершина, ребра и т.п.), но вы можете менять расположение вершин. А так же открывать в новых вкладках подграфы или вложенные графы текущего графа, с которым вы работаете. Планируется Планируется добавить панель для отображения атрибутов вершин и ребер. Эта панель будет позволять фильтровать вершины и ребра по атрибутам и затем открывать полученный граф в новой вкладке. Используемые продукты При разработке, были использованы следующие продукты: Junit(www.junit.org) – этот продукт был использован нами для внедрения модульного тестирования. Выбран он нами был из-за своей простоты в освоении и достаточно большой области применения. Jude(www.jude.change-vision.com/jude-web) – данный продукт работает с UML диаграммами. Он был использован нами для построения usecase диаграмм, а так же для построения дизайн диаграммы классов. JGraphX(www.jgraph.com) – библиотека под открытой лицензией семейства BSD, она используется для непосредственного отображения графов. Используется в виду простоты представления графов и богатого набора способов визуализации вершин[1]. SVN(www.subversion.apache.org) – является централизованной системой управления версиями, эта система чрезвычайно проста и удобна при эксплуатировании небольшим количеством человек. Java(www.java.com) – один из популярнейших языков разработки программного обеспечения на данный момент, он предоставляет из себя одну из лучших реализаций объектно-ориентированной парадигмы, в связи с чем, часто используется для построения сложных, масштабируемых систем. Trac(www.trac.edgewall.org) – предоставляет средство для оповещения разработчиков об ошибках, и отслеживать процесс исправления. Литература 1. 2. 3. 4. JGraph User Manual (http://www.jgraph.com/pub/jgraphmanual.pdf) GUI Architectures (http://www.martinfowler.com/eaaDev/uiArchs.html) Проприетарный аналог: aiSee (http://www.aisee.com/) Касьянов В.Н. Иерархические графы и графовые модели: вопросы визуальной обработки // Проблемы систем информатики и программирования. - Новосибирск, 1999. - С. 7-32. 5. MVC (http://www.microsoft.com)