ความซับซ้อนของการออกแบบซอฟต์แวร์

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

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

มาตรการความซับซ้อนของ Halstead

ในปีพ. ศ. 2520 Mr. Maurice Howard Halstead ได้แนะนำเมตริกเพื่อวัดความซับซ้อนของซอฟต์แวร์ เมตริกของ Halstead ขึ้นอยู่กับการนำโปรแกรมไปใช้งานจริงและการวัดผลซึ่งคำนวณโดยตรงจากตัวดำเนินการและตัวถูกดำเนินการจากซอร์สโค้ดในลักษณะคงที่ ช่วยให้สามารถประเมินเวลาในการทดสอบคำศัพท์ขนาดความยากข้อผิดพลาดและความพยายามสำหรับซอร์สโค้ด C / C ++ / Java

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

เขากำหนดตัวบ่งชี้ต่างๆเพื่อตรวจสอบความซับซ้อนของโมดูล

พารามิเตอร์ ความหมาย
n1 จำนวนตัวดำเนินการที่ไม่ซ้ำกัน
\ n2 จำนวนตัวถูกดำเนินการที่ไม่ซ้ำกัน
N1 จำนวนการเกิดทั้งหมดของตัวดำเนินการ
N2 จำนวนการเกิดขึ้นทั้งหมดของตัวถูกดำเนินการ

เมื่อเราเลือกซอร์สไฟล์เพื่อดูรายละเอียดความซับซ้อนในตัวแสดงเมตริกผลลัพธ์ต่อไปนี้จะปรากฏในรายงานเมตริก:

เมตริก ความหมาย การเป็นตัวแทนทางคณิตศาสตร์
n คำศัพท์ n1 + n2
ขนาด N1 + N2
V ปริมาณ ความยาว * คำศัพท์ Log2
ความยาก (n1 / 2) * (N1 / n2)
ความพยายาม ความยาก * ปริมาณ
ข้อผิดพลาด ปริมาณ / 3000
ที เวลาทดสอบ เวลา = ความพยายาม / S โดยที่ S = 18 วินาที

มาตรการความซับซ้อนของไซโคลมาติก

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

หากเราเปรียบเทียบสองโปรแกรมที่มีขนาดเท่ากันโปรแกรมที่มีข้อความในการตัดสินใจมากกว่าจะซับซ้อนกว่าเนื่องจากการควบคุมการกระโดดของโปรแกรมบ่อยๆ

McCabe ในปี 1976 เสนอ Cyclomatic Complexity Measure เพื่อหาปริมาณความซับซ้อนของซอฟต์แวร์ที่กำหนด เป็นแบบจำลองการขับเคลื่อนด้วยกราฟที่ขึ้นอยู่กับโครงสร้างการตัดสินใจของโปรแกรมเช่น if-else, do-while, repeat-until, switch-case และ goto

กระบวนการสร้างกราฟควบคุมการไหล:

  • แบ่งโปรแกรมเป็นบล็อกเล็ก ๆ คั่นด้วยโครงสร้างการตัดสินใจ
  • สร้างโหนดที่เป็นตัวแทนของแต่ละโหนดเหล่านี้
  • เชื่อมต่อโหนดดังนี้:
    • ถ้าการควบคุมสามารถแตกแขนงจากบล็อก i ไปยังบล็อก j

      วาดส่วนโค้ง

    • จากโหนดออกไปยังโหนดรายการ

      วาดส่วนโค้ง

ในการคำนวณความซับซ้อนของวงจรของโมดูลโปรแกรมเราใช้สูตร -

V(G) = e – n + 2

Where
e is total number of edges
n is total number of nodes

ความซับซ้อนของวงจรของโมดูลข้างต้นคือ

e = 10
n = 8
Cyclomatic Complexity = 10 - 8 + 2
                      = 4

ตามที่ P. Jorgensen Cyclomatic Complexity ของโมดูลไม่ควรเกิน 10

จุดฟังก์ชัน

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

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

ให้เราดูพารามิเตอร์ของจุดฟังก์ชัน:

อินพุตภายนอก

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

  • Simple - หากจำนวนอินพุตต่ำและมีผลต่อไฟล์ภายในน้อยลง

  • Complex - หากจำนวนอินพุตสูงและมีผลต่อไฟล์ภายในมากขึ้น

  • Average - ระหว่างง่ายและซับซ้อน

เอาต์พุตภายนอก

ประเภทเอาต์พุตทั้งหมดที่ระบบมีให้จะนับอยู่ในประเภทนี้ เอาต์พุตจะถือว่าไม่ซ้ำกันหากรูปแบบเอาต์พุตและ / หรือการประมวลผลไม่ซ้ำกัน

  • Simple - หากจำนวนเอาต์พุตต่ำ

  • Complex - หากจำนวนเอาต์พุตสูง

  • Average - อยู่ระหว่างความเรียบง่ายและซับซ้อน

ไฟล์ภายในแบบลอจิคัล

ระบบซอฟต์แวร์ทุกระบบจะเก็บรักษาไฟล์ภายในเพื่อรักษาข้อมูลที่ใช้งานได้และทำงานได้อย่างถูกต้อง ไฟล์เหล่านี้เก็บข้อมูลตรรกะของระบบ ข้อมูลตรรกะนี้อาจมีทั้งข้อมูลการทำงานและข้อมูลควบคุม

  • Simple - หากจำนวนประเภทการบันทึกต่ำ

  • Complex - หากจำนวนประเภทการบันทึกสูง

  • Average - อยู่ระหว่างความเรียบง่ายและซับซ้อน

ไฟล์อินเทอร์เฟซภายนอก

ระบบซอฟต์แวร์อาจต้องแชร์ไฟล์กับซอฟต์แวร์ภายนอกบางตัวหรืออาจต้องส่งไฟล์เพื่อประมวลผลหรือเป็นพารามิเตอร์ให้กับฟังก์ชันบางอย่าง ไฟล์ทั้งหมดนี้นับเป็นไฟล์อินเตอร์เฟสภายนอก

  • Simple - หากจำนวนประเภทบันทึกในไฟล์ที่แชร์มีน้อย

  • Complex - หากจำนวนประเภทบันทึกในไฟล์ที่แชร์มีมาก

  • Average - อยู่ระหว่างความเรียบง่ายและซับซ้อน

คำถามภายนอก

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

  • Simple - หากแบบสอบถามต้องการการประมวลผลต่ำและให้ข้อมูลผลลัพธ์จำนวนเล็กน้อย

  • Complex - หากแบบสอบถามต้องการกระบวนการที่สูงและให้ข้อมูลผลลัพธ์จำนวนมาก

  • Average - อยู่ระหว่างความเรียบง่ายและซับซ้อน

พารามิเตอร์เหล่านี้แต่ละตัวในระบบจะได้รับน้ำหนักตามคลาสและความซับซ้อน ตารางด้านล่างกล่าวถึงน้ำหนักที่กำหนดให้กับแต่ละพารามิเตอร์:

พารามิเตอร์ เรียบง่าย เฉลี่ย ซับซ้อน
อินพุต 3 4 6
เอาท์พุต 4 5 7
สอบถาม 3 4 6
ไฟล์ 7 10 15
อินเทอร์เฟซ 5 7 10

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

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

จากนั้นปัจจัยลักษณะเหล่านี้จะถูกจัดอันดับจาก 0 ถึง 5 ดังที่กล่าวไว้ด้านล่าง:

  • ไม่มีอิทธิพล
  • Incidental
  • Moderate
  • Average
  • Significant
  • Essential

จากนั้นการให้คะแนนทั้งหมดจะรวมเป็น N ค่าของ N อยู่ในช่วง 0 ถึง 70 (คุณลักษณะ 14 ประเภท x 5 ประเภทของการให้คะแนน) ใช้ในการคำนวณ Complexity Adjustment Factors (CAF) โดยใช้สูตรต่อไปนี้:

CAF = 0.65 + 0.01N

จากนั้น

Delivered Function Points (FP)= CAF x Raw FP

จากนั้น FP นี้สามารถใช้ในเมตริกต่างๆเช่น:

    Cost = $ / FP

    Quality = ข้อผิดพลาด / FP

    Productivity = FP / คน - เดือน