Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом (Алексей Пустыгин, OSEDUCONF-2017) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) |
StasFomin (обсуждение | вклад) |
||
== Тезисы == <latex> Анализ пути исполнения на этапе статического анализа — часто встречающееся действие при разработке, сдаче в эксплуатацию и сопровождении программ [<ref name="cite-4,">''Пустыгин А. Н.'' Построение эквивалентного представления зависимостей классов, полей, методов, функций и их перекрёстного использования в исходных текстах программ / А. Н. Пустыгин, А. А. Ковалевский, И. С. Белоусов // Одиннадцатая конференция «Свободное программное обеспечение в высшей школе»: материалы конференции. — Переславль-Залесский, 30–31 января 2016. — С. 40–44.</ref><ref name="cite-5]">''Зубов М. В.'' Подходы к статическому анализу открытого исходного кода / М. В. Зубов, Е. В. Старцев, А. Н. Пустыгин // Сб. материалов Восьмой Междунар. конф. разработчиков и пользователей свободного программного обеспечения Linux Vacation / Eastern Europe. — Брест: Альтернатива, 2012. — С. 36–40.</ref>. Использование универсальных промежуточных представлений позволяет применять унифицированный функционал для текстов на нескольких языках[1,2]<ref name="cite-1">''Зубов М. В.'' Построение универсального представления графа потока управления для статического анализа исходного кода / М.\, В.\, Зубов, А.\, Н.\, Пустыгин, Е.\, В.\, Старцев // Девятая конференция «Свободное программное обеспечение в высшей школе»: тез. докл. — М.: Альт Линукс, 2014. c— С.~ 46--–51. \bibitem{pus2</ref><ref name="cite-2} \emph{">''Ошнуров\, Н.\, А.}'' Построение универсального промежуточного представления исходных текстов на языках C++ и C\# /Ошнуров\,Н.\,А., Пустыгин\,А.\,Н., Ковалевский\,А.\,А. //# / Н. А. Ошнуров, А. Н. Пустыгин, А. А. Ковалевский // Доклады Томского государственного университета систем управления и радиоэлектроники. ---— 2014. ---— Т. 33. ---, №~ 3. c— С.~ 135--–139.</ref>. Для анализа потока управления исходного кода необходимо разработать соответствующее эквивалентное представление [<ref name="cite-3]. ">''Пустыгин А. Н.'' Построение эквивалентного представления зависимостей классов, полей, методов, функций и их перекрёстного использования в исходных текстах программ / А. Н. Пустыгин, А. А. Ковалевский, И. С. Белоусов // Одиннадцатая конференция «Свободное программное обеспечение в высшей школе»: материалы конференции. — Переславль-Залесский, 30–31 января 2016. — С. 40–44.</ref>. Поток управления — множество всех возможных путей исполнения программы[<ref name="cite-6]">''Зубов М. В.'' Подходы к статическому анализу открытого исходного кода / М. В. Зубов, Е. В. Старцев, А. Н. Пустыгин // Сб. материалов Восьмой Междунар. конф. разработчиков и пользователей свободного программного обеспечения Linux Vacation / Eastern Europe. — Брест: Альтернатива, 2012. — С. 36–40.</ref>. Универсальное представление графа потока управления (\emph{''Universal Control Flow Representation, UCFR}UCFR'') будет описывать только конкретный участок выполнения программы — функцию или метод класса. Назовеём такой участок потока управления функциональным блоком. Граф потока управления является ориентированным графом общего вида, допускающим циклы. Основным элементом потока управления является функция (метод класса), а для построения формата достаточно удержать в промежуточном представлении элементы (узлы) дерева разбора, приведеённыйе в таблице для избранного круга языков программирования. \begin{table} \scriptsize \tabcolsep=0.1em\noindent \begin{center} \caption{ программирования. {| class="wikitable" style="font-size:90%;" |+ Узлы эквивалентного представления избранных языков} \begin{tabular}{|p{0.08\textwidth}|p{0.09\textwidth}|p{0.12\textwidth}|p{0.08\textwidth}|p{0.14\textwidth}|p{0.11\textwidth}|p{0.08\textwidth}|p{0.07\textwidth}|p{0.09\textwidth}|p{0.07\textwidth}|}\hline \Emph{ ! Язык} & \Emph{ !! project} & \Emph{ !! method /\newline function} & \Emph{ !! block /\newline flow} & \Emph{ !! tryExcept} & \Emph{ !! finally} &\Emph{ !! for} &\Emph{ !! if} &\Emph{ !! while} &\Emph{ !! call}\\\hline |- | Java &|| + &|| методы & &|| || try /\newline catch &|| + &|| for /\newline foreach &|| + &|| while /\newline dowhile &|| +\\\hline |- | Python &|| + &|| методы /\newline функции &|| + &|| try /\newline except &|| + &|| foreach &|| + &|| while &|| + \\\hline |- | C++ &|| + &|| методы /\newline функции &|| + &|| try /\newline catch &{}- &|| — || for &|| + &|| while /\newline dowhile &|| +\\\hline |- | PHP &|| + &|| методы /\newline функции &|| + &|| try /\newline catch &|| (с версии 5.5) &for/\newline foreach &+ &while/\newline dowhile &+\\\hline \end{tabular} \end{center} \end{table}|| for / foreach || + || while / dowhile || + |} В качестве текстовой нотации эквивалентного представления выбран формат XML [<ref name="cite-7]">''Зубов М. В.'' Подходы к статическому анализу открытого исходного кода / М. В. Зубов, Е. В. Старцев, А. Н. Пустыгин // Сб. материалов Восьмой Междунар. конф. разработчиков и пользователей свободного программного обеспечения Linux Vacation / Eastern Europe. — Брест: Альтернатива, 2012. — С. 36–40.</ref>, что позволияет сохранять эквивалентное представление в текстовом файле и проводить его анализ (возможно предварительный) вручную. Анализ графа вызовов целиком "---— задача, требующая значительных ресурсов и порождающая слишком много данных. Предложено ограничить анализ графа вызовов только отдельными участками или \textit{трасса}\textit{ми}''трассами''. Трасса "---— это последовательность вызываемых функций или методов на графе потока управления. Определеённая трасса соответствует некоторому возможному сценарию исполнения анализируемой программы и представляется в виде ориентированного графа. Вначале выделяются функциональные блоки, входящие в трассу. Начальной вершиной ребра, связывающего блоки, выступает вызывающий функциональный блок, конечной "---— вызываемый. Внутри функционального блока трасса также представляется в виде ориентированного графа, узлами выступают блоки, представленные в блок-схеме (БСА) данной функции/ или метода, располагающиеся вдоль трассы, ребрами "--- ребра а рёбра соответствуют рёбрам БСА. На основе функционала построения трасс были построенысозданы прототипы анализаторов для поиска создаваемых вдоль трассы объектов и для поиска вдоль трассы интересующих вызовов. %\begin{figure}[h!] %\centering %\ncludegraphics[width=0.7\textwidth]{22-img001} %\caption{Пример анализа трасс: визуализация трассы, поиск объектов, создаваемых вдоль трассы (объекты классов Link и %List), поиск интересующих вызовов (функция replace).} %\label{img1} %\end{figure} \section{ == Выводы} == Для выполнения статического анализа возможных путей исполнения программ по исходному коду был предложен формат универсального эквивалентного представления потока управления, на основе которого реализованы ряд прототипов анализаторов, предназначенных для графовых визуализаций. На основе этих моделей были предложены различные виды анализа трасс. Используя полученные графические модели, можно анализировать исполнение программ с целью обнаружения логических ошибок на ранних этапах разработки, а также исследовать функционирование и алгоритмы существующих программ. \begin{thebibliography}{9} \bibitem{pus2-1} \emph{Зубов\,М.\,В.} \bibitem{pus2-3} \emph{Пустыгин\,А.\,Н.} Построение эквивалентного представления зависимостей классов, полей, методов, функций и их перекрестного использования в исходных текстах программ /А.\,Н.\,Пустыгин, А.\,А.\,Ковалевский, И.\,С.\,Белоусов //Одиннадцатая конференция <<Свободное программное обеспечение в высшей школе>>: Материалы конференции/ Переславль "--- Залесский, 30--31 января 2016 года --- 120 с.: илл. Тезисы доклада c.~40--44. \bibitem{pus2-4} \emph{Зубов\,М.\,В.} Статический анализ ПО с помощью его промежуточных представлений и технологий с открытым исходным кодом /М.\,В.\,Зубов, А.\,Н.\,Пустыгин, Е.\,В.\,Старцев//Матер. 2-й Междунар. конф. «FOSS. Lviv-2012», Львов. --- Львiв: Сорока, 2012. --- c.~165--168. \bibitem{pus2-5} \emph{Зубов\,М.\,В.} Подходы к статическому анализу открытого исходного кода /М.\,В.\,Зубов, Е.\,В.\,Старцев, А.\,Н.\,Пустыгин //Сб. материалов Восьмой Междунар. конф. разработчиков и пользователей свободного программного обеспечения Linux Vacation/Eastern Europe. "--- Брест: Альтернатива, 2012. --- c.~36--40. \bibitem{pus2-6} \emph{Ковалевский\,А.\,А., Пустыгин\,А.\,Н., Ошнуров\,Н.\,А.} Построение эквивалентного представления исходных текстов программ в форме, пригодной для выполнения анализов потока данных в потоке управления //Известия Юго-Западного гос. ун-та, Серия управление, вычислительная техника, информатика. Медицинское приборостроение. 2015. № 1 (14). c.~28--34. \bibitem{pus2-7} \emph{Зубов\,М.\,В.} Математическое моделирование универсальных многоуровневых промежуточных представлений для статического анализа исходного кода/М.\,В.\,Зубов, А.\,Н.\,Пустыгин, Е.\,В.\,Старцев //Докл. Томск. гос. ун-та систем управления и радиоэлектроники. 2014. Т.~33, №~3. c.~94--99. \end{thebibliography} </latex> {{----}} == Примечания и отзывы == <!-- <blockquote>[©]</blockquote> --> <references /> {{fblink|1845644995688513}} {{vklink|428}} <references/> [[File:{{#setmainimage:Прототип программного инструмента для анализа связности потока управления программ с открытым исходным текстом (Алексей !.jpg}}|center|640px]] <!-- topub --> {{stats|disqus_comments=0|refresh_time=2021-08-31T18:08:44.672631|vimeo_comments=0|vimeo_plays=16|youtube_comments=0|youtube_plays=81}} [[Категория:OSEDUCONF-2017]] [[Категория:Open-source projects]] | |||
Версия 21:06, 19 октября 2025
Содержание
Аннотация
- Докладчик
- Алексей Пустыгин
Описано использования эквивалентных представлений исходного текста для получения участков связности потока управления на этапе статического анализа, для чего был разработан формат эквивалентного представления потока управления, пригодный для текстов на нескольких языках программирования. На основе этого формата написаны прототипы утилит получения такого представления, и на их основе разработаны прототипы утилит анализа, выходные данные визуализируются.
Видео
Посмотрели доклад? Понравился? Напишите комментарий! Не согласны? Тем более напишите.
Слайды
Тезисы
Анализ пути исполнения на этапе статического анализа — часто встречающееся действие при разработке, сдаче в эксплуатацию и сопровождении программ[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], что позволяет сохранять эквивалентное представление в текстовом файле и проводить его анализ (возможно предварительный) вручную.
Анализ графа вызовов целиком — задача, требующая значительных ресурсов и порождающая слишком много данных. Предложено ограничить анализ графа вызовов только отдельными участками или трассами. Трасса — это последовательность вызываемых функций или методов на графе потока управления. Определённая трасса соответствует некоторому возможному сценарию исполнения анализируемой программы и представляется в виде ориентированного графа. Вначале выделяются функциональные блоки, входящие в трассу. Начальной вершиной ребра, связывающего блоки, выступает вызывающий функциональный блок, конечной — вызываемый. Внутри функционального блока трасса также представляется в виде ориентированного графа, узлами выступают блоки, представленные в блок-схеме (БСА) данной функции или метода, располагающиеся вдоль трассы, а рёбра соответствуют рёбрам БСА.
На основе функционала построения трасс были созданы прототипы анализаторов для поиска создаваемых вдоль трассы объектов и для поиска вдоль трассы интересующих вызовов.
Выводы
Для выполнения статического анализа возможных путей исполнения программ по исходному коду был предложен формат универсального эквивалентного представления потока управления, на основе которого реализованы ряд прототипов анализаторов, предназначенных для графовых визуализаций. На основе этих моделей были предложены различные виды анализа трасс. Используя полученные графические модели, можно анализировать исполнение программ с целью обнаружения логических ошибок на ранних этапах разработки, а также исследовать функционирование и алгоритмы существующих программ.
Примечания и отзывы
- ↑ Пустыгин А. Н. Построение эквивалентного представления зависимостей классов, полей, методов, функций и их перекрёстного использования в исходных текстах программ / А. Н. Пустыгин, А. А. Ковалевский, И. С. Белоусов // Одиннадцатая конференция «Свободное программное обеспечение в высшей школе»: материалы конференции. — Переславль-Залесский, 30–31 января 2016. — С. 40–44.
- ↑ Зубов М. В. Подходы к статическому анализу открытого исходного кода / М. В. Зубов, Е. В. Старцев, А. Н. Пустыгин // Сб. материалов Восьмой Междунар. конф. разработчиков и пользователей свободного программного обеспечения Linux Vacation / Eastern Europe. — Брест: Альтернатива, 2012. — С. 36–40.
- ↑ Зубов М. В. Построение универсального представления графа потока управления для статического анализа исходного кода / М. В. Зубов, А. Н. Пустыгин, Е. В. Старцев // Девятая конференция «Свободное программное обеспечение в высшей школе»: тез. докл. — М.: Альт Линукс, 2014. — С. 46–51.
- ↑ Ошнуров Н. А. Построение универсального промежуточного представления исходных текстов на языках C++ и C# / Н. А. Ошнуров, А. Н. Пустыгин, А. А. Ковалевский // Доклады Томского государственного университета систем управления и радиоэлектроники. — 2014. — Т. 33, № 3. — С. 135–139.
- ↑ Пустыгин А. Н. Построение эквивалентного представления зависимостей классов, полей, методов, функций и их перекрёстного использования в исходных текстах программ / А. Н. Пустыгин, А. А. Ковалевский, И. С. Белоусов // Одиннадцатая конференция «Свободное программное обеспечение в высшей школе»: материалы конференции. — Переславль-Залесский, 30–31 января 2016. — С. 40–44.
- ↑ Зубов М. В. Подходы к статическому анализу открытого исходного кода / М. В. Зубов, Е. В. Старцев, А. Н. Пустыгин // Сб. материалов Восьмой Междунар. конф. разработчиков и пользователей свободного программного обеспечения Linux Vacation / Eastern Europe. — Брест: Альтернатива, 2012. — С. 36–40.
- ↑ Зубов М. В. Подходы к статическому анализу открытого исходного кода / М. В. Зубов, Е. В. Старцев, А. Н. Пустыгин // Сб. материалов Восьмой Междунар. конф. разработчиков и пользователей свободного программного обеспечения Linux Vacation / Eastern Europe. — Брест: Альтернатива, 2012. — С. 36–40.
Plays:97
Comments:0

