Memulai dengan Analisis Program

10

Saya mencari sumber daya untuk memulai dengan analisis program .

Satu-satunya buku yang saya temukan pada topik adalah buku Nielson & Nielson .

Selain itu, sepertinya hanya ada buku "kompiler" di mana "analisis program" akan menjadi bab, atau sesuatu di sepanjang baris itu.

Apakah orang tahu sumber daya lain?

abeln
sumber
3
Sulit untuk mengalahkan Nielson dan Nielson untuk memulai. Google untuk makalah survei. Lihatlah proses baru-baru ini dari Simposium Analisis Statis (SAS). Maka analisis khusus google yang Anda minati.
Dave Clarke
Perhatikan bahwa kami tidak terlalu menyukai daftar pertanyaan . Untungnya, ini sepertinya menarik jawaban yang bagus, tetapi tolong jangan mengajukan pertanyaan seperti itu. Google sendiri dan kemudian tanyakan tentang hal-hal di sumber daya yang Anda temukan.
Raphael

Jawaban:

7

Sayangnya tidak ada banyak buku pelajaran tentang topik ini. Saya pikir cara terbaik untuk mempelajari analisis program hari ini adalah dengan mensurvei berbagai kursus yang tersedia, bermain dengan beberapa implementasi dan kemudian melihat beberapa makalah penelitian untuk kebutuhan spesifik Anda. Berikut ini adalah contoh sangat kecil dari apa yang ada di luar sana. Karena Anda secara khusus menyebutkan analisis berorientasi compiler mudah ditemukan, saya tidak akan membahas materi seperti di bawah ini.

Sumber daya berbasis web Ini adalah artikel yang menekankan penggunaan analisis statis di luar konteks kompilasi.

  1. Sebuah diskusi Reverse Engineering Reddit pada analisis program memiliki banyak link yang berguna.

  2. Mozilla Wiki pada interpretasi abstrak.

  3. Menyebarkan Analisis Statis , artikel Dr. Dobbs oleh Flash Sheridan

  4. Beberapa Miliar Baris Kode Kemudian: Menggunakan Analisis Statis untuk Menemukan Bug di Dunia Nyata , Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler dalam Komunikasi ACM.

Kursus universitas tentang analisis program

  1. Anders Møller di Arhus University mengajarkan kursus yang mencakup teknologi berorientasi objek dan web.
  2. Bor-Yuh Evan Chang di University of Colorado Boulder memiliki program dasar yang melibatkan implementasi OCaml dan program pascasarjana .
  3. Ben Hardekopf di University of California Santa Barbara dulu memiliki banyak tugas, tetapi mereka tidak lagi tersedia secara online. Beberapa siswa yang mengambil kursusnya tampaknya telah membuat implementasi Python tersedia.
  4. Markus Müller-Olm memiliki program pascasarjana tentang analisis Android .
  5. Reinhard Wilhelm di University of Sarbruecken mengajarkan kursus pascasarjana yang mencakup aplikasi analisis statis seperti analisis waktu, prediksi perilaku cache, dan beberapa analisis bentuk.
  6. Sumit Gulwani dari MSR mengajarkan kursus yang bagus tentang estimasi statis konsumsi sumber daya program (waktu / memori) di Oregon Summer School on Programming Languages .
  7. Koushik Sen di University of California di Berkeley mengajarkan kursus yang berfokus pada penemuan bug dan yang topiknya mencakup eksekusi concolic dan pengecekan model perangkat lunak.
  8. Jeffrey Foster di University of Maryland mengajarkan kursus yang mencakup sistem tipe, pengecekan model, analisis alias dan banyak materi lainnya yang biasa.
  9. Patrick Cousot menghabiskan satu tahun di MIT dan mengajar kursus dasar yang komprehensif tentang interpretasi abstrak. Tugas termasuk implementasi OCaml yang berubah dari semantik pengumpul konkret ke beberapa ide algoritmik non-sepele.
  10. Sebuah program pascasarjana pada interpretasi abstrak diajarkan oleh beberapa pemimpin di lapangan adalah tempat yang baik untuk mengejar ketinggalan pada teori bahkan lebih.
  11. Patrick Cousot mengajar kursus singkat tentang interpretasi abstrak di Oregon Summer School on Programming Languages pada tahun 2009.

Alat untuk bermain

Saya tidak mencantumkan banyak alat penelitian di sini. Ada banyak dari mereka tetapi saya telah mencoba daftar beberapa yang dapat Anda unduh dan mainkan untuk memahami area dengan lebih baik.

  1. Interproc adalah alat yang sangat mendidik untuk belajar tentang analisis statis numerik.

  2. Perpustakaan Abstraksi Angka Apron jika Anda benar-benar ke dalam analisis numerik.

  3. Slayer adalah alat analisis bentuk dari Microsoft Research.

  4. jStar adalah penganalisis untuk Java yang didasarkan pada logika pemisahan.

  5. Microsoft Research memiliki banyak grup yang mengembangkan berbagai alat, banyak di antaranya tersedia untuk diunduh atau memiliki demo web. Saya tidak bisa daftar semuanya di sini dan menyarankan Anda bermain dengan mereka.

Ada banyak lagi, tetapi itu mungkin cukup membuat Anda sibuk untuk sementara waktu.

Vijay D
sumber
Wow, sekarang itu jawaban yang komprehensif! Terima kasih banyak!
abeln
@ Vijay terima kasih atas jawaban Anda! Saya ingin tahu apakah Anda dapat menambahkan beberapa petunjuk untuk analisis Kompiler untuk saya?
AnneTheAgile
@AnneTheAgile, saya pikir ekstensi itu pantas untuk pertanyaan dan jawaban yang terpisah. Jadi tolong ajukan pertanyaan dan saya senang memberikan jawabannya.
Vijay D
@ VijayD, terima kasih! Saya telah menulisnya; cs.stackexchange.com/questions/13392/…
AnneTheAgile
Saya membalas terlalu lambat, dan posting saya dihapus. @ VijayD mungkin Anda bisa mengirim pesan instan atau menambahkan di sini? Yang saya tertarik adalah dasar-dasarnya. Saya tidak yakin bagaimana cara terbaik untuk menemukan "analisis berorientasi compiler" yang "mudah ditemukan"? Saya baru di bidang ini dan ingin memulai dengan cara yang benar. ty!
AnneTheAgile
2

Bidang ini sangat luas ... cari bukti kebenaran program (ada beberapa alat di sekitar, seperti Klee ). Lalu ada segala macam "pemeriksa program" dengan berbagai kecanggihan (lihat misalnya belat atau pencari cacat untuk contoh kisaran), program yang memeriksa "kepatuhan pedoman pemrograman". Bahkan smatch Linux termasuk dalam kategori ini.

Untuk alat dinamis, ada segala macam alat cakupan kinerja / tes di sekitar, dan hal-hal untuk memeriksa memori seperti valgrind .

Persempit rentang minat, lalu telusuri.

vonbrand
sumber
Terima kasih. Yang Anda sebutkan adalah alat , tetapi bagaimana dengan buku atau survei, katakan pada analisis program statis?
abeln
1

Ada dua fokus penelitian dalam analisis program: dynamicdan staticanalisis program.

Untuk merasakan analisis program pertama kali, saya sarankan untuk membaca Bab 4, 6, 9 di buku Naga jika Anda memiliki latar belakang dalam kompiler .

Atau jika setidaknya Anda tahu grafik dasar, akan lebih baik untuk mengikuti kursus tingkat pascasarjana, seperti MIT 6.820 dan CMU 17-355 / 17-665 / 17-819 .

Di atas adalah tentang analisis program statis. Jika Anda lebih peduli tentang analisis program dinamis , pembuatan profil program adalah langkah yang baik untuk memulai.

emmmphd
sumber