Аннотация:
В статье предлагается подход к статическому анализу программ на языке Python на основе низкоуровневого внутреннего представления и девиртуализации, который позволяет выполнять межпроцедурный и межмодульный анализ. Подход применим к программам, не содержащим ручных аннотаций типов, и может быть использован для поиска сложных ошибок, которые не ищутся популярными инструментами на основе анализа АСД. Представление для анализа строится по байткоду CPython, затем в результате работы межпроцедурного алгоритма девиртуализации разрешаются вызовы. Предлагаемый подход к девиртуализации уже реализован для языков C, C++, Java, Go и показал хорошие результаты без необходимости изменения существующих детекторов. После адаптации алгоритма для языка Python доля истинных срабатываний детекторов для Python составила от 60% до 96%. Таким образом, изначально предложенный для статически типизированных языков алгоритм оказался применимым к языку Python.
Ключевые слова:
статический анализ, язык программирования Python, девиртуализация