Построение эквивалентного представления зависимостей классов, полей, методов, функций и их перекрестного использования в исходном коде — различия между версиями

Материал из 0x1.tv

[[File:Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде-pic1.png|left|page=-|480px]]
[[File:Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде-pic2.png|left|page=-|480px]]
[[File:Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде-pic3.png|left|page=-|480px]]
[[File:Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде-pic4.png|left|page=-|480px]]

{{----}}

В качестве тестового проекта было использованно УПП исходного текста проекта на C++ библиотеки pugixml [3,5].

Прототип генератора графа зависимостей имеет функционал получения среза по классам и методам, позволяющий визуализировать
только интересуемую часть графа (Рисунок 5).

[[File:Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде-pic5.png|left|page=-|640px]]
{{----}}

==== Выводы ====

Версия 10:40, 7 марта 2016

«Построение эквивалентного представления зависимостей классов, полей, методов, функций и их перекрестного использования в исходных текстах программ (Алексей Пустыгин, OSEDUCONF-2016)»

Аннотация

Докладчик
Алексей Пустыгин.jpg
Алексей Пустыгин

Предложено эквивалентное представление исходного текста в форме графа зависимостей классов, полей, методов, функций и их перекрестного использования. Оно основано на трансформации универсального промежуточного представления в текстовый формат на языке описания графов.

Универсальное промежуточное представление является текстовым эквивалентом абстрактного синтаксического дерева на языке разметки.

Видео


Слайды

Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf Построение эквивалентного представления зависимостей классов-методов-функций и их перекрестного использования в коде.pdf

Тезисы

Для упрощения статического анализа многоязычных программных систем, включающего построение эквивалентных представлений и выполнения различного рода анализов, предлагается использование универсального промежуточного представления (УПП) [1,2].

Предложено представление, являющееся трансформацией УПП, в форме графа зависимостей классов, полей, методов, функций и их перекрестного использования.

Предложен прототип генератора такого представления в текстовый формат на языке описания графов DOT.

Граф зависимостей классов, полей, методов, функций и их перекрестного использования

Для построения графа зависимостей классов, полей, методов, функций и их перекрестного использования (в дальнейшем — «граф зависимостей») путем трансформации УПП необходим полный доступ к DOM УПП, которое в свою очередь представлено XML документом. В качестве средства загрузки и обработки DOM УПП была выбрана библиотека pugixml [3]. Критерием выбора послужил сравнительный тест [4]. Так как предложенное эквивалентное представление предлагается в качестве конечного узла перед непосредственным выполнением пользовательского анализа, необходимо выбрать было формат визуализации.

Из существующих форматов представления графов был выбран язык описания графов DOT, как один из самых простых и распространенных, а также пакет утилит Graphviz для автоматической визуализации графов в формате DOT.

Алгоритм генерации графа зависимостей двухпроходный. Дерево УПП имеет в контексте графа зависимостей структуру как на рисунке 1.

Загруженная DOM рекурсивно обходится в глубину и информация о каждом узле из контекста графа зависимостей сохраняется в индекс — DOM2.

После обхода происходит генерация графа зависимостей в файл на языке описания графов DOT путем обхода дерева DOM2 в глубину.

Граф зависимостей содержит программные сущности (классы, поля, методы и т.д.) в качестве узлов, а связи атрибутированы в соответствии с типом сущностей и их отношением. Атрибутом связей выступают: вес связи, цвет, начертание.

  • Связи наследования и принадлежности к классу обозначены зеленой сплошной связью.
  • Связи вызова метода — сплошной стрелкой со счетчиком повторов.
  • Синие стрелки обозначают статические вызовы, красные — константные, остальные — черным.
  • Связи использования поля обозначены черной сплошной стрелкой со счетчиком повторов.

Вершины графа зависимостей представлены тремя типами: класс, поле, метод/функция.

Их общий вид представлен на рисунках 2, 3, 4.

page=-
page=-
page=-
page=-

В качестве тестового проекта было использованно УПП исходного текста проекта на C++ библиотеки pugixml [3,5].

Прототип генератора графа зависимостей имеет функционал получения среза по классам и методам, позволяющий визуализировать только интересуемую часть графа (Рисунок 5).

page=-

Выводы

Предложено эквивалентное представление исходного кода программ в форме графа зависимостей классов, полей, методов, функций и их перекрестного использования.

Разработан прототип генератора представления в формате языка описания графов 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)

Примечания и отзывы