RUS  ENG
Полная версия
ЖУРНАЛЫ // Труды института системного программирования РАН // Архив

Труды ИСП РАН, 2022, том 34, выпуск 6, страницы 29–40 (Mi tisp736)

Повышение точности статического анализа за счет учета значений полей класса, имеющих единственное константное значение

В. С. Карцевab, В. Н. Игнатьевcb

a Московский физико-технический институт
b Институт системного программирования им. В.П. Иванникова РАН
c Московский государственный университет имени М. В. Ломоносова

Аннотация: В данной статье описывается подход, позволяющий с помощью предварительного анализа полей с единственным возможным значением повысить точность работы детекторов статического анализатора уровня символьного выполнения. Помимо этого, детектор предупреждает программиста о забытых модификаторах readonly и о неиспользуемых полях. Детектор был реализован в рамках промышленного статического анализатора SharpChecker для языка C#. Анализ проводится на уровне абстрактного синтаксического дерева, что позволяет снизить затраты времени и ресурсов. Сохраненные значения для ряда полей позволяют использовать конкретные константы вместо символьных значений на этапе символьного выполнения, тем самым повышая точность. В результате удалось заметно улучшить качество некоторых анализаторов, таких как UNREACHABLE_CODE (улучшение на 7.57%) или DEREF_OF_NULL (улучшение на 1.33%), и получить новые срабатывания в случаях с забытым readonly или неиспользуемыми полями. Хорошие результаты позволили включить детектор в основную ветку SharpChecker и предоставить его пользователям. В работе подробно рассмотрен алгоритм работы детектора и приведены примеры срабатываний на наборе ПО с открытым исходным кодом.

Ключевые слова: статический анализ, C#, неиспользуемое поле, забытый readonly, повышение точности, анализ использования полей, единожды инициализированное поле

DOI: 10.15514/ISPRAS-2022-34(6)-2



© МИАН, 2024