Платформа статического анализа

Платформа статического анализа включает модель анализируемой программы и набор алгоритмов анализа. Данная платформа может использоваться как для обнаружения дефектов, так и для решения других задач программной инженерии.

Модель программы

Модель программы является упрощенным представлением исходного кода программы и содержит информацию об объектах и конструкциях, которые интерпретируются алгоритмами анализа. Используется модифицированная модель программы со статическим однократным присваиванием (Single Static Assignment).

Механизм аннотаций

Для учета поведения библиотечных функций, а также других функций без исходного кода используется механизм аннотаций. Аннотации позволяют определять поведение функций, типы и состояния ресурсов (файлов, сокетов и т.п.), системное окружение программы. Аннотации описываются на языке PanLang (Program Annotation language).

Использование аннотаций позволяет обнаруживать ряд дополнительных дефектов, например:

  • утечки ресурсов
  • ошибки протоколов работы с ресурсами
  • использование потенциально опасных функций
  • ошибки форматной строки

Алгоритмы анализа

Алгоритмы анализа используют построенную модель программы, дополненную аннотациями. В процессе анализа определяются возможные состояния программы – значения объектов программы в заданных точках. В качестве таких точек выбираются отдельные конструкции модели программы. При определении состояний программы комбинируются раздельный анализ путей выполнения и объединение состояний в местах слияния потоков управления.

Используются следующие алгоритмы анализа:

  • анализ указателей - определяет объекты, на которые указывают переменные-указатели
  • интервальный анализ - определяет значения переменных простых типов
  • ресурсный анализ - определяет состояния ресурсов (файлов, сокетов и т.п.)

Особенности алгоритмов

  • межпроцедурный, контекстночувствительный анализ
  • интерпретация условий в операторах ветвления
  • анализ объектов сложных типов
  • анализ адресной арифметики
  • поддержка циклов и рекурсий
  • анализ программ с множественными дефектами

Обнаружение дефектов

Обнаружение дефектов выполняется для конструкций программы, на основе состояния программы перед каждой конструкцией. Типы обнаруживаемых дефектов зависят от типа конструкции программы. Для каждого дефекта определяется тип, местоположение и контекст.

Показатели эффективности

Основными показателями эффективности обнаружения дефектов являются:

  • плотность дефектов - количество всех обнаруженных дефектов на 1000 строк программы
  • полнота - показатель, характеризующий долю обнаруживаемых дефектов среди всех дефектов программы
  • точность - показатель, характеризующий долю истинных дефектов среди всех обнаруженных дефектов
  • ресурсоёмкость анализа - показатель, характеризующий объем вычислительных ресурсов, необходимый для выполнения анализа