Введение
1 Обзор методов тестирования компиляторов. Постановка задачи . 22
1.1 Основные понятия теории компиляции 23
1.2 Тестирование синтаксического анализатора 26
1.3 Тестирования фазы анализа статической семантики 31
1.4 Тестирование оптимизирующих преобразований в компиляторе 34
1.5 Тесты для проверки динамической семантики 36
1.6 Тестовые оракулы для фаз оптимизирующих преобразований и генерации кода 40
1.7 Постановка задачи 41
2 Базовые алгоритмы генерации тестовых программ для языка программирования 43
2.1 Описание подхода 44
2.2 Алгоритмы генерации тестов 48
2.3 Результаты главы 57
3 Генерация тестов для проверки реализации динамиче ской семантики 59
3.1 Генерация строго конформных программ 64
3.2 Синтаксис и семантика языка Си5ітріе 67
3.2.1 Язык Сиі 67
3.2.2 Язык Си2: Сиі + указатели 76
3.2.3 Язык Сивіше — Си2 + адресная арифметика, массивы и преобразования типов 78
3.3 Практическая апробация методики 83
3.4 Основные результаты главы 84
4 Критерии покрытия спецификаций семантики языка про граммирования 85
4.1 Система "Montages" описания семантики языков програм мирования 86
4.1.1 Формализм ASM 86
4.1.2 Моитажи как средство описания семантики языков программирования 88
4.2 Критерии покрытия Montage-спецификаций 91
4.2.1 Покрытие ASM-спецификаций 93
4.2.2 Комбинированный критерий покрытия 94
4.2.3 Критерий покрытия для семантических ограничений 95
4.3 Основные результаты главы 97
5 Опыт практического применения предложенной методи ки генерации тестов 98
5.1 Прототипная реализация генератора тестов и системы прогона тестов 99
5.2 Набор тестов для проверки реализации динамической семантики расширений, введенных стандартом Си 99 101
5.3 Тестирование компилятора с языка программирования трС 103
5.3.1 Векторные и параллельные возможности языка трС 105
5.3.2 Использование формализма Montages для определения семантики выражений трС 109
5.3.3 Результаты тестирования 117
5.3.4 Набор негативных тестов 119
5.4 Основные результаты главы 119
Заключение 121


