Початок роботи з аналізом програми


10

Я шукаю ресурси для початку роботи з програмним аналізом .

Єдина книга, яку я знайшов у цій темі, - це книга Nielson & Nielson .

Крім цього, здається, що є лише "компіляторні" книги, де "аналіз програм" був би главою, або щось подібне.

Чи знають люди про якісь інші ресурси?


3
Важко перемогти Нільсона та Нільсона для початку роботи. Google для оглядових робіт. Подивіться на недавні розробки симпозіуму статистичного аналізу (SAS). Тоді google конкретний аналіз, який вас цікавить.
Дейв Кларк

Зауважте, що нам не дуже подобаються питання зі списком . На щастя, це, здається, привернуло гарну відповідь, але, будь ласка, утримайтеся від таких питань. Сам Google, а потім запитайте про матеріали, які ви знайдете.
Рафаель

Відповіді:


7

На жаль, не так багато підручників з цієї теми. Я думаю, що найкращий спосіб сьогодні вивчити програмний аналіз - це оглянути різні доступні курси, пограти з кількома реалізаціями, а потім переглянути декілька наукових робіт для ваших конкретних потреб. Далі йде дуже невеликий вибірки того, що там є. Оскільки ви спеціально згадали про орієнтовані на компілятори аналізи, було легко знайти, я не висвітлюю такий матеріал нижче.

Веб-ресурси Це статті, які наголошують на застосуванні статичного аналізу поза контекстом компіляції.

  1. Обговорення Reverse Engineering Reddit з аналізу програм має багато корисних посилань.

  2. Mozilla Wiki про абстрактне тлумачення.

  3. Розгортання статичного аналізу , стаття доктора Доббса від Флеш Шерідан

  4. Кілька мільярдів рядків коду пізніше: Використання статичного аналізу для пошуку помилок у реальному світі , Ел Бессі, Кен Блок, Бен Челф, Енді Чоу, Брайан Фултон, Сет Халлем, Чарльз Анрі-Грос, Ася Камський, Скотт Макпік, Доусон Енглер в комунікаціях ОСББ.

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

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

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

Я не перераховую тут багато інструментів дослідження. Є багато таких, але я спробував перерахувати декілька, які ви можете завантажити та грати, щоб краще зрозуміти область.

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

  2. Бібліотека обчислення числових фартухів, якщо ви справді займаєтеся числовим аналізом.

  3. Slayer - це інструмент аналізу фігур від Microsoft Research.

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

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

Є набагато більше, але цього, мабуть, достатньо, щоб ви не зайнялися на деякий час.


Ого, тепер це вичерпна відповідь! Дуже дякую!
abeln

@Vijay дякую за вашу відповідь! Цікаво, чи можете ви додати кілька покажчиків для аналізу компілятора для мене?
AnneTheAgile

@AnneTheAgile, я думаю, що розширення заслуговує на окреме питання та відповідь. Тому, будь ласка, поставте питання, і я із задоволенням надаю відповідь.
Vijay D

@VijayD, дякую! Я це написав; cs.stackexchange.com/questions/13392/…
AnneTheAgile

Я надто повільно відповідаю, і моя публікація була видалена. @VijayD, можливо, ви можете надіслати мені повідомлення чи додати тут? Що мене цікавить - це основи. Я не впевнений, як найкраще знайти «орієнтовані на компілятор аналізи», які «легко було знайти»? Я новачок у цій галузі та хочу розпочати правильний шлях. ти!
AnneTheAgile

2

Це поле надзвичайно широке ... шукайте докази коректності програми (є кілька інструментів навколо, як, наприклад, Klee ). Тоді є всі види «шашковій програми» різної складності (дивись, наприклад , шини або Flawfinder для вибірки діапазону), програми, перевірка на «керівних принципів програмування відповідності». Навіть динамік Linux потрапляє до цієї категорії.

Для динамічних інструментів існують всілякі інструменти для покриття продуктивності / тестування та інше для перевірки пам’яті, як valgrind .

Скоротіть діапазон, що цікавить, а потім перегляньте.


Дякую. Ті, про які ви згадуєте, - це інструменти , а що робити з книгами чи опитуваннями, скажімо, про статичний аналіз програм?
abeln

1

У програмному аналізі є два дослідницьких напрямки : dynamicта staticпрограмний аналіз.

Щоб мати перший смак програмного аналізу, я рекомендую прочитати глави 4, 6, 9 книги «Дракон», якщо у вас є передумови у компіляторах .

Або якщо ви, принаймні, знаєте основні графіки, було б краще пройти курс випускників, таких як MIT 6.820 та CMU 17-355 / 17-665 / 17-819 .

Вище йдеться про статичний аналіз програми. Якщо ви дбаєте більше про динамічному аналізі програми , програма профілювання є хорошою відправною точкою для початку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.