ความซับซ้อนของไซโคลมาติกในการทดสอบซอฟต์แวร์ (ตัวอย่าง)
ความซับซ้อนของไซโคลมาติกของ McCabe คืออะไร?
ความซับซ้อนของไซโคลมาติกในการทดสอบซอฟต์แวร์ เป็นตัวชี้วัดการทดสอบที่ใช้ในการวัดความซับซ้อนของโปรแกรมซอฟต์แวร์ เป็นการวัดเชิงปริมาณของเส้นทางอิสระในโค้ดต้นฉบับของโปรแกรมซอฟต์แวร์ ความซับซ้อนแบบไซโคลมาติกสามารถคำนวณได้โดยใช้กราฟกระแสควบคุมหรือโดยคำนึงถึงฟังก์ชัน โมดูล วิธีการ หรือคลาสภายในโปรแกรมซอฟต์แวร์
เส้นทางอิสระถูกกำหนดให้เป็นเส้นทางที่มีขอบอย่างน้อยหนึ่งเส้นซึ่งไม่เคยถูกสำรวจมาก่อนในเส้นทางอื่น
ตัวชี้วัดนี้ได้รับการพัฒนาโดย Thomas J. McCabe ในปี 1976 และขึ้นอยู่กับการแสดงโฟลว์การควบคุมของโปรแกรม โฟลว์การควบคุมแสดงโปรแกรมเป็นกราฟซึ่งประกอบด้วยโหนดและขอบ
ในกราฟ โหนดแสดงถึงงานการประมวลผล ในขณะที่ขอบแสดงถึงโฟลว์การควบคุมระหว่างโหนด
สัญลักษณ์โฟลว์กราฟสำหรับโปรแกรม
สัญลักษณ์โฟลว์กราฟสำหรับโปรแกรมจะกำหนดโหนดต่างๆ ที่เชื่อมต่อผ่านขอบ ด้านล่างนี้คือไดอะแกรมโฟลว์สำหรับคำสั่งต่างๆ เช่น if-else, While, until และลำดับโฟลว์ปกติ
วิธีการคำนวณความซับซ้อนของไซโคลมาติก
การเป็นตัวแทนทางคณิตศาสตร์:
ในทางคณิตศาสตร์ มันคือเซตของเส้นทางอิสระที่ผ่านแผนภาพกราฟ Code ความซับซ้อนของโปรแกรมสามารถกำหนดได้โดยใช้สูตร –
V(G) = E - N + 2
ที่ไหน
E – จำนวนขอบ
N – จำนวนโหนด
V (G) = P + 1
โดยที่ P = จำนวนโหนดเพรดิเคต (โหนดที่มีเงื่อนไข)
ตัวอย่าง -
i = 0; n=4; //N-Number of nodes present in the graph while (i<n-1) do j = i + 1; while (j<n) do if A[i]<A[j] then swap(A[i], A[j]); end do; j=j+1; end do;
Flow Graph ของโปรแกรมนี้จะเป็น
การคำนวณทางคณิตศาสตร์
- วี(ก) = 9 – 7 + 2 = 4
- V(G) = 3 + 1 = 4 (โหนดเงื่อนไขคือ 1,2 และ 3 โหนด)
- ชุดพื้นฐาน – ชุดของเส้นทางการดำเนินการที่เป็นไปได้ของโปรแกรม
- 1, 7
- 1, 2, 6, 1, 7
- รถประจำทางสาย 1, 2, 3, 4, 5, 2, 6, 1, 7
- 1, 2, 3, 5, 2, 6, 1, 7
สมบัติของความซับซ้อนของไซโคลมาติก
ต่อไปนี้เป็นคุณสมบัติของความซับซ้อนของไซโคลมาติก:
- V (G) คือจำนวนเส้นทางอิสระสูงสุดในกราฟ
- วี (ช) >=1
- G จะมีเส้นทางเดียวถ้า V (G) = 1
- ลดความซับซ้อนให้เหลือเพียง 10
ตัวชี้วัดนี้มีประโยชน์สำหรับการทดสอบซอฟต์แวร์อย่างไร
การทดสอบเส้นทางพื้นฐานเป็นเทคนิคหนึ่งของ White box และรับประกันว่าจะดำเนินการคำสั่งอย่างน้อยหนึ่งคำสั่งระหว่างการทดสอบ โดยจะตรวจสอบเส้นทางอิสระเชิงเส้นแต่ละเส้นทางผ่านโปรแกรม ซึ่ง หมายถึงจำนวนกรณีทดสอบที่จะเทียบเท่ากับความซับซ้อนของวงจรของโปรแกรม
เมตริกนี้มีประโยชน์เนื่องจากคุณสมบัติของความซับซ้อนของไซโคลมาติก (M) –
- M สามารถเป็นจำนวนกรณีทดสอบเพื่อให้ครอบคลุมสาขา (Upper Bound)
- M สามารถเป็นจำนวนเส้นทางผ่านกราฟได้ (ขอบเขตล่าง)
ลองพิจารณาตัวอย่างนี้ -
If (Condition 1) Statement 1 Else Statement 2 If (Condition 2) Statement 3 Else Statement 4
ความซับซ้อนของไซโคลมาติกสำหรับโปรแกรมนี้จะเป็น 8-7+2=3
เนื่องจากความซับซ้อนคำนวณไว้ที่ 3 จึงจำเป็นต้องมีกรณีทดสอบ XNUMX กรณีเพื่อให้ครอบคลุมเส้นทางทั้งหมดสำหรับตัวอย่างข้างต้น
ขั้นตอนที่ต้องปฏิบัติตาม:
ควรปฏิบัติตามขั้นตอนต่อไปนี้สำหรับการคำนวณความซับซ้อนของ Cyclomatic และการออกแบบกรณีทดสอบ
ขั้นตอนที่ 1 – การสร้างกราฟด้วยโหนดและขอบจากโค้ด
ขั้นตอนที่ 2 – การระบุเส้นทางที่เป็นอิสระ
ขั้นตอนที่ 3 – การคำนวณความซับซ้อนของไซโคลมาติก
ขั้นตอนที่ 4 – การออกแบบกรณีทดสอบ
เมื่อสร้างชุดพื้นฐานแล้ว กรณีทดสอบ ควรเขียนเพื่อดำเนินการทุกเส้นทาง
ข้อมูลเพิ่มเติมเกี่ยวกับวี (G)
หากโปรแกรมมีขนาดเล็ก ความซับซ้อนของไซโคลมาติกสามารถคำนวณได้ด้วยตนเอง หากโปรแกรมมีความซับซ้อนมาก จำเป็นต้องใช้เครื่องมืออัตโนมัติ เนื่องจากต้องมีกราฟการไหลจำนวนมาก ทีมงานสามารถสรุปการดำเนินการที่ต้องดำเนินการเพื่อวัดผลได้จากจำนวนความซับซ้อน
ตารางต่อไปนี้ให้ภาพรวมเกี่ยวกับจำนวนความซับซ้อนและความหมายที่สอดคล้องกันของ v (G):
| จำนวนความซับซ้อน | ความหมาย |
|---|---|
| 1-10 | รหัสที่มีโครงสร้างและเขียนได้ดี
ความสามารถในการทดสอบสูง ต้นทุนและความพยายามน้อยลง |
| 10-20 | ซับซ้อน Code
ความสามารถในการทดสอบปานกลาง ต้นทุนและความพยายามอยู่ในระดับปานกลาง |
| 20-40 | ซับซ้อนมาก Code
ความสามารถในการทดสอบต่ำ ต้นทุนและความพยายามสูง |
| > 40 | ไม่สามารถทดสอบได้เลย
ต้นทุนและความพยายามที่สูงมาก |
เครื่องมือสำหรับการคำนวณความซับซ้อนของไซโคลมาติก:
มีเครื่องมือมากมายสำหรับการกำหนดความซับซ้อนของแอปพลิเคชัน เครื่องมือคำนวณความซับซ้อนบางตัวใช้สำหรับเทคโนโลยีเฉพาะ ความซับซ้อนสามารถพบได้จากจำนวนจุดตัดสินใจในโปรแกรม จุดตัดสินใจได้แก่ คำสั่ง if, for, for-each, while, do, catch, case ในโค้ดต้นฉบับ
ตัวอย่างเครื่องมือได้แก่
- โอคลินท์ – ตัววิเคราะห์โค้ดแบบคงที่สำหรับ C และภาษาที่เกี่ยวข้อง
- ส่วนเสริมตัวสะท้อนแสง – Code เมตริกสำหรับแอสเซมบลี .NET
- จีเมตริกส์ – ค้นหาตัวชี้วัดใน Java แอปพลิเคชันที่เกี่ยวข้อง
การใช้ความซับซ้อนของไซโคลมาติก:
ความซับซ้อนของไซโคลมาติกอาจพิสูจน์ได้ว่ามีประโยชน์มากใน
- ช่วยให้นักพัฒนาและผู้ทดสอบกำหนดการดำเนินการตามเส้นทางที่เป็นอิสระ
- นักพัฒนาสามารถมั่นใจได้ว่าเส้นทางทั้งหมดได้รับการทดสอบอย่างน้อยหนึ่งครั้ง
- ช่วยให้เรามุ่งความสนใจไปที่เส้นทางที่เปิดกว้างมากขึ้น
- ปรับปรุงการครอบคลุมโค้ดใน วิศวกรรมซอฟต์แวร์
- ประเมินความเสี่ยงที่เกี่ยวข้องกับแอปพลิเคชันหรือโปรแกรม
- การใช้ตัวชี้วัดเหล่านี้ตั้งแต่เนิ่นๆ ของวงจรจะช่วยลดความเสี่ยงของโปรแกรมได้มากขึ้น
สรุป
ความซับซ้อนของไซโคลมาติกเป็นเมตริกซอฟต์แวร์ที่มีประโยชน์สำหรับโครงสร้างหรือ สีขาว Box การทดสอบใช้เพื่อประเมินความซับซ้อนของโปรแกรมเป็นหลัก หากจุดตัดสินใจมีมากขึ้น แสดงว่าโปรแกรมมีความซับซ้อนมากขึ้น หากโปรแกรมมีจำนวนความซับซ้อนสูง โอกาสเกิดข้อผิดพลาดก็จะสูง และต้องใช้เวลาในการบำรุงรักษาและแก้ไขปัญหามากขึ้น


.png)
.png)