Я ищу ресурсы для начала работы с анализом программы .
Единственная книга, которую я нашел по этой теме, это книга Нильсона и Нильсона .
Кроме этого, кажется, что есть только книги по «компиляторам», где «программный анализ» будет главой или чем-то в этом роде.
Знают ли люди о каких-либо других ресурсах?
Ответы:
К сожалению, по этой теме не так много учебников. Я думаю, что лучший способ научиться анализу программ сегодня - это изучить различные доступные курсы, поиграть с несколькими вариантами реализации, а затем взглянуть на несколько исследовательских работ для ваших конкретных потребностей. Далее следует очень небольшая выборка того, что там есть. Поскольку вы специально упомянули анализ, ориентированный на компилятор, было легко найти, я не буду описывать такой материал ниже.
Сетевые ресурсы Это статьи, в которых подчеркивается использование статического анализа вне контекста компиляции.
Обсуждение Reverse Engineering Reddit по анализу программ имеет много полезных ссылок.
Mozilla Wiki по абстрактной интерпретации.
Развертывание статического анализа , статья доктора Доббса от Flash Sheridan
Несколько миллиардов строк кода позже: использование статического анализа для поиска ошибок в реальном мире , Аль Бесси, Кен Блок, Бен Челф, Энди Чоу, Брайан Фултон, Сет Халлем, Чарльз Анри-Грос, Ася Камски, Скотт МакПик, Доусон Энглер в сообщениях ACM.
Университетские курсы по анализу программ
Инструменты для игры
Я не перечисляю здесь много исследовательских инструментов. Их много, но я попытался перечислить несколько, которые вы можете скачать и поиграть, чтобы лучше понять сферу.
Interproc - очень полезный инструмент для изучения числового статического анализа.
Библиотека Apron Numeric Abstraction, если вы действительно любите численный анализ.
Slayer - это инструмент анализа формы от Microsoft Research.
jStar - это анализатор Java, основанный на логике разделения.
У Microsoft Research есть многочисленные группы, разрабатывающие многочисленные инструменты, многие из которых доступны для загрузки или имеют веб-демонстрации. Я не могу перечислить все здесь и предложить вам поиграть с ними.
Существует гораздо больше, но этого, вероятно, достаточно, чтобы занять вас на некоторое время.
источник
Это поле чрезвычайно широкое ... ищите доказательства правильности программы (есть несколько инструментов, таких как Klee ). Затем существуют всевозможные «программы проверки» различной сложности (см., Например, шину или дефектоскоп для выборки диапазона), программы, которые проверяют «соответствие правилам программирования». Даже Linux» smatch попадает в эту категорию.
Для динамических инструментов существуют всевозможные инструменты для обеспечения производительности / тестирования, а также средства для проверки памяти, такие как valgrind .
Сузьте круг интересов, затем разверните.
источник
Есть два исследование фокусов в анализе программы:
dynamic
иstatic
анализе программ.Чтобы лучше понять программный анализ, я рекомендую прочитать главы 4, 6, 9 в книге Dragon, если у вас есть опыт работы с компиляторами .
Или, по крайней мере, если вы знаете базовые графики, было бы лучше следовать курсам уровня магистратуры, таким как MIT 6.820 и CMU 17-355 / 17-665 / 17-819 .
Выше о статическом анализе программы. Если вы заботитесь больше о динамическом анализе программы , программа профилирование является хорошей отправной точкой для начала.
источник