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

อ่าน 3 นาที

การทดสอบความแตกต่าง

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

การทดสอบความแตกต่าง

ในการทดสอบความแตกต่าง โปรแกรม A และ B ควรให้คำตอบเดียวกันเมื่อป้อนข้อมูลใดๆ ที่เลือกแบบสุ่ม หากผลลัพธ์แตกต่างกัน แสดงว่ามีข้อผิดพลาดหรือบั๊กในคอมพิวเตอร์

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

การทดสอบแบบดิฟเฟอเรนเชียลค้นหาข้อบกพร่องทางความหมายโดยใช้การใช้งานที่แตกต่างกันของฟังก์ชันเดียวกันเป็นตัวอ้างอิงข้าม (cross-referencing oracles)เพื่อระบุความแตกต่างในผลลัพธ์เมื่อใช้ข้อมูลป้อนเข้าเดียวกัน: ความไม่สอดคล้องกันใด ๆ ระหว่างพฤติกรรมของโปรแกรมเมื่อใช้ข้อมูลป้อนเข้าเดียวกันจะถูกทำเครื่องหมายว่าเป็นข้อบกพร่องที่อาจเกิดขึ้นได้

โดเมนแอปพลิเคชัน

การทดสอบความแตกต่างถูกนำมาใช้เพื่อค้นหาข้อบกพร่องทางความหมายได้สำเร็จในโดเมนที่หลากหลาย เช่นการใช้งานSSL/TLS [ 2 ] [ 3 ] [ 4 ] [ 5 ] คอมไพเลอร์C [ 6 ] การใช้งานJVM [ 7 ] ไฟร์วอลล์แอ ปพลิเคชันเว็บ[ 8 ]นโยบายความปลอดภัยสำหรับAPI [ 9 ]ซอฟต์แวร์ป้องกันไวรัส [ 4 ] [ 10 ] และระบบไฟล์[ 11 ]การทดสอบความแตกต่างยังถูกนำมาใช้สำหรับการสร้างลายนิ้วมืออัตโนมัติจาก การ ใช้งานโปรโตคอลเครือข่าย ที่แตกต่าง กัน[ 12 ]

การสร้างข้อมูลป้อนเข้า

ไร้ทิศทาง

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

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

นำทาง

กระบวนการสร้างข้อมูลป้อนเข้าแบบมีคำแนะนำมีเป้าหมายเพื่อลดจำนวนข้อมูลป้อนเข้าที่จำเป็นในการค้นหาข้อผิดพลาดแต่ละรายการ โดยคำนึงถึงข้อมูลพฤติกรรมของโปรแกรมจากข้อมูลป้อนเข้าในอดีต

คำแนะนำเชิงวิวัฒนาการเฉพาะโดเมน

ตัวอย่างของระบบการทดสอบความแตกต่างที่ทำการ สร้างอินพุตโดยอาศัย การครอบคลุม เฉพาะโดเมน คือ Mucerts [ 3 ] Mucerts อาศัยความรู้เกี่ยวกับไวยากรณ์บางส่วนของ รูปแบบใบรับรอง X.509และใช้อัลกอริธึมการสุ่มตัวอย่างแบบสุ่มเพื่อขับเคลื่อนการสร้างอินพุตในขณะที่ติดตามการครอบคลุมโปรแกรม

แนวทางการวิจัยอีกแนวทางหนึ่งสร้างขึ้นจากข้อสังเกตที่ว่าปัญหาของการสร้างอินพุตใหม่จากอินพุตที่มีอยู่สามารถจำลองได้เป็นกระบวนการสุ่ม ตัวอย่างของเครื่องมือทดสอบความแตกต่างที่ใช้การจำลองกระบวนการสุ่มดังกล่าวสำหรับการสร้างอินพุตคือเครื่องมือของ Chen et al. [ 7 ]เครื่องมือนี้ทำการทดสอบความแตกต่างของเครื่องเสมือน Java (JVM) โดยใช้ การสุ่มตัวอย่าง Markov chain Monte Carlo (MCMC) สำหรับการสร้างอินพุต โดยใช้การกลายพันธุ์เฉพาะโดเมนที่กำหนดเองโดยใช้ประโยชน์จากความรู้โดยละเอียดเกี่ยวกับรูปแบบไฟล์คลาส Java

การชี้นำวิวัฒนาการที่ไม่ขึ้นกับโดเมน

NEZHA [ 4 ]เป็นตัวอย่างของเครื่องมือทดสอบความแตกต่างที่มีกลไกการเลือกเส้นทางที่มุ่งเน้นการทดสอบความแตกต่างที่ไม่ขึ้นกับโดเมน โดยใช้เมตริกเฉพาะ (เรียกว่า delta-diversity) ที่สรุปและวัดปริมาณความไม่สมมาตรที่สังเกตได้ระหว่างพฤติกรรมของแอปพลิเคชันทดสอบหลายตัว เมตริกดังกล่าวที่ส่งเสริมความหลากหลายสัมพัทธ์ของพฤติกรรมโปรแกรมที่สังเกตได้นั้นแสดงให้เห็นว่ามีประสิทธิภาพในการใช้การทดสอบความแตกต่างในลักษณะที่ไม่ขึ้นกับโดเมนและแบบกล่องดำ

คำแนะนำโดยอิงจากการเรียนรู้อัตโนมัติ

สำหรับแอปพลิเคชัน เช่น ตัวกรอง การโจมตีแบบ Cross-Site Scripting (XSS) และการตรวจสอบชื่อโฮสต์ของใบรับรอง X.509 ซึ่งสามารถจำลองได้อย่างแม่นยำด้วยออโตมาตาแบบสถานะจำกัด (FSA) สามารถใช้เทคนิคการเรียนรู้ FSA ที่ขับเคลื่อนด้วยตัวอย่างคัดค้านเพื่อสร้างอินพุตที่มีแนวโน้มที่จะพบข้อบกพร่องมากขึ้น[ 8 ] [ 5 ]

คำแนะนำตามการดำเนินการเชิงสัญลักษณ์

การดำเนินการเชิงสัญลักษณ์[ 13 ]เป็น เทคนิค แบบกล่องขาวที่ดำเนินการโปรแกรมในเชิงสัญลักษณ์ คำนวณข้อจำกัดตามเส้นทางต่างๆ และใช้ตัวแก้ข้อจำกัดเพื่อสร้างอินพุตที่ตรงตามข้อจำกัดที่รวบรวมไว้ตามแต่ละเส้นทาง การดำเนินการเชิงสัญลักษณ์ยังสามารถใช้เพื่อสร้างอินพุตสำหรับการทดสอบความแตกต่างได้อีกด้วย[ 12 ] [ 14 ]

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

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Differential_testing&oldid=1340529761 "

สรุปเนื้อหา

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

ข้อมูลสำคัญเกี่ยวกับ การทดสอบความแตกต่าง

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

โดเมนแอปพลิเคชัน

การทดสอบความแตกต่างถูกนำมาใช้เพื่อค้นหาข้อบกพร่องทางความหมายได้สำเร็จในโดเมนที่หลากหลาย เช่นการใช้งาน SSL/TLS [ 2 ] [ 3 ] [ 4 ] [ 5 ] คอมไพเลอร์ C [ 6 ] การใช้งาน JVM [ 7 ] ไฟร์วอลล์แอ ป พลิเคชันเว็บ [ 8 ] นโยบายความปลอดภัยสำหรับ API [ 9 ]...

ไร้ทิศทาง

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

นำทาง

กระบวนการสร้างข้อมูลป้อนเข้าแบบมีคำแนะนำมีเป้าหมายเพื่อลดจำนวนข้อมูลป้อนเข้าที่จำเป็นในการค้นหาข้อผิดพลาดแต่ละรายการ โดยคำนึงถึงข้อมูลพฤติกรรมของโปรแกรมจากข้อมูลป้อนเข้าในอดีต