กลับไปหน้าบทความ

อ่าน 3 นาที

การวิเคราะห์รูปร่าง (การวิเคราะห์โปรแกรม)

ใน การวิเคราะห์โปรแกรม การวิเคราะห์รูปร่าง ( Shape Analysis ) เป็น เทคนิค การวิเคราะห์โค้ดแบบคงที่ (Static Code Analysis) ที่ใช้ค้นหาและตรวจสอบคุณสมบัติของโครงสร้างข้อมูล...

การวิเคราะห์รูปร่าง (การวิเคราะห์โปรแกรม)

ในการวิเคราะห์โปรแกรมการวิเคราะห์รูปร่าง ( Shape Analysis ) เป็น เทคนิค การวิเคราะห์โค้ดแบบคงที่ (Static Code Analysis)ที่ใช้ค้นหาและตรวจสอบคุณสมบัติของโครงสร้างข้อมูลที่เชื่อมโยงกันและจัดสรรหน่วยความจำแบบไดนามิก ในโปรแกรมคอมพิวเตอร์ (โดยทั่วไปจะ เป็นแบบเชิงคำ สั่ง ) โดยทั่วไปจะใช้ในระหว่างการคอมไพล์เพื่อค้นหาข้อบกพร่องของซอฟต์แวร์หรือเพื่อตรวจสอบคุณสมบัติความถูกต้องระดับสูงของโปรแกรม ใน โปรแกรม Javaสามารถใช้เพื่อตรวจสอบให้แน่ใจว่าเมธอด sort เรียงลำดับรายการได้อย่างถูกต้อง สำหรับ โปรแกรม Cอาจใช้เพื่อค้นหาตำแหน่งที่บล็อกหน่วยความจำไม่ได้ถูกปล่อยอย่างถูกต้อง

แอปพลิเคชัน

การวิเคราะห์รูปทรงถูกนำไปประยุกต์ใช้กับปัญหาต่างๆ มากมาย:

ตัวอย่าง

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

ลองพิจารณา โปรแกรม C++อย่างง่ายต่อไปนี้

รายการ* รายการ[ 10 ];for ( int i = 0 ; i < 10 ; ++ i ) { items [ i ] = new Item (...); // บรรทัด [1] }process_items ( items ); // บรรทัด [2]for ( int i = 0 ; i < 10 ; ++ i ) { delete items [ i ]; // บรรทัด [3] }

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

น่าเสียดายที่การวิเคราะห์พอยเตอร์ส่วนใหญ่ไม่สามารถวิเคราะห์โปรแกรมนี้ได้อย่างแม่นยำ เพื่อที่จะระบุเซตของพอยเตอร์ที่ชี้ไป การวิเคราะห์พอยเตอร์ต้องสามารถตั้งชื่ออ็อบเจ็กต์ของโปรแกรมได้ โดยทั่วไป โปรแกรมสามารถจัดสรรอ็อบเจ็กต์ได้ไม่จำกัดจำนวน แต่เพื่อที่จะสิ้นสุดการทำงาน การวิเคราะห์พอยเตอร์สามารถใช้ได้เพียงชุดชื่อที่จำกัดเท่านั้น วิธีการประมาณค่าทั่วไปคือการตั้งชื่อเดียวกันให้กับอ็อบเจ็กต์ทั้งหมดที่จัดสรรในบรรทัดใดบรรทัดหนึ่งของโปรแกรม ในตัวอย่างข้างต้น อ็อบเจ็กต์ทั้งหมดที่สร้างขึ้นในบรรทัด [1] จะมีชื่อเดียวกัน ดังนั้น เมื่อdeleteวิเคราะห์คำสั่งเป็นครั้งแรก การวิเคราะห์จะพบว่าอ็อบเจ็กต์หนึ่งที่มีชื่อ [1] กำลังถูกลบ ในครั้งที่สองที่วิเคราะห์คำสั่ง (เนื่องจากอยู่ในลูป) การวิเคราะห์จะเตือนถึงข้อผิดพลาดที่อาจเกิดขึ้น เนื่องจากไม่สามารถแยกแยะอ็อบเจ็กต์ในอาร์เรย์ได้ จึงอาจเป็นไปได้ว่าครั้งที่สองdeleteกำลังลบอ็อบเจ็กต์เดียวกันกับครั้งแรกdeleteคำเตือนนี้ไม่ถูกต้อง และเป้าหมายของการวิเคราะห์รูปร่างคือการหลีกเลี่ยงคำเตือนดังกล่าว

การสรุปและการทำให้เป็นรูปธรรม

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

อาร์เรย์ของวัตถุในตัวอย่างข้างต้นได้รับการสรุปในรูปแบบต่างๆ ที่บรรทัด [1], [2] และ [3] ที่บรรทัด [1] อาร์เรย์ถูกสร้างขึ้นเพียงบางส่วนเท่านั้น องค์ประกอบอาร์เรย์ 0..i-1 ประกอบด้วยวัตถุที่สร้างขึ้น องค์ประกอบอาร์เรย์ i กำลังจะถูกสร้างขึ้น และองค์ประกอบถัดไปยังไม่ได้เริ่มต้น การวิเคราะห์รูปร่างสามารถประมาณสถานการณ์นี้ได้โดยใช้การสรุปสำหรับชุดองค์ประกอบแรก ตำแหน่งหน่วยความจำที่สร้างขึ้นสำหรับองค์ประกอบ i และการสรุปสำหรับตำแหน่งที่ยังไม่ได้เริ่มต้นที่เหลือ ดังนี้:

0 .. i−1 ฉัน i+1 .. 9
ตัวชี้ไปยังวัตถุที่สร้างขึ้น (สรุป) ยังไม่ได้เริ่มต้น ยังไม่ได้เริ่มต้น (สรุป)

หลังจากลูปสิ้นสุดลงที่บรรทัด [2] ไม่จำเป็นต้องเก็บสิ่งใดไว้ การวิเคราะห์รูปร่างจะกำหนด ณ จุดนี้ว่าองค์ประกอบอาร์เรย์ทั้งหมดได้รับการเริ่มต้นแล้ว:

0 .. 9
ตัวชี้ไปยังวัตถุที่สร้างขึ้น (สรุป)

อย่างไรก็ตาม ที่บรรทัด [3] องค์ประกอบของอาร์เรย์iถูกใช้งานอีกครั้ง ดังนั้น การวิเคราะห์จึงแบ่งอาร์เรย์ออกเป็นสามส่วนเช่นเดียวกับในบรรทัด [1] แต่ในครั้งนี้ ส่วนแรกก่อนหน้านั้นiถูกลบไปแล้ว และองค์ประกอบที่เหลือยังคงถูกต้อง (โดยสมมติว่าdeleteคำสั่งยังไม่ได้ดำเนินการ)

0 .. i−1 ฉัน i+1 .. 9
ฟรี (สรุป) ตัวชี้ไปยังวัตถุที่สร้างขึ้น ตัวชี้ไปยังวัตถุที่สร้างขึ้น (สรุป)

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

ดูเพิ่มเติม

บรรณานุกรม

  • Neil D. Jones; Steven S. Muchnick (1982). "แนวทางที่ยืดหยุ่นสำหรับการวิเคราะห์การไหลของข้อมูลระหว่างกระบวนการและการเขียนโปรแกรมที่มีโครงสร้างข้อมูลแบบเรียกซ้ำ". รายงานการประชุมสัมมนา ACM SIGPLAN-SIGACT ครั้งที่ 9 เรื่องหลักการของภาษาการเขียนโปรแกรม - POPL '82 . ACM. หน้า  66–74 . doi : 10.1145/582153.582161 . ISBN 0897910656. S2CID  13266723 .
  • Mooly Sagiv ; Thomas Reps ; Reinhard Wilhelm (พฤษภาคม 2002). "การวิเคราะห์รูปร่างพาราเมตริกผ่านตรรกะ 3 ค่า" (PDF) . ACM Transactions on Programming Languages ​​and Systems . 24 (3). ACM: 217– 298. CiteSeerX  10.1.1.147.2132 . doi : 10.1145/292540.292552 . S2CID  101653 .
  • Wilhelm, Reinhard; Sagiv, Mooly; Reps, Thomas (2007). "บทที่ 12: การวิเคราะห์รูปร่างและการประยุกต์ใช้". ใน Srikant, YN; Shankar, Priti (บรรณาธิการ). คู่มือการออกแบบคอมไพเลอร์: การเพิ่มประสิทธิภาพและการสร้างรหัสเครื่อง ฉบับที่สอง . สำนักพิมพ์ CRC. หน้า 12–1–12–44. ISBN 978-1-4200-4382-2.
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Shape_analysis_(program_analysis)&oldid=1289168394 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การวิเคราะห์รูปร่าง (การวิเคราะห์โปรแกรม)

ใน การวิเคราะห์โปรแกรม การวิเคราะห์รูปร่าง ( Shape Analysis ) เป็น เทคนิค การวิเคราะห์โค้ดแบบคงที่ (Static Code Analysis) ที่ใช้ค้นหาและตรวจสอบคุณสมบัติของโครงสร้างข้อมูล...

แอปพลิเคชัน

การวิเคราะห์รูปทรงถูกนำไปประยุกต์ใช้กับปัญหาต่างๆ มากมาย:

ตัวอย่าง

การวิเคราะห์รูปร่างเป็นรูปแบบหนึ่งของ การวิเคราะห์ตัวชี้ แม้ว่าจะมีความแม่นยำมากกว่าการวิเคราะห์ตัวชี้แบบทั่วไปก็ตาม การวิเคราะห์ตัวชี้พยายามกำหนดชุดของวัตถุที่ตัวชี้สามารถชี้ไปได้ (เรียกว่าชุดจุดที่ตัวชี้ชี้ไป)...

การสรุปและการทำให้เป็นรูปธรรม

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