Построение эквивалентного представления зависимостей классов, полей, методов, функций и их перекрестного использования в исходном коде
Материал из 0x1.tv
«Построение эквивалентного представления зависимостей классов, полей, методов, функций и их перекрестного использования в исходных текстах программ (Алексей Пустыгин, OSEDUCONF-2016)»
Содержание
Аннотация
- Докладчик
- Алексей Пустыгин
Предложено эквивалентное представление исходного текста в форме графа зависимостей классов, полей, методов, функций и их перекрестного использования. Оно основано на трансформации универсального промежуточного представления в текстовый формат на языке описания графов.
Универсальное промежуточное представление является текстовым эквивалентом абстрактного синтаксического дерева на языке разметки.
Видео
Посмотрели доклад? Понравился? Напишите комментарий! Не согласны? Тем более напишите.
Слайды
Тезисы
Для упрощения статического анализа многоязычных программных систем, включающего построение эквивалентных представлений и выполнения различного рода анализов, предлагается использование универсального промежуточного представления (УПП) [1,2].
Предложено представление, являющееся трансформацией УПП, в форме графа зависимостей классов, полей, методов, функций и их перекрестного использования.
Предложен прототип генератора такого представления в текстовый формат на языке описания графов DOT.
Граф зависимостей классов, полей, методов, функций и их перекрестного использования
Для построения графа зависимостей классов, полей, методов, функций и их перекрестного использования (в дальнейшем — «граф зависимостей») путем трансформации УПП необходим полный доступ к DOM УПП, которое в свою очередь представлено XML документом. В качестве средства загрузки и обработки DOM УПП была выбрана библиотека pugixml [3]. Критерием выбора послужил сравнительный тест [4]. Так как предложенное эквивалентное представление предлагается в качестве конечного узла перед непосредственным выполнением пользовательского анализа, необходимо выбрать было формат визуализации.
Из существующих форматов представления графов был выбран язык описания графов DOT, как один из самых простых и распространенных, а также пакет утилит Graphviz для автоматической визуализации графов в формате DOT.
Алгоритм генерации графа зависимостей двухпроходный. Дерево УПП имеет в контексте графа зависимостей структуру как на рисунке 1.
Загруженная DOM рекурсивно обходится в глубину и информация о каждом узле из контекста графа зависимостей сохраняется в индекс — DOM2.
После обхода происходит генерация графа зависимостей в файл на языке описания графов DOT путем обхода дерева DOM2 в глубину.
Граф зависимостей содержит программные сущности (классы, поля, методы и т.д.) в качестве узлов, а связи атрибутированы в соответствии с типом сущностей и их отношением. Атрибутом связей выступают: вес связи, цвет, начертание.
- Связи наследования и принадлежности к классу обозначены зеленой сплошной связью.
- Связи вызова метода — сплошной стрелкой со счетчиком повторов.
- Синие стрелки обозначают статические вызовы, красные — константные, остальные — черным.
- Связи использования поля обозначены черной сплошной стрелкой со счетчиком повторов.
Вершины графа зависимостей представлены тремя типами: класс, поле, метод/функция.
Их общий вид представлен на рисунках 2, 3, 4.
В качестве тестового проекта было использованно УПП исходного текста проекта на C++ библиотеки pugixml [3,5].
Прототип генератора графа зависимостей имеет функционал получения среза по классам и методам, позволяющий визуализировать только интересуемую часть графа (Рисунок 5).
Выводы
Предложено эквивалентное представление исходного кода программ в форме графа зависимостей классов, полей, методов, функций и их перекрестного использования.
Разработан прототип генератора представления в формате языка описания графов DOT. Генератор имеет функционал получения среза по классам и методам, позволяющий выполнять анализ интересуемых зависимостей.
Предложенное эквивалентное представление основывается на универсальном промежуточном представлении и не зависит от языка программирования исследуемого исходного текста, что означает его собственную универсальность и демонстрирует преимущество уровневого подхода к построению полезных анализов исходных текстов, путем разбиения этой задачи на универсальные и независимые фрагменты и уровни.
Литература
- [1]
- Ошнуров Н. А. Построение универсального промежуточного представления исходных текстов на языках C++ и C# / Н. А. Ошнуров, А. Н. Пустыгин, А. А. Ковалевский // Доклады Томского государственного университета систем управления и радиоэлектроники. — 2014. – Т. 33, № 3. — С. 135–139.
- [2]
- UIR.pdf [Электронный ресурс]. URL: https://yadi.sk/i/u3v0H-QTeohLV (дата обращения: 08.01.2016).
- [3]
- Pugixml v1.2 — Light-weight, simple and fast XML parser for C++ with XPath support [Электронный ресурс]. URL: http://pugixml.org/2012/05/01/pugixml-1.2-release.html (дата обращения: 15.01.2016)
- [4]
- Pugixml Benchmark [Электронный ресурс]. URL: http://pugixml.org/benchmark.html (дата обращения: 15.01.2016)
- [5]
- pugixml_uir.xml [Электронный ресурс]. URL: https://yadi.sk/d/gznJ7uXTmzXGJ (дата обращения: 15.01.2016)
Примечания и отзывы
Plays:26
Comments:0