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


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.