К сожалению, по этой теме не так много учебников. Я думаю, что лучший способ научиться анализу программ сегодня - это изучить различные доступные курсы, поиграть с несколькими вариантами реализации, а затем взглянуть на несколько исследовательских работ для ваших конкретных потребностей. Далее следует очень небольшая выборка того, что там есть. Поскольку вы специально упомянули анализ, ориентированный на компилятор, было легко найти, я не буду описывать такой материал ниже.
Сетевые ресурсы
Это статьи, в которых подчеркивается использование статического анализа вне контекста компиляции.
Обсуждение Reverse Engineering Reddit по анализу программ имеет много полезных ссылок.
Mozilla Wiki по абстрактной интерпретации.
Развертывание статического анализа , статья доктора Доббса от Flash Sheridan
Несколько миллиардов строк кода позже: использование статического анализа для поиска ошибок в реальном мире , Аль Бесси, Кен Блок, Бен Челф, Энди Чоу, Брайан Фултон, Сет Халлем, Чарльз Анри-Грос, Ася Камски, Скотт МакПик, Доусон Энглер в сообщениях ACM.
Университетские курсы по анализу программ
- Андерс Меллер из Университета Орхуса преподает курс, который охватывает объектно-ориентированные и веб-технологии.
- Бор-Юх Эван Чанг из Университета Колорадо В Боулдере есть базовый курс , включающий внедрение OCaml и курс для выпускников .
- У Бена Хардекопфа из Калифорнийского университета в Санта-Барбаре было множество заданий, но они больше не доступны в Интернете. Кажется, некоторые студенты, прошедшие его курс, сделали доступной реализацию Python .
- Маркус Мюллер-Олм имеет аспирантуру по анализу Android .
- Рейнхард Вильгельм из Университета Сарбрюккен преподает аспирантуру, которая охватывает приложения статического анализа, такие как анализ времени, прогнозирование поведения кэша и некоторый анализ формы.
- Самит Гулвани из MSR провел хороший курс по статической оценке потребления ресурсов программами (время / память) в Орегонской летней школе по языкам программирования .
- Кушик Сен из Калифорнийского университета в Беркли преподает курс , посвященный поиску ошибок и темами которого являются конколическое выполнение и проверка модели программного обеспечения.
- Джеффри Фостер из Университета Мэриленда преподает курс, который охватывает системы типов, проверку моделей, анализ псевдонимов и многое другое.
- Патрик Кузо провел год в Массачусетском технологическом институте и вел всеобъемлющий базовый курс по абстрактной интерпретации. Задания включают в себя реализацию OCaml, которая идет от конкретной семантики сбора к некоторым алгоритмически нетривиальным идеям.
- Аспирантура по абстрактной интерпретации преподается некоторыми лидерами в этой области является хорошим местом , чтобы нагнать еще больше теории.
- Патрик Кузо преподавал краткий курс по абстрактной интерпретации в Орегонской летней школе по языкам программирования в 2009 году.
Инструменты для игры
Я не перечисляю здесь много исследовательских инструментов. Их много, но я попытался перечислить несколько, которые вы можете скачать и поиграть, чтобы лучше понять сферу.
Interproc - очень полезный инструмент для изучения числового статического анализа.
Библиотека Apron Numeric Abstraction, если вы действительно любите численный анализ.
Slayer - это инструмент анализа формы от Microsoft Research.
jStar - это анализатор Java, основанный на логике разделения.
У Microsoft Research есть многочисленные группы, разрабатывающие многочисленные инструменты, многие из которых доступны для загрузки или имеют веб-демонстрации. Я не могу перечислить все здесь и предложить вам поиграть с ними.
Существует гораздо больше, но этого, вероятно, достаточно, чтобы занять вас на некоторое время.