การทดสอบเส้นทางและการทดสอบเส้นทางพื้นฐานในซอฟต์แวร์ พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

การทดสอบเส้นทางพื้นฐาน (Basis Path Testing) เป็นเทคนิคแบบกล่องขาว (white box) ที่สร้างกรณีทดสอบจากเส้นทางเชิงตรรกะผ่านโปรแกรม โดยใช้กราฟการไหลของควบคุมและความซับซ้อนเชิงวัฏจักร (cyclomatic complexity) เพื่อค้นหาชุดเส้นทางอิสระขั้นต่ำ

  • 🗺️ แนวคิดหลัก: กรณีทดสอบนั้นมาจากโครงสร้างของโค้ด ไม่ใช่จากเอกสารข้อกำหนด
  • 🔢 สี่ขั้นตอน: วาดกราฟควบคุมการไหล คำนวณความซับซ้อนเชิงวัฏจักร หาชุดฐาน และเขียนการทดสอบหนึ่งรายการต่อเส้นทาง
  • 📐 จำนวนกรณีทดสอบ: จำนวนเส้นทางอิสระเท่ากับความซับซ้อนเชิงวัฏจักร ซึ่งเป็นเป้าหมายที่เป็นรูปธรรม
  • 🔄 วิธีการแบบผสมผสาน: เป็นการผสมผสานการทดสอบสาขาและการทดสอบเส้นทางเพื่อให้ได้ความครอบคลุมสูงสุดด้วยจำนวนการทดสอบที่น้อยที่สุด
  • การรับประกันความคุ้มครอง: การเรียกใช้ชุดพื้นฐานจะรันคำสั่งทุกคำสั่งในโมดูลอย่างน้อยหนึ่งครั้ง
  • ⚠️ ขีดจำกัดที่ทราบ: ระบบไม่สามารถค้นหาข้อกำหนดที่ขาดหายไปได้ เนื่องจากระบบจะทดสอบเฉพาะโค้ดที่มีอยู่แล้วเท่านั้น

การทดสอบเส้นทาง การทดสอบเส้นทางพื้นฐาน

Path Testing ในการทดสอบซอฟต์แวร์คืออะไร?

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

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

การทดสอบเส้นทางพื้นฐานในวิศวกรรมซอฟต์แวร์

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

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

ตัวอย่างง่ายๆ ช่วยให้เข้าใจแนวคิดได้ชัดเจนยิ่งขึ้น

การทดสอบเส้นทางพื้นฐานในวิศวกรรมซอฟต์แวร์

แผนผังการไหลด้านบนมีคำสั่งเงื่อนไข ดังนั้นการควบคุมจึงสามารถเข้าถึงทางออกได้มากกว่าหนึ่งเส้นทาง จำเป็นต้องมีเส้นทางอิสระสามเส้นทางเพื่อครอบคลุมส่วนนี้:

  • เส้นทาง 1: 1,2,3,5,6, 7
  • เส้นทาง 2: 1,2,4,5,6, 7
  • เส้นทาง 3: 1, 6, 7 น

วิธีการวาดกราฟควบคุมการไหล

ทุกขั้นตอนของการทดสอบเส้นทางพื้นฐานขึ้นอยู่กับแผนผังการไหลของการควบคุม ดังนั้นจึงควรสร้างแผนผังดังกล่าวให้มีความแม่นยำ

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

ลองพิจารณาโมดูลสั้นๆ ที่มีสองตัวเลือก:

if (a > b) {          // node 1, predicate
    max = a;          // node 2
} else {
    max = b;          // node 3
}
if (max > limit) {    // node 4, predicate
    alert();          // node 5
}
return max;           // node 6

กราฟมี 6 โหนดและ 6 ขอบ ทำให้ได้ V(G) = 6 – 6 + 2 = 2 ตามสูตรขอบ การนับเงื่อนไขให้คำตอบเดียวกันได้เร็วกว่า: 2 การตัดสินใจบวก 1 เท่ากับ 3 เส้นทางอิสระผ่านสองสาขาที่นำมารวมกัน ใช้รูปแบบใดก็ได้ที่คุณสามารถคำนวณได้อย่างน่าเชื่อถือ และตรวจสอบกับอีกรูปแบบหนึ่ง

สองกฎที่ช่วยป้องกันข้อผิดพลาดส่วนใหญ่ ประการแรก สภาวะที่ซับซ้อน เช่น ถ้า (x > 0 และ y > 0) นับเป็นโหนดเงื่อนไขสองโหนด ไม่ใช่หนึ่งโหนด เพราะการลัดวงจรสร้างการตัดสินใจครั้งที่สอง ประการที่สอง ลูปจะสร้างโหนดเงื่อนไขหนึ่งโหนดเสมอ ไม่ว่าจะวนซ้ำกี่ครั้งก็ตาม

ขั้นตอนการทดสอบเส้นทางพื้นฐาน

ขั้นตอนพื้นฐานที่เกี่ยวข้องกับการทดสอบเส้นทางพื้นฐานประกอบด้วย

  • วาดกราฟควบคุม (เพื่อกำหนดเส้นทางโปรแกรมต่างๆ)
  • คำนวณ ความซับซ้อนของไซโคลมาติก (หน่วยเมตริกเพื่อกำหนดจำนวนเส้นทางอิสระ)
  • ค้นหาชุดเส้นทางพื้นฐาน
  • ผลิต กรณีทดสอบ เพื่อออกกำลังกายในแต่ละเส้นทาง

ข้อดีและข้อจำกัดของการทดสอบเส้นทางพื้นฐาน

ข้อดีของการทดสอบเส้นทางพื้นฐาน

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

ข้อจำกัดของการทดสอบเส้นทางพื้นฐาน

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

คำถามที่พบบ่อย

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

ความซับซ้อนเชิงวัฏจักรของโมดูลนั้น หาก V(G) เท่ากับ 4 แสดงว่ามีเส้นทางอิสระ 4 เส้นทาง และต้องใช้กรณีทดสอบ 4 กรณีเพื่อให้ครอบคลุมสาขาอย่างสมบูรณ์

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

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

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

สรุปโพสต์นี้ด้วย: