Введение
Глава 1. Программные ошибки и известные подходы к их обнаружению 10
1.1. Программные ошибки 10
1.1.1. Определение программной ошибки 10
1.1.2. Статистика обнаружения уязвимостей в программах 12
1.1.3. Классификация программных ошибок 14
1.1.4. Причины появления программных ошибок 16
1.2. Обзор методов обнаружения программных ошибок 17
1.2.1. Программные ошибки, как мера качества программного обеспечения 17
1.2.2. Статические методы 18
1.2.3. Динамические методы 22
1.2.4. Преимущества и недостатки методов обнаружения ошибок 36
1.2.5. Комбинированные методы обнаружения ошибок в программах 42
Глава 2. Методы анализа программ 47
2.1. Статический анализ программ 47
2.1.1. Анализ абстрактного синтаксического дерева 47
2.1.2. Анализ потока программы 49
2.1.3. Представление результатов статического анализа программ 54
2.2. Динамический анализ программ 55
2.2.1. Сбор трассы исполнения программы 56
2.2.2. Преобразование трассы в символьную формулу 60
2.2.3. Алгоритмы выбора трассы для анализа 62
2.2.4. Методы регистрации ошибок в программе 63
Глава 3. Метод классификации предупреждений об ошибках в программах 67
3.1. Модель обнаружения ошибок в программе 67
3.1.1. Формализация понятия ошибки в программе 67
3.1.2. Ошибка деления на ноль 71
3.1.3. Ошибки работы с указателями на адрес в памяти 72
3.1.4. Ошибки использования неинициализированных переменных 75
3.2. Алгоритм комбинированного анализа 78
3.2.1. Общий алгоритм комбинированного анализа 78
3.2.2. Алгоритм построения путей, достигающих точки проявления ошибки 80
3.2.3. Алгоритм направленного динамического символьного исполнения программы 81
3.2.4. Проверка нарушения предиката безопасности 82
3.3. Классы предупреждений об ошибках 83
Глава 4. Реализация и оценка применения комбинированного анализа программ 85
4.1. Модуль сопоставления трассы событий предупреждения об ошибке 85
4.2. Инструмент динамического символьного исполнения программ 89
4.2.1 Архитектура инструмента Anxiety 89
4.2.2. Модуль трассировки исполнения программы 91
4.2.3. Модуль генерации запросов 94
4.2.4. Модуль генерации данных 95
4.2.5. Модуль оценки путей для анализа 95
4.2.6. Модуль регистрации ошибок 96
4.2.7. Ограничения реализации 98
4.3. Методы оценки инструментов анализа программ 99
4.4. Оценка предложенного метода 100
Заключение 107
Список публикаций автора по теме диссертации 109
Список литературы 111


