Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом (Алексей Пустыгин, OSEDUCONF-2017)

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

Версия от 08:12, 20 октября 2025; StasFomin (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

Аннотация

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

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

Видео

on youtube

Слайды

Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом.pdf

Тезисы

Анализ пути исполнения на этапе статического анализа — часто встречающееся действие при разработке, сдаче в эксплуатацию и сопровождении программ[1][2]. Использование универсальных промежуточных представлений позволяет применять унифицированный функционал для текстов на нескольких языках[3][4].

Для анализа потока управления исходного кода необходимо разработать соответствующее эквивалентное представление[5]. Поток управления — множество всех возможных путей исполнения программы[6].

Универсальное представление графа потока управления (Universal Control Flow Representation, UCFR) будет описывать только конкретный участок выполнения программы — функцию или метод класса. Назовём такой участок потока управления функциональным блоком. Граф потока управления является ориентированным графом общего вида, допускающим циклы.

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

Узлы эквивалентного представления избранных языков
Язык project method / function block / flow tryExcept finally for if while call
Java + методы try / catch + for / foreach + while / dowhile +
Python + методы / функции + try / except + foreach + while +
C++ + методы / функции + try / catch for + while / dowhile +
PHP + методы / функции + try / catch (с версии 5.5) for / foreach + while / dowhile +

В качестве текстовой нотации эквивалентного представления выбран формат XML[7], что позволяет сохранять эквивалентное представление в текстовом файле и проводить его анализ (возможно предварительный) вручную.

Анализ графа вызовов целиком — задача, требующая значительных ресурсов и порождающая слишком много данных. Предложено ограничить анализ графа вызовов только отдельными участками или трассами. Трасса — это последовательность вызываемых функций или методов на графе потока управления. Определённая трасса соответствует некоторому возможному сценарию исполнения анализируемой программы и представляется в виде ориентированного графа. Вначале выделяются функциональные блоки, входящие в трассу. Начальной вершиной ребра, связывающего блоки, выступает вызывающий функциональный блок, конечной — вызываемый. Внутри функционального блока трасса также представляется в виде ориентированного графа, узлами выступают блоки, представленные в блок-схеме (БСА) данной функции или метода, располагающиеся вдоль трассы, а рёбра соответствуют рёбрам БСА.

На основе функционала построения трасс были созданы прототипы анализаторов для поиска создаваемых вдоль трассы объектов и для поиска вдоль трассы интересующих вызовов.

Выводы

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

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

  1. Пустыгин А. Н. Построение эквивалентного представления зависимостей классов, полей, методов, функций и их перекрёстного использования в исходных текстах программ / А. Н. Пустыгин, А. А. Ковалевский, И. С. Белоусов // Одиннадцатая конференция «Свободное программное обеспечение в высшей школе»: материалы конференции. — Переславль-Залесский, 30–31 января 2016. — С. 40–44.
  2. Зубов М. В. Подходы к статическому анализу открытого исходного кода / М. В. Зубов, Е. В. Старцев, А. Н. Пустыгин // Сб. материалов Восьмой Междунар. конф. разработчиков и пользователей свободного программного обеспечения Linux Vacation / Eastern Europe. — Брест: Альтернатива, 2012. — С. 36–40.
  3. Зубов М. В. Построение универсального представления графа потока управления для статического анализа исходного кода / М. В. Зубов, А. Н. Пустыгин, Е. В. Старцев // Девятая конференция «Свободное программное обеспечение в высшей школе»: тез. докл. — М.: Альт Линукс, 2014. — С. 46–51.
  4. Ошнуров Н. А. Построение универсального промежуточного представления исходных текстов на языках C++ и C# / Н. А. Ошнуров, А. Н. Пустыгин, А. А. Ковалевский // Доклады Томского государственного университета систем управления и радиоэлектроники. — 2014. — Т. 33, № 3. — С. 135–139.
  5. Пустыгин А. Н. Построение эквивалентного представления зависимостей классов, полей, методов, функций и их перекрёстного использования в исходных текстах программ / А. Н. Пустыгин, А. А. Ковалевский, И. С. Белоусов // Одиннадцатая конференция «Свободное программное обеспечение в высшей школе»: материалы конференции. — Переславль-Залесский, 30–31 января 2016. — С. 40–44.
  6. Зубов М. В. Подходы к статическому анализу открытого исходного кода / М. В. Зубов, Е. В. Старцев, А. Н. Пустыгин // Сб. материалов Восьмой Междунар. конф. разработчиков и пользователей свободного программного обеспечения Linux Vacation / Eastern Europe. — Брест: Альтернатива, 2012. — С. 36–40.
  7. Зубов М. В. Подходы к статическому анализу открытого исходного кода / М. В. Зубов, Е. В. Старцев, А. Н. Пустыгин // Сб. материалов Восьмой Междунар. конф. разработчиков и пользователей свободного программного обеспечения Linux Vacation / Eastern Europe. — Брест: Альтернатива, 2012. — С. 36–40.


Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом (Алексей !.jpg



Plays:97   Comments:0