เริ่มต้นใช้งานการวิเคราะห์โปรแกรม


10

ฉันกำลังมองหาแหล่งข้อมูลเกี่ยวกับการเริ่มต้นกับการวิเคราะห์โปรแกรม

หนังสือเล่มเดียวที่ฉันพบในหัวข้อคือหนังสือNielson & Nielson

นอกเหนือจากนั้นดูเหมือนว่าจะมีหนังสือ "คอมไพเลอร์" เท่านั้นที่ "การวิเคราะห์โปรแกรม" จะเป็นบทหรืออะไรก็ตามที่อยู่ในบรรทัดเหล่านั้น

คนอื่นรู้จักทรัพยากรอื่น ๆ บ้างไหม?


3
ยากที่จะเอาชนะ Nielson และ Nielson สำหรับการเริ่มต้น Google สำหรับเอกสารสำรวจ ดูการดำเนินการล่าสุดของการวิเคราะห์แบบคงที่ Symposium (SAS) จากนั้น Google จะทำการวิเคราะห์เฉพาะที่คุณสนใจ
Dave Clarke

โปรดทราบว่าเราทำไม่ได้มากเช่นคำถามรายการ โชคดีที่สิ่งนี้ดูเหมือนจะดึงดูดคำตอบที่ดี แต่โปรดงดการถามคำถามดังกล่าว Google เองแล้วถามเกี่ยวกับสิ่งต่าง ๆ ในแหล่งข้อมูลที่คุณค้นหา
กราฟิลส์

คำตอบ:


7

น่าเสียดายที่มีตำราไม่มากในหัวข้อนี้ ฉันคิดว่าวิธีที่ดีที่สุดในการเรียนรู้การวิเคราะห์โปรแกรมในวันนี้คือการสำรวจหลักสูตรต่าง ๆ ที่มีอยู่เล่นกับการนำไปใช้งานไม่กี่ครั้ง สิ่งที่ตามมาคือตัวอย่างเล็ก ๆ ของสิ่งที่อยู่ข้างนอก เนื่องจากคุณกล่าวถึงการวิเคราะห์เชิงคอมไพเลอร์โดยเฉพาะจึงหาง่ายฉันจะไม่ครอบคลุมเนื้อหาด้านล่าง

ทรัพยากรบนเว็บ บทความเหล่านี้เน้นการใช้การวิเคราะห์เชิงสถิตนอกบริบทการรวบรวม

  1. การอภิปรายวิศวกรรมย้อนกลับ Redditในการวิเคราะห์โปรแกรมมีลิงค์ที่มีประโยชน์มากมาย

  2. Mozilla Wikiเกี่ยวกับการตีความที่เป็นนามธรรม

  3. การปรับใช้การวิเคราะห์แบบคงที่บทความดร. Dobbs โดยFlash Sheridan

  4. อีกไม่กี่พันล้านบรรทัดของรหัสในภายหลัง: ใช้การวิเคราะห์แบบคงที่เพื่อค้นหาข้อบกพร่องในโลกแห่งความจริง , Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler ในการสื่อสารของ ACM

หลักสูตรมหาวิทยาลัยเกี่ยวกับการวิเคราะห์โปรแกรม

  1. Anders Møllerจาก Arhus University สอนหลักสูตรที่ครอบคลุมเทคโนโลยีเชิงวัตถุและเว็บ
  2. Bor-Yuh Evan ช้างที่มหาวิทยาลัยโคโลราโดโบลเดอมีหลักสูตรพื้นฐานที่เกี่ยวข้องกับการดำเนินการ OCaml และหลักสูตรระดับบัณฑิตศึกษา
  3. Ben Hardekopfจาก University of California Santa Barbara เคยมีงานที่มอบหมายมากมาย แต่พวกเขาไม่สามารถใช้งานออนไลน์ได้อีกต่อไป นักเรียนบางคนที่เข้าร่วมหลักสูตรของเขาดูเหมือนว่าจะมีการนำ Python ไปใช้งาน
  4. มาร์คัสMüller-Olmมีหลักสูตรระดับบัณฑิตศึกษาในการวิเคราะห์ของ Android
  5. Reinhard Wilhelmที่มหาวิทยาลัย Sarbruecken สอนหลักสูตรระดับบัณฑิตศึกษาที่ครอบคลุมการใช้งานการวิเคราะห์เชิงสถิตเช่นการวิเคราะห์เวลาการทำนายพฤติกรรมแคชและการวิเคราะห์รูปร่าง
  6. สุมิตร Gulwaniจาก MSR สอนเป็นหลักสูตรที่ดีในการใช้ทรัพยากรแบบคงประมาณการของโปรแกรม (เวลา / หน่วยความจำ) ที่เรียนภาคฤดูร้อนโอเรกอนในการเขียนโปรแกรมภาษา
  7. Koushik Senจาก University of California at Berkeley สอนหลักสูตรที่มุ่งเน้นไปที่การค้นหาข้อผิดพลาดและหัวข้อที่ครอบคลุมการประมวลผลแบบรวบรัดและการตรวจสอบรูปแบบซอฟต์แวร์
  8. เจฟฟรีย์ฟอสเตอร์ที่มหาวิทยาลัยแมรีแลนด์สอนหลักสูตรที่ครอบคลุมระบบการพิมพ์การตรวจสอบรูปแบบการวิเคราะห์นามแฝงและวัสดุอื่น ๆ มากมาย
  9. Patrick Cousotใช้เวลาหนึ่งปีที่ MIT และสอนหลักสูตรพื้นฐานที่ครอบคลุมเกี่ยวกับการตีความเชิงนามธรรม งานที่ได้รับมอบหมายรวมถึงการใช้งาน OCaml ซึ่งเริ่มจากการรวบรวมความหมายที่เป็นรูปธรรมไปสู่แนวคิดที่ไม่เป็นขั้นตอนวิธี
  10. หลักสูตรระดับบัณฑิตศึกษาในการตีความนามธรรมสอนโดยผู้นำบางคนในสนามเป็นสถานที่ที่ดีที่จะจับขึ้นในทฤษฎีมากยิ่งขึ้น
  11. Patrick Cousot สอนหลักสูตรระยะสั้นเกี่ยวกับการตีความเชิงนามธรรมที่Oregon Summer School เกี่ยวกับภาษาโปรแกรมในปี 2009

เครื่องมือในการเล่นด้วย

ฉันไม่ได้แสดงรายการเครื่องมือวิจัยมากมายที่นี่ มีหลายสิ่ง แต่ฉันได้ลองทำรายการที่คุณสามารถดาวน์โหลดและเล่นเพื่อทำความเข้าใจกับพื้นที่ได้ดีขึ้น

  1. Interprocเป็นเครื่องมือทางการศึกษาที่ใช้เล่นเพื่อเรียนรู้เกี่ยวกับการวิเคราะห์เชิงตัวเลข

  2. ไลบรารี Apron Numeric Abstractionหากคุณต้องการวิเคราะห์เชิงตัวเลข

  3. Slayerเป็นเครื่องมือวิเคราะห์รูปร่างจาก Microsoft Research

  4. jStarเป็นเครื่องมือวิเคราะห์สำหรับ Java ที่ใช้ตรรกะการแยก

  5. Microsoft Researchมีกลุ่มมากมายที่พัฒนาเครื่องมือจำนวนมากซึ่งหลายกลุ่มมีให้ดาวน์โหลดหรือมีเว็บสาธิต ฉันไม่สามารถแสดงรายการทุกอย่างที่นี่และแนะนำให้คุณเล่นกับพวกเขา

มีอีกมาก แต่นั่นอาจเพียงพอที่จะทำให้คุณยุ่งอยู่พักหนึ่ง


ว้าวตอนนี้เป็นคำตอบที่ครอบคลุม! ขอบคุณมาก!
abeln

@Vijay ขอบคุณสำหรับคำตอบของคุณ! ฉันสงสัยว่าคุณสามารถเพิ่มตัวชี้สำหรับการวิเคราะห์คอมไพเลอร์ให้ฉันได้ไหม?
AnneTheAgile

@AnneTheAgile ฉันคิดว่าส่วนขยายนั้นได้รับคำถามและคำตอบแยกต่างหาก ดังนั้นโปรดถามคำถามและฉันยินดีที่จะให้คำตอบ
วีเจย์ D

@VijayD ขอบคุณ! ฉันได้เขียนมัน cs.stackexchange.com/questions/13392/…
AnneTheAgile

ฉันตอบช้าเกินไปและโพสต์ของฉันถูกลบ @VijayD บางทีคุณสามารถ IM ฉันหรือเพิ่มที่นี่? สิ่งที่ฉันสนใจคือพื้นฐาน ฉันไม่แน่ใจว่าจะหา "การวิเคราะห์เชิงคอมไพเลอร์" แบบไหนดีที่สุด "ซึ่งหาได้ง่าย" ฉันยังใหม่กับสนามและต้องการเริ่มต้นอย่างถูกวิธี TY!
AnneTheAgile

2

ฟิลด์นี้กว้างมาก ... มองหาบทพิสูจน์ความถูกต้องของโปรแกรม (มีเครื่องมืออยู่สองสามอย่างเช่นKlee ) จากนั้นก็มี "ตัวตรวจสอบโปรแกรม" ทุกประเภทที่มีความซับซ้อนแตกต่างกันไป (ดูตัวอย่างเช่นเฝือกหรือข้อบกพร่องสำหรับการสุ่มตัวอย่างช่วง) โปรแกรมที่ตรวจสอบ "การปฏิบัติตามแนวทางการเขียนโปรแกรม" แม้แต่การตวัดของ Linux ก็ยังอยู่ในหมวดหมู่นี้

สำหรับเครื่องมือแบบไดนามิกมีทุกประเภทของเครื่องมือ / ประสิทธิภาพครอบคลุมการทดสอบรอบและสิ่งสำหรับการตรวจสอบหน่วยความจำเช่นvalgrind

จำกัด ช่วงของดอกเบี้ยให้แคบลง


ขอบคุณ สิ่งที่คุณพูดถึงเป็นเครื่องมือแต่สิ่งที่เกี่ยวกับหนังสือหรือแบบสำรวจพูดในการวิเคราะห์โปรแกรมแบบคงที่?
abeln

1

มีสองงานวิจัยที่มุ่งเน้นในการวิเคราะห์โปรแกรมคือ: dynamicและstaticการวิเคราะห์โปรแกรม

ที่จะมีรสชาติแรกของการวิเคราะห์โปรแกรมผมแนะนำให้อ่านบทที่ 4, 6, 9 ในหนังสือเล่มมังกรถ้าคุณมีพื้นหลังในการคอมไพเลอร์

หรือถ้าอย่างน้อยคุณรู้กราฟพื้นฐานมันจะดีกว่าที่จะปฏิบัติตามหลักสูตรระดับบัณฑิตศึกษาเช่นMIT 6.820และมหาวิทยาลัยเชียงใหม่ 17-355

ข้างต้นเป็นเรื่องเกี่ยวกับการวิเคราะห์โปรแกรมแบบคงที่ ถ้าคุณดูแลเพิ่มเติมเกี่ยวกับการวิเคราะห์โปรแกรมแบบไดนามิก , โปรแกรมโปรไฟล์เป็นจุดเริ่มต้นที่ดีในการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.