|
Эта публикация цитируется в 7 научных статьях (всего в 7 статьях)
Инфраструктура статического анализа программ на языке C#
В. К. Кошелев, В. Н. Игнатьев, А. И. Борзилов Институт системного программирования РАН,
109004, Россия, г. Москва, ул. А. Солженицына, дом 25
Аннотация:
В работе рассмотрены различные аспекты статического анализа программ на языке C# с целью обнаружения максимального количества ошибок за минимально приемлемое время. Описан полный цикл статического анализа программного обеспечения, при этом основное внимание уделяется особенностям, возникающим при анализе языка C#. Рассмотрены методы, позволяющие учитывать популярные возможности языка на всех уровнях анализа: построение графа вызовов и графа потока управления, проведение анализа потоков данных и чувствительного к контексту и путям межпроцедурного анализа. Предлагается метод символьного исполнения, основанный на таких работах, как Bounded Model Checking и Saturn Software Analysis Project. В статье описана организация модели памяти, позволяющая как проводить точный внутрипроцедурный анализ, так и создавать компактные представления для привязанных к функциям условий, используемые при межпроцедурном анализе. Особое внимание уделяется теме оптимизации возникающих на этапе чувствительного к путям анализа условий. Условия необходимо оптимизировать как по размеру, поскольку при межпроцедурном чувствительном к путям анализе необходимо сохранять большое количество условий для каждой проанализированной функции, так и по сложности, поскольку время анализа ограничено. Решение условий производится при помощи современных SMT-решателей, таких как Microsoft Z3 Prover. В статье также рассмотрены различные подходы к моделированию поведения библиотечных функций: при помощи резюме в виде набора признаком или в виде упрощенных реализаций на языке C#. Все приведённые решения реализованы в инструменте статического анализа SharpChecker и протестированы на наборе проектов различного объема (от 1.5 тыс. до 1.35 млн. строк кода) с открытым исходным кодом.
Ключевые слова:
Roslyn, C#, статический анализ, использование нулевого указателя, чувствительность к путям, чувствительность к контексту, резюме функции, поиск дефектов.
Образец цитирования:
В. К. Кошелев, В. Н. Игнатьев, А. И. Борзилов, “Инфраструктура статического анализа программ на языке C#”, Труды ИСП РАН, 28:1 (2016), 21–40
Образцы ссылок на эту страницу:
https://www.mathnet.ru/rus/tisp2 https://www.mathnet.ru/rus/tisp/v28/i1/p21
|
|