|
Эта публикация цитируется в 2 научных статьях (всего в 2 статьях)
Анализ сущностей программ на языках Си/Си++ и связей между ними для понимания программ
А. А. Белеванцев, Е. А. Велесевич Институт системного программирования РАН
Аннотация:
В статье рассматривается инструмент статического анализа программ, определяющий сущности программы на языке Си или Си++, их метрики и связи между ними. Сущностями программы являются файлы, функции, классы, методы и т.п., а связями – вызовы, наследование, чтение/запись глобальных переменных, включение, агрегация. Необходимость построения такого инструмента возникает в связи с тем, что для широкого круга задач понимания программ основой для построения решения является автоматическое извлечение необходимой информации о программе из ее исходных кодов. Инструмент должен поддерживать все конструкции языков Си и Си++ и масштабироваться для анализа реальных программных систем в миллионы строк исходного кода.
Статья посвящена методам построения такого инструмента на основе открытой компиляторной инфраструктуры LLVM[1]. Для разбора текстов программ используется промышленный компилятор Clang[2], а для последующего анализа – собственный инструмент на основе LLVM, обеспечивающий консолидацию информации обо всей программе. Так как окончательный анализ выполняется на уровне внутреннего представления (биткода) LLVM, то необходимо обеспечить сохранение в файлах с этим представлением дополнительной информации уровня исходного кода, теряющейся при изначальной трансляции. Для этого, а также для поддержки разнообразных диалектов Си и Си++, было выполнено более 400 доработок компилятора Clang[2]. В анализаторе уровня биткода центральной частью является компоновщик, задачей которого является объединение информации об одних и тех сущностях, участвующих в сборке различных компонент программной системы (например, библиотеки и приложения, ее использующего). Построенные с использованием компоновщика связи между сущностями позволяют точнее отследить отношения между компонентами всей системы. В статье также представляются результаты тестирования инструмента на коде ОС Android.
Ключевые слова:
понимание программ, LLVM, статический анализ, метрики исходного кода.
Образец цитирования:
А. А. Белеванцев, Е. А. Велесевич, “Анализ сущностей программ на языках Си/Си++ и связей между ними для понимания программ”, Труды ИСП РАН, 27:2 (2015), 53–64
Образцы ссылок на эту страницу:
https://www.mathnet.ru/rus/tisp122 https://www.mathnet.ru/rus/tisp/v27/i2/p53
|
|