Bắt đầu với Phân tích chương trình


10

Tôi đang tìm kiếm các nguồn lực để bắt đầu với phân tích chương trình .

Cuốn sách duy nhất tôi tìm thấy về chủ đề này là cuốn sách Nielson & Nielson .

Ngoài ra, có vẻ như chỉ có những cuốn sách "trình biên dịch" trong đó "phân tích chương trình" sẽ là một chương, hoặc một cái gì đó dọc theo những dòng đó.

Mọi người có biết tài nguyên nào khác không?


3
Khó có thể đánh bại Nielson và Nielson để bắt đầu. Google cho các tài liệu khảo sát. Nhìn vào các thủ tục gần đây của Hội nghị chuyên đề phân tích tĩnh (SAS). Sau đó, google phân tích cụ thể mà bạn quan tâm.
Dave Clarke

Lưu ý rằng chúng tôi không thích danh sách câu hỏi . May mắn thay, điều này dường như đã thu hút một câu trả lời tốt, nhưng xin vui lòng kiềm chế không hỏi những câu hỏi như vậy. Tự Google và sau đó hỏi về những thứ trong tài nguyên bạn tìm thấy.
Raphael

Câu trả lời:


7

Thật không may, không có nhiều sách giáo khoa về chủ đề này. Tôi nghĩ cách tốt nhất để học phân tích chương trình hiện nay là khảo sát các khóa học khác nhau có sẵn, chơi với một vài triển khai và sau đó xem xét một vài tài liệu nghiên cứu cho nhu cầu cụ thể của bạn. Những gì sau đây là một mẫu rất nhỏ của những gì ngoài kia. Vì bạn dễ dàng đề cập đến các phân tích định hướng trình biên dịch, tôi sẽ không trình bày các tài liệu như vậy dưới đây.

Tài nguyên dựa trên web Đây là những bài viết nhấn mạnh việc sử dụng phân tích tĩnh bên ngoài bối cảnh biên dịch.

  1. Một cuộc thảo luận Reverse Engineering Reddit về phân tích chương trình có nhiều liên kết hữu ích.

  2. Mozilla Wiki về giải thích trừu tượng.

  3. Triển khai Phân tích tĩnh , bài viết của Tiến sĩ Dobbs của Flash Sheridan

  4. Một vài tỷ dòng mã sau này: Sử dụng phân tích tĩnh để tìm lỗi trong thế giới thực , Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler trong Truyền thông của ACM.

Các khóa học đại học về phân tích chương trình

  1. Anders Møller tại Đại học Arhus dạy một khóa học bao gồm công nghệ web và hướng đối tượng.
  2. Bor-Yuh Evan Chang tại Đại học Colorado Boulder có một khóa học nền tảng bao gồm triển khai OCaml và một khóa học sau đại học .
  3. Ben Hardekopf tại Đại học California Santa Barbara từng có một bộ bài tập tuyệt vời, nhưng chúng không còn có sẵn trực tuyến. Một số sinh viên tham gia khóa học của mình dường như đã thực hiện triển khai Python .
  4. Markus Müller-Olm có khóa học sau đại học về phân tích Android .
  5. Reinhard Wilhelm tại Đại học Sarbruecken dạy một khóa học sau đại học bao gồm các ứng dụng phân tích tĩnh như phân tích thời gian, dự đoán hành vi bộ đệm và phân tích hình dạng.
  6. Sumit Gulwani từ MSR đã dạy một khóa học hay về ước tính tĩnh mức tiêu thụ tài nguyên của các chương trình (thời gian / bộ nhớ) tại Trường hè Oregon về Ngôn ngữ lập trình .
  7. Koushik Sen tại Đại học California tại Berkeley giảng dạy một khóa học tập trung vào tìm lỗi và chủ đề của nó bao gồm thực thi đồng thời và kiểm tra mô hình phần mềm.
  8. Jeffrey Foster tại Đại học Maryland dạy một khóa học bao gồm các hệ thống loại, kiểm tra mô hình, phân tích bí danh và rất nhiều tài liệu thông thường khác.
  9. Patrick Cousot đã dành một năm tại MIT và dạy một khóa học toàn diện, nền tảng về giải thích trừu tượng. Các bài tập bao gồm triển khai OCaml đi từ ngữ nghĩa thu thập cụ thể đến một số ý tưởng không tầm thường về mặt thuật toán.
  10. Một khóa học sau đại học về giải thích trừu tượng được giảng dạy bởi một số nhà lãnh đạo trong lĩnh vực này là một nơi tốt để bắt kịp lý thuyết thậm chí nhiều hơn.
  11. Patrick Cousot đã dạy một khóa học ngắn về giải thích trừu tượng tại Trường hè Oregon về Ngôn ngữ lập trình năm 2009.

Công cụ để chơi với

Tôi không liệt kê nhiều công cụ nghiên cứu ở đây. Có rất nhiều trong số đó nhưng tôi đã cố gắng liệt kê một vài thứ mà bạn có thể tải xuống và chơi với để hiểu rõ hơn về khu vực này.

  1. Interproc là một công cụ giáo dục rất hữu ích để tìm hiểu về phân tích tĩnh số.

  2. Thư viện trừu tượng số tạp dề nếu bạn thực sự phân tích số.

  3. Slayer là một công cụ phân tích hình dạng từ Microsoft Research.

  4. jstar là một bộ phân tích cho Java dựa trên logic phân tách.

  5. Microsoft Research có nhiều nhóm phát triển nhiều công cụ, nhiều trong số đó có sẵn để tải xuống hoặc có bản demo web. Tôi không thể liệt kê tất cả mọi thứ ở đây và đề nghị bạn chơi với họ.

Còn nhiều điều nữa, nhưng điều đó có lẽ đủ để khiến bạn bận rộn một lúc.


Wow, bây giờ đó là một câu trả lời toàn diện! Cảm ơn rất nhiều!
hủy bỏ

@Vijay cảm ơn bạn đã trả lời! Tôi tự hỏi nếu bạn có thể thêm một vài gợi ý cho phân tích Trình biên dịch cho tôi?
AnneTheAgile

@AnneTheAgile, tôi nghĩ rằng tiện ích mở rộng xứng đáng với một câu hỏi và câu trả lời riêng biệt. Vì vậy, xin vui lòng đặt câu hỏi và tôi rất vui khi cung cấp câu trả lời.
Vijay D

@VijayD, cảm ơn bạn! Tôi đã viết nó; cs.stackexchange.com/questions/13392/ Mạnh
AnneTheAgile

Tôi trả lời quá chậm, và bài viết của tôi đã bị xóa. @VijayD có lẽ bạn có thể nhắn tin cho tôi hoặc thêm vào đây? Điều tôi quan tâm là những điều cơ bản. Tôi không chắc chắn làm thế nào tốt nhất để tìm "phân tích định hướng trình biên dịch" mà "dễ tìm"? Tôi mới tham gia vào lĩnh vực này và muốn bắt đầu đúng cách. ty!
AnneTheAgile

2

Lĩnh vực này cực kỳ rộng ... hãy tìm bằng chứng về tính chính xác của chương trình (có một vài công cụ xung quanh, như Klee ). Sau đó, có tất cả các loại "trình kiểm tra chương trình" có độ tinh vi khác nhau (xem ví dụ nẹp hoặc ống kính để lấy mẫu phạm vi), các chương trình kiểm tra "tuân thủ nguyên tắc lập trình". Ngay cả Linux ' smatch cũng thuộc loại này.

Đối với các công cụ động, có tất cả các loại công cụ bao phủ hiệu năng / kiểm tra xung quanh và các công cụ để kiểm tra bộ nhớ như valgrind .

Thu hẹp phạm vi quan tâm, sau đó đi sâu vào.


Cảm ơn. Những cái bạn đề cập là các công cụ , nhưng những gì về sách hoặc khảo sát, nói về phân tích chương trình tĩnh?
hủy bỏ

1

hai nghiên cứu tập trung vào phân tích chương trình: dynamicstaticphân tích chương trình.

Để có hương vị đầu tiên về phân tích chương trình, tôi khuyên bạn nên đọc Chương 4, 6, 9 trong sách Rồng nếu bạn có nền tảng về trình biên dịch .

Hoặc nếu ít nhất bạn biết các biểu đồ cơ bản, tốt hơn là nên theo một khóa học sau đại học, chẳng hạn như MIT 6.820CMU 17-355 / 17-665 / 17-819 .

Trên đây là về phân tích chương trình tĩnh. Nếu bạn quan tâm nhiều hơn về phân tích chương trình động , hồ sơ chương trình là một điểm tốt để bắt đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.