Архив с лекциями можно скачать здесь. Слайды по инструментам Valgrind и санитайзерам (вопросы 11-13) можно взять тут.
На экзамене можно ожидать устных вопросов по тому, что рассказывалось на лекциях.
Примерный список вопросов:
- Применения статического анализа. Актуальность поиска ошибок в программах, возможные методы. Понятия статического и динамического анализа программ. Ошибки, допускаемые анализатором. Выделение ошибочных ситуаций, причины появления различных ситуаций для одного класса ошибок.
- Представления программы, подвергаемые анализу. Анализ программы на уровне абстрактных синтаксических деревьев. Примеры ошибочных ситуаций.
- Анализ потока данных. Потоковая чувствительность и нечувствительность. Итеративный анализ, анализ на основе SSA-представления. Отслеживание свойств значений.
- Абстрактная интерпретация. Интервальный анализ.
- Чувствительность к путям. Символьное выполнение. Символьное выполнение с объединением состояний. Применения к детекторам переполнения буфера и разыменования нулевого указателя.
- Межпроцедурный анализ. Подходы к организации межпроцедурного анализа. Контекстная чувствительность. Межпроцедурный анализ на основе резюме. Применения к детекторам переполнения буфера и разыменования нулевого указателя.
- Проблемы создания промышленного анализатора (мониторинг сборки, построение внутреннего представления, работа с результатами анализа и др.).
- Особенности анализа языков С# и Java.
- Статический анализ для понимания программ.
- Поиск клонов кода статическим анализом.
- Динамическая двоичная трансляция. Инфраструктура Valgrind.
- Инструмент memcheck пакета Valgrind.
- Инструментирование исходного кода программ в процессе компиляции. Инструменты-санитайзеры в компиляторах GCC и LLVM. Address Sanitizer, Memory Sanitizer, Thread Sanitizer.
- Анализ производительности программ: выбор способа измерения, способа моделирования, принципы организации экспериментов, выбор входных данных, получение интегральной оценки (усреднение).