Введение
Глава 1. Постановка задачи переноса приложений на 64-битные платформы
1.1 Проблема переноса приложений на 64-битные платформы 16
1.2 Способы тестирования приложений для подтверждения корректности переноса кода
1.2.1 Просмотр кода 22
1.2.2 Статический анализ кода 23
1.2.3 Динамический анализ кода 23
1.2.4 Метод белого ящика 24
1.2.5 Метод черного ящика 25
1.2.6 Ручное тестирование 26
1.3 Основные задачи исследования 26
Глава 2. Статический анализ кода как наиболее удобное решение для проверки корректности 64-битных программ 28
2.1 Применение статического анализа кода при разработке программ 28
2.1.1 Процесс анализа 30
2.1.2 Дерево кода 33
2.1.3 Методы статического анализа 34
2.2 Разработка статического анализатора: требования, архитектура, реализация 37
2.2.1 Требования к анализатору кода 37
2.2.2 Архитектура анализатора кода 38
2.2.3 Реализация анализатора кода 44
Глава 3. Обнаружение ошибок при переносе программ на 64-битные платформы 47
3.1 Примеры потенциально-опасных конструкций в коде программ на языке Си++ 47
3.1.1 Использование функций с переменным количеством аргументов...51
3.1.2 Магические константы 52
3.1.3 Хранение в double целочисленных значений 56
3.1.4 Операции сдвига 57
3.1.5 Упаковка указателей 59
З.І.бМептзіге-типьів объединениях 61
3.1.7 Изменение типа массива 63
3.1.8 Виртуальные функции с аргументами THnamemsize 64
3.1.9 Сериализация и обмен данными
3.1.10 Битовые поля 68
3.1.11 Адресная арифметика с указателями 71
3.1.12 Индексация массивов 73
3.1.13 Смешанное использование простых целочисленных типов и memsize-типов 76
3.1.14 Неявные приведения типов при использовании функций 80
3.1.15 Перегруженные функции 81
3.1.16 Выравнивание данных 82
3.1.17 Исключения 85
3.1.18 Использование устаревших функций и предопределенных констант 86
3.1.19 Явные приведения типов 86
3.2 Правила статического анализа кода для диагностики потенциально опасных конструкций 87
3.2.1 Приведение 32-битных целых типов к memsize-типам 89
3.2.2 Приведение memsize-типов к целым 32-битным типам 90 3.2.3 Memsize-типы в виртуальных функциях 90
3.2.4 Memsize-типы в перегруженных функциях 91
3.2.5 Приведение типов указателей на memsize-типы 92
3.2.6 Приведение memsize-типов к double 92
3.2.7 Memsize-типы в функции с переменным количеством аргументов .93
3.2.8 Опасные константы 93
3.2.9 Memsize-типы в объединениях 94
3.2.10 Исключения и memsize-типы 94
3.3 Методика создания новых правил диагностики ошибок 95
Глава 4. Программный комплекс для статического анализа 64-битных приложений Viva64 97
4.1 Обзор программы Viva64 97
4.2 Сравнение диагностических возможностей современных анализаторов при проверке 64-битного кода 101
4.3 Применение Viva64 для проверки CAD-системы Leios Studio 105
4.3.1 Библиотека компонентов Leios Components 106
4.3.2 Программный интерфейс для работы с облаками точек и триангулированными сетками 107
4.3.3 Библиотека подгонки деталей 109
4.3.4 Библиотека обработки граней и ребер 110
4.3.5 Необходимость миграции библиотеки компонентов на 64-битную платформу 111
4.3.6. Участие компании ООО «СиПроВер» в миграции библиотеки
компонентов 112
Заключение 114
Список использованных источников


