Начало работы с анализом программ

10

Я ищу ресурсы для начала работы с анализом программы .

Единственная книга, которую я нашел по этой теме, это книга Нильсона и Нильсона .

Кроме этого, кажется, что есть только книги по «компиляторам», где «программный анализ» будет главой или чем-то в этом роде.

Знают ли люди о каких-либо других ресурсах?

abeln
источник
3
Трудно победить Нильсона и Нильсона за то, что они начали. Google для обзоров. Посмотрите недавние материалы Симпозиума по статическому анализу (SAS). Тогда Google конкретные анализы, которые вас интересуют.
Дейв Кларк
Обратите внимание, что нам не очень нравятся вопросы из списка . К счастью, это похоже на хороший ответ, но, пожалуйста, воздержитесь от таких вопросов. Google, а затем спросите о материалах на ресурсах, которые вы найдете.
Рафаэль

Ответы:

7

К сожалению, по этой теме не так много учебников. Я думаю, что лучший способ научиться анализу программ сегодня - это изучить различные доступные курсы, поиграть с несколькими вариантами реализации, а затем взглянуть на несколько исследовательских работ для ваших конкретных потребностей. Далее следует очень небольшая выборка того, что там есть. Поскольку вы специально упомянули анализ, ориентированный на компилятор, было легко найти, я не буду описывать такой материал ниже.

Сетевые ресурсы Это статьи, в которых подчеркивается использование статического анализа вне контекста компиляции.

  1. Обсуждение Reverse Engineering Reddit по анализу программ имеет много полезных ссылок.

  2. Mozilla Wiki по абстрактной интерпретации.

  3. Развертывание статического анализа , статья доктора Доббса от Flash Sheridan

  4. Несколько миллиардов строк кода позже: использование статического анализа для поиска ошибок в реальном мире , Аль Бесси, Кен Блок, Бен Челф, Энди Чоу, Брайан Фултон, Сет Халлем, Чарльз Анри-Грос, Ася Камски, Скотт МакПик, Доусон Энглер в сообщениях ACM.

Университетские курсы по анализу программ

  1. Андерс Меллер из Университета Орхуса преподает курс, который охватывает объектно-ориентированные и веб-технологии.
  2. Бор-Юх Эван Чанг из Университета Колорадо В Боулдере есть базовый курс , включающий внедрение OCaml и курс для выпускников .
  3. У Бена Хардекопфа из Калифорнийского университета в Санта-Барбаре было множество заданий, но они больше не доступны в Интернете. Кажется, некоторые студенты, прошедшие его курс, сделали доступной реализацию Python .
  4. Маркус Мюллер-Олм имеет аспирантуру по анализу Android .
  5. Рейнхард Вильгельм из Университета Сарбрюккен преподает аспирантуру, которая охватывает приложения статического анализа, такие как анализ времени, прогнозирование поведения кэша и некоторый анализ формы.
  6. Самит Гулвани из MSR провел хороший курс по статической оценке потребления ресурсов программами (время / память) в Орегонской летней школе по языкам программирования .
  7. Кушик Сен из Калифорнийского университета в Беркли преподает курс , посвященный поиску ошибок и темами которого являются конколическое выполнение и проверка модели программного обеспечения.
  8. Джеффри Фостер из Университета Мэриленда преподает курс, который охватывает системы типов, проверку моделей, анализ псевдонимов и многое другое.
  9. Патрик Кузо провел год в Массачусетском технологическом институте и вел всеобъемлющий базовый курс по абстрактной интерпретации. Задания включают в себя реализацию OCaml, которая идет от конкретной семантики сбора к некоторым алгоритмически нетривиальным идеям.
  10. Аспирантура по абстрактной интерпретации преподается некоторыми лидерами в этой области является хорошим местом , чтобы нагнать еще больше теории.
  11. Патрик Кузо преподавал краткий курс по абстрактной интерпретации в Орегонской летней школе по языкам программирования в 2009 году.

Инструменты для игры

Я не перечисляю здесь много исследовательских инструментов. Их много, но я попытался перечислить несколько, которые вы можете скачать и поиграть, чтобы лучше понять сферу.

  1. Interproc - очень полезный инструмент для изучения числового статического анализа.

  2. Библиотека Apron Numeric Abstraction, если вы действительно любите численный анализ.

  3. Slayer - это инструмент анализа формы от Microsoft Research.

  4. jStar - это анализатор Java, основанный на логике разделения.

  5. У Microsoft Research есть многочисленные группы, разрабатывающие многочисленные инструменты, многие из которых доступны для загрузки или имеют веб-демонстрации. Я не могу перечислить все здесь и предложить вам поиграть с ними.

Существует гораздо больше, но этого, вероятно, достаточно, чтобы занять вас на некоторое время.

Виджай Д
источник
Вау, теперь это исчерпывающий ответ! Большое спасибо!
abeln
@ Виджай спасибо за ваш ответ! Интересно, не могли бы вы добавить несколько указателей для анализа компилятора?
AnneTheAgile
@AnneTheAgile, я думаю, что расширение заслуживает отдельного вопроса и ответа. Поэтому, пожалуйста, задайте вопрос, и я с удовольствием предоставлю ответ.
Виджай Д
@VijayD, спасибо! Я написал это; cs.stackexchange.com/questions/13392/…
AnneTheAgile
Я слишком медленно отвечаю, и мой пост был удален. @VijayD, возможно, вы можете IM мне или добавить сюда? Что меня интересует, так это основы. Я не уверен, как лучше всего найти «анализ, ориентированный на компилятор», который «легко найти»? Я новичок в этой области и хочу начать правильно. ти!
AnneTheAgile
2

Это поле чрезвычайно широкое ... ищите доказательства правильности программы (есть несколько инструментов, таких как Klee ). Затем существуют всевозможные «программы проверки» различной сложности (см., Например, шину или дефектоскоп для выборки диапазона), программы, которые проверяют «соответствие правилам программирования». Даже Linux» smatch попадает в эту категорию.

Для динамических инструментов существуют всевозможные инструменты для обеспечения производительности / тестирования, а также средства для проверки памяти, такие как valgrind .

Сузьте круг интересов, затем разверните.

vonbrand
источник
Спасибо. Те, что вы упоминаете, являются инструментами , но как насчет книг или опросов, скажем, по статическому анализу программ?
abeln
1

Есть два исследование фокусов в анализе программы: dynamicи staticанализе программ.

Чтобы лучше понять программный анализ, я рекомендую прочитать главы 4, 6, 9 в книге Dragon, если у вас есть опыт работы с компиляторами .

Или, по крайней мере, если вы знаете базовые графики, было бы лучше следовать курсам уровня магистратуры, таким как MIT 6.820 и CMU 17-355 / 17-665 / 17-819 .

Выше о статическом анализе программы. Если вы заботитесь больше о динамическом анализе программы , программа профилирование является хорошей отправной точкой для начала.

emmmphd
источник