49
2018

Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

2018

Page 2: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

2

Статический анализ

Семейство методов анализа, не требующих исполнения программ

Артефакты, используемые при анализе:◦ Исходный код программного обеспечения

◦ Промежуточные представления кода (например, байт-код)

◦ Исполнимый код

◦ Аннотации программ

◦ Формальные спецификации

Page 3: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

3

Статический анализ

Применяется в следующих задачах:◦ Форматирование программ

◦ Реинжиниринг программ Оптимизация

Распараллеливание

Обфускация

Деобфускация

Модификация программ

◦ Реверс-инжиниринг Восстановление моделей программ

Визуализация внутренней структуры программ

◦ Анализ качества программ

Вычисления программных метрик

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

Обнаружение уязвимостей

Page 4: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

4

Статический анализ для повышения качества ПО

Обычно разделяют статический анализ и формальную верификацию ПО

Формальная верификация◦ Статический метод◦ Используемые артефакты:

Исходный код Формальные спецификации

◦ Проверка соответствия программы формальной спецификации

Статический анализ◦ Статический метод◦ Обнаружение ошибок программы (необязательно

несоответствий спецификации)

В настоящее время все сложнее найти грань между статическим анализом и верификацией

Page 5: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

5

Ошибки в программном обеспечении

Ошибки в спецификации

Ошибки в программе

Ошибки в документации

Ошибки в ПО

Несоответствие спецификации (функциональные дефекты)

Общие ошибки реализации (нефункциональные дефекты)

Ошибки в кодировании

Нарушения правил работы со

сложными данными

Ошибки использования

библиотек

Page 6: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

6

Нефункциональные дефекты

Не являются нарушением явных спецификаций

Являются следствием ◦ сложности языков программирования

◦ сложности библиотек

◦ сложности алгоритмов

◦ сложности структур данных

◦ использования параллелизма

◦ …

Page 7: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

7

Нефункциональные дефекты

Арифметические ошибки◦ Арифметическое переполнение◦ Деление на ноль

Ошибки работы с буферами◦ Выход за границу массива◦ Переполнение буфера

Неинициализированные объекты◦ Использование неинициализированных переменных◦ Разыменование неинициализированного указателя

Ошибки работы с указателями◦ «Висячие» указатели◦ Разыменование нулевого указателя◦ Работа с некорректным указателем◦ Двойное освобождение памяти

Несоблюдение протокола работы с библиотеками Утечка ресурсов Ошибки форматных строк …

Page 8: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

8

Проявление дефектов

Без проявления

Зависания

Сбои

Падения

Нарушения целостности данных

Деградация производительности

Уязвимости

Page 9: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

9

Опасные конструкции

Язык С◦ Макроопределения◦ Указатели◦ Массивы◦ Адресная арифметика◦ Указатели на функции◦ Приведения типов◦ Объединения (union)◦ Вычисляемые переходы

Язык С++◦ Полиморфизм◦ Исключения

Page 10: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

10

Статический анализ для обнаружения ошибок

Использует ◦ Исходный код ПО для анализа

◦ Семантику конструкций языка программирования

Позволяет ◦ проанализировать все возможные трассы исполнения

программы

◦ проанализировать все наборы входных данных

Может быть полностью или почти полностью автоматизирован

Позволяет обнаружить нефункциональныедефекты

Page 11: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

11

Характеристики анализа

Полнота – доля найденных дефектов среди всех дефектов программы

Точность – доля найденных истинных дефектов среди всех найденных

Ресурсоемкость – объем необходимых ресурсов: машинное время, память

Полнота Точность

Ресурсоёмкость

Page 12: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

12

Методы статического анализа программ

Легковесные методы◦ Сигнатурный анализ

Тяжеловесные методы◦ Анализ потока (анализ состояний программы)

◦ Абстрактная интерпретация

◦ Системы типов и эффектов

◦ Ограниченная проверка модели (BMC)

Page 13: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

13

Легковесные методы

Используют только структурные модели программ (обычно АСД)

Не анализируют динамику исполнения

Анализируются только синтаксические конструкции и статическая семантика

Пример – сигнатурный анализ

Программный код проверяется на соответствие множеству шаблонов ошибок/неудачных конструкций/опечаток

Page 14: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

14

Сигнатурный анализ

Примеры шаблонов ошибок:◦ Одинаковые операнды у операций (==, &&, -)

◦ Ошибки приоритетов операций

◦ Возврат указателя на локальный объект

◦ Двойные присваивания

◦ Секции “then” и “else” эквивалентны

◦ Лишние символы “;”, “,” и т.п.

◦ Дублирующиеся аргументы функций

◦ Использование логических операций вместо битовых и наоборот (&/&&, |/||)

◦ Присваивание вместо сравнения (x=y) вместо (x==y)

◦ И т.п.

Пример анализатора – PVS-studio

Page 15: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

15

Тяжеловесные методы

Используют поведенческие модели программ

Анализируют динамику исполнения

Анализируется и статическая и динамическая семантика

Page 16: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

16

Анализ потока

Цель анализа – вычислить возможные состояния программы во всех точках

Состояние программы в конкретной точке –множество состояний всех объектов программы, доступных в этой точке

Обнаружение дефектов происходит после вычисления состояний на основе проверки корректности этих состояний

Page 17: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

17

Анализ потока управления

Page 18: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

18

Анализ потока управления

В качестве модели программы используется SSA или CFG

Точки программы – переходы графа потока управления (SSA)

В соответствии с семантикой конструкций языка программирования описывается связь состояний точек программы◦ F(Sin, Sout) = 0

◦ Sin – состояние на входе узла графа

◦ Sout – состояние на выходе узла графа

Page 19: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

19

Анализ потока управления

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

В случае прямого анализа: Sout =F(Sin)

Sin и Sout – множество состояний всех доступных в контексте объектов

F – функция пересчета состояния, зависящая от семантики конкретной конструкции языка

Page 20: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

20

Конкретные алгоритмы статического анализа

Расчет значений переменных◦ интервальный анализ (interval analysis)

Определение состояния указателей◦ анализ указателей (pointer analysis, point-to analysis

и alias analysis)

Определение состояний объектов, имеющих свой жизненный цикл◦ Ресурсный анализ

Page 21: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

21

Интервальный анализ

Оперирует не значениями, а интервалами

Состояние переменных представляются интервальными значениями◦ a = [10: 20]

◦ b = (-40: 20) (30: 100)

◦ c = [0: ∞)

Вычисление состояния после выполнения оператора языка производится на основе правил интервальной арифметики:◦ Сложение: [a: b] + [c: d] = [a + c: b + d]

◦ Вычитание: [a: b] − [c: d] = [a − d: b − c]

◦ Умножение: [a: b] × [c: d] = [min(ac, ad, bc, bd): max(ac, ad, bc, bd)]

◦ Деление: [a: b] / [c: d] = [min(a/c, a/d, b/c, b/d): max(a/c, a/d, b/c, b/d)]

Page 22: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

22

Интервальный анализ

Элемент модели

int a;

a = С;

a = b;

a = b + c;

φ(…)

if (cond) Strue elseSfalse

Интервальное правило

Sout = Sin <a, uninit>

Sout = Sin \ Ui<a, i> <a, С>

Sout = Sin \ Ui<a, i> Uj<a, bj>

Sout = Sin \ Ui<a, i> Uj<a, bj + cj>

Sout = Ui Sin,i

Strue= Sin cond

Sfalse= Sin cond

Page 23: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

23

Интервальный анализ. Пример

int a;

a=10;

int b = f(…);

if (b < 100){

a = a + b;

}

else{

a = b / 2;

}

<a, uninit>

<a, [10: 10]>

<a, [10: 10]>, <b, (-: )>

<a, [10: 10]>, <b, (-: 100)>

<a, [-: 110]>, <b, (-: 100)>

<a, [10: 10]>, <b, [100: )>

<a, [50: )>, <b, [100: )>

Page 24: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

24

Анализ указателей

Отличие от интервального анализа: ◦ хранятся не интервалы значений, а списки связи

“может указывать на” (points-to)

◦ значения одних объектов могут влиять на другие

Page 25: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

25

Анализ указателей. Пример 1

p, q1 и q2 – указатели на динамическую память

Пример для конструкции free(p);

Page 26: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

26

Анализ указателей. Пример 2

p, q – указатели

Пример для конструкции *p = q

Page 27: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

27

Анализ указателей. Пример 3

p, q – указатели

Пример для конструкции p = *q

Page 28: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

28

Свёртка модели программ

Объединение базовых блоков◦ Последовательность операторов, не содержащая

ветвлений, – базовый блок

◦ Базовый блок сворачивается до одного узла

Свертка путей◦ совместный анализ альтернативных путей

◦ что делать при объединении ветвей?

◦ как строить состояние после объединения?

Page 29: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

29

Консервативность анализа

Определяется правилами объединения ветвей

Консервативный (пессимистический) анализ◦ При объединении ветвей объединяет интервалы

◦ Сохраняет полноту (обнаруживаем все ошибки)

◦ Теряет точность (много ложных обнаружений)

Оптимистический анализ◦ При объединении ветвей пересекает интервалы

◦ Теряет полноту (может пропускать ошибки)

◦ Сохраняет точность (мало ложных обнаружений)

Page 30: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

30

Консервативность анализа

int arr1[10];

int arr2[5];

if (…){

} // <i, [1..8]>

else {

} // <i, [6..15]>

a = arr1[i]; // возможно ошибка

b = arr2[i]; // ошибка

Консервативный анализ:

◦ <i, [1..15]>

◦ обнаружит обе ошибки (возможно первая –ложная)

Оптимистический анализ

◦ <i, [6..8]>

◦ обнаружит вторую ошибку (пропустив первую)

Page 31: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

31

Ресурсный анализ

Ресурсы – объекты программы, имеющие свой жизненный цикл

Примеры ресурсов:◦ Выделенная динамическая память в куче◦ Файлы◦ Семафоры◦ Мьютексы◦ Сокеты◦ Потоки◦ Нити◦ …

Обычно ресурсы характеризуются состоянием и атрибутами

Каждый тип ресурса изменяет свое состояние по определенным правилам

Page 32: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

32

Ресурсный анализ. Объект в куче

Правила использования:◦ Создание ресурса: p = malloc(…)

◦ Использование ресурса: *p

◦ Освобождение ресурса: free(p)

Примеры дефектов◦ Использование не созданного объекта

◦ Повторное освобождение

◦ Утечка

Page 33: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

33

Ресурсный анализ. Файл

Правила использования◦ Создание ресурса: f = fopen(“…”, “r” )◦ Использование ресурса: fprintf(f, …) ◦ Уничтожение ресурса: close(f)

Примеры дефектов◦ Чтение из не открытого файла◦ Попытка писать в файл открытый на чтение◦ Не закрытие файла◦ …

Page 34: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

34

Ресурсный анализ

Отличие ресурсов от других объектов программы:◦ Управляются операционной системой◦ Управление сменой состояний и атрибутов

происходит через функции API

Необходимо анализировать не конструкции ЯП, а библиотечные вызовы

Необходима информация о семантике библиотечных вызовов. Где ее взять?◦ Семантика зашивается в анализатор◦ Семантика описывается путем аннотирования

библиотек

Page 35: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

35

Масштаб анализа

Внутрипроцедурный анализ◦ Каждая функция анализируется отдельно

◦ Информация не передается между функциями

◦ Ресурсоемкость относительно низкая

◦ Точность и/или полнота – снижаются

◦ Реализуется большинством анализаторов

Page 36: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

36

Масштаб анализа

Межпроцедурный анализ◦ Все функция анализируется совместно

◦ Информация передается между функциями

◦ Точность и полнота не страдают

◦ Ресурсоемкость очень высокая

◦ Реализовано в небольшом числе анализаторов

Page 37: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

37

Решение уравнений

В результате применения алгоритмов в явном или неявном виде строится система уравнений

Решение системы◦ С использованием теории решеток

Завершаемость процесса решения обуславливается◦ Монотонностью уравнений

◦ Конечностью системы уравнений

Page 38: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

38

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

Обнаружение дефектов – на основе анализа допустимости состояний в узлов модели

Использование неинициализированной переменной:◦ Конструкция: a = b

◦ Условие: <b, uninit> Sin

Повторное освобождение объекта◦ Конструкция: free(p)

◦ Условие: <p, invalid> Sin

Page 39: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

39

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

Разыменование некорректного указателя◦ Конструкция: a = *p

◦ Условие: <p, invalid> Sin

Арифметические операции над указателями на разные объекты◦ Конструкция: a = p – q;

◦ Условие: <p, o1>,<q, o2> Sin, o1≠o2

Выход за границы объекта◦ Конструкция: a = *p;

◦ Условие: <p, o, k> Sin, k≥osize

Page 40: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

40

Аннотирование

Что делать если часть исходных кодов отсутствует?

Что делать если проект использует библиотечные вызовы?

Что делать если вы знаете о коде нечто такое, что не способен выявить анализатор?

Как замаскировать ложные обнаружения?

Ответ: использовать механизмы внесения внешней семантики в процесс анализа -аннотирование

Page 41: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

41

Аннотирование

Способы аннотирования:◦ расширение целевого языка с помощью

аннотирующих комментариев

◦ расширение целевого языка с использованием его внутренних средств (аннотации, asserts и т.п.)

◦ внешние средства для описания поведения компонентов

Page 42: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

42

Языки аннотаций

На основе комментариев С◦ ACSL (ANSI/ISO C Specification Language)

◦ Аннотации в SPlint

На основе внутренних средств С◦ SAL (Source Annotation Language)

◦ PREfast Annotations

Оригинальный язык◦ Metal

◦ SLIC

◦ PanLang

Page 43: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

43

Языки аннотаций: цели

Описание поведения функций

Описание глобальных объектов

Описание ресурсов

Описание предусловий, инвариантов, …

Обнаружение новых типов дефектов (чекеры)

Маскирование ложных дефектов

Исключение из анализа участков кода

Page 44: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

44

Примеры. Язык Metal. Описание ошибок работы с ресурсами

state decl any_pointer v;

start: { kfree(v) } ==> v.freed;

v.freed: { *v } ==> v.stop,

{ err("Использование %s после освобождения!",

mc_identifier(v)); }

| { kfree(v) } ==> v.stop,

{ err("Двойное освобождение %s!",

mc_identifier(v)); };

Page 45: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

45

Язык ACSL. Пример предусловия

/*@

requires 0 <= n;

requires \valid_range(a, 0, n-1);

*/

void example(value_type* a, size_type n);

Page 46: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

46

Язык PanLang. Пример аннотации функции realloc

void* realloc(void* ptr, unsigned size) {

if (size <= 0) {

delete(Heap) ptr;

return 0;

}

else {

void* res = new Heap(Allocated, size, none, true);

if (ptr->size <= size) {

size = ptr->size;

}

copy(res, ptr, size);

delete(Heap) ptr;

return res;

}

}

Page 47: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

47

Язык PanLang. Пример аннотации функции recv

long recv ( int s ,void* buf ,unsigned len ,int flags) {

if ( buf == 0 ) {

defect (INI-03, "Второй аргумент функции - NULL");

}

if ( flags < 0 ) {

defect (INI-01, "Некорректное значение аргумента функции");

}

if ( state(s) != Established) {

defect (RES-06, "Получение данных из несоединенного сокета");

}

set ( buf, [-inf:+inf], len );

return [0:len];

}

Page 48: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

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

Анализ циклов

Анализ рекурсии и глубокой вложенности вызовов

Анализ сложных типов данных

Анализ программ с исключениями

Анализ программ с полиморфизмом и указателями на функции

Ицыксон В.М. ВиАП © 2018

55

Page 49: Слайд 1 - kspt.icc.spbstu.rukspt.icc.spbstu.ru/media/files/2018/course/... · Статический анализ Семейство методов анализа, не требующих

Ицыксон В.М. ВиАП © 2018

56

Инструменты статического анализа

C/C++◦ Lint (1977 год!)◦ Astrée (Inria)◦ Coverity Static Code Analysis (Synopsis)◦ CodeSonar (GrammaTech )◦ Klocwork Static Code Analysis ◦ IBM® Rational® Software Analyzer◦ PC-lint/FlexeLint (Gimpel Software)◦ SVace (Security Vulnerabilities and Critical Errors Detector, ИСП РАН)◦ Fortify (HP)◦ Frama-C◦ Static Analysis for C and C++ (Parasoft)◦ Polyspace (Mathworks )◦ SPLint (Secure Programming Lint)◦ CPPCheck◦ Aegis (Политех, КСПТ)

Java◦ FindBugs◦ JTest (Parasoft)