อ่าน 4 นาที
เมตริกซอฟต์แวร์ ABC
เมตริก ซอฟต์แวร์ ABC ได้รับการแนะนำโดย Jerry Fitzpatrick ในปี 1997 เพื่อเอาชนะข้อเสียของ LOC [ 1 ] เมตริกนี้กำหนดคะแนน ABC เป็นค่าสามค่าที่แสดงถึงขนาดของชุดคำสั่งซอร์สโค้ด คะแนน...
เมตริกซอฟต์แวร์ ABC
เมตริกซอฟต์แวร์ ABC ได้รับการแนะนำโดย Jerry Fitzpatrick ในปี 1997 เพื่อเอาชนะข้อเสียของLOC [ 1 ] เมตริกนี้กำหนดคะแนน ABC เป็นค่าสามค่าที่แสดงถึงขนาดของชุดคำสั่งซอร์สโค้ด คะแนน ABC คำนวณโดยการนับจำนวนการกำหนดค่า (A) จำนวน การแยก สาขา (B) และจำนวนเงื่อนไข (C) ในโปรแกรม คะแนน ABC สามารถนำไปใช้กับเมธอดฟังก์ชันคลาสโมดูลหรือไฟล์แต่ละรายการภายในโปรแกรม ได้
คะแนน ABC แสดงด้วยเวกเตอร์ 3 มิติ < การมอบหมายงาน (A), สาขา (B), เงื่อนไข (C) > นอกจากนี้ยังสามารถแสดงเป็น ค่า สเกลาร์ซึ่งก็คือขนาดของเวกเตอร์ < การมอบหมายงาน (A), สาขา (B), เงื่อนไข (C) > และคำนวณได้ดังนี้:
ตามธรรมเนียมแล้ว ค่าความรุนแรงของพายุหมุนเขตร้อนแบบ ABC จะถูกปัดเศษให้ใกล้เคียงที่สุดถึงทศนิยมตำแหน่งที่หนึ่ง
ประวัติศาสตร์
แนวคิดเรื่องการวัดขนาดซอฟต์แวร์ได้รับการนำเสนอครั้งแรกโดย Maurice Halstead [ 2 ]จากมหาวิทยาลัย Purdue ในปี 1975 เขาเสนอว่าโปรแกรมคอมพิวเตอร์ทุกโปรแกรมประกอบด้วยโทเค็น เป็นหลัก ได้แก่ตัวดำเนินการและตัวถูกดำเนินการเขาสรุปว่าการนับจำนวนตัวดำเนินการและตัวถูกดำเนินการที่ไม่ซ้ำกันจะให้การวัดขนาดของโปรแกรม อย่างไรก็ตาม วิธีนี้ไม่ได้ถูกนำมาใช้เป็นการวัดขนาดของโปรแกรม
จำนวนบรรทัดโค้ด (LOC) เป็นอีกมาตรวัดที่นิยมใช้ในการวัดขนาดของโปรแกรม อย่างไรก็ตาม จำนวนบรรทัดโค้ดไม่ถือเป็นมาตรวัดที่แม่นยำของขนาดโปรแกรม เนื่องจากแม้แต่โปรแกรมที่มีฟังก์ชันการทำงานเหมือนกันก็อาจมีจำนวนบรรทัดที่แตกต่างกัน ขึ้นอยู่กับรูปแบบการเขียนโค้ด[ 3 ]
มีการนำ เมตริกอีกตัวหนึ่งที่เรียกว่า เมตริก Function Point (FP) มาใช้ในการคำนวณจำนวนธุรกรรมอินพุตและเอาต์พุตของผู้ใช้ การคำนวณ Function Point ไม่ได้ให้ข้อมูลเกี่ยวกับฟังก์ชันการทำงานของโปรแกรมหรือเกี่ยวกับรูทีนที่เกี่ยวข้องในโปรแกรม[ 4 ]
ตัวชี้วัด ABC มีจุดประสงค์เพื่อเอาชนะข้อเสียของการนับจำนวนบรรทัดโค้ด (LOC), ข้อผิดพลาดแบบจุดลอยตัว (FP) และจำนวนโทเค็น (การดำเนินการและตัวถูกดำเนินการ) อย่างไรก็ตาม คะแนน FP สามารถนำมาใช้เสริมคะแนน ABC ได้เช่นกัน
แม้ว่าผู้เขียนจะอ้างว่าเมตริก ABC วัดขนาด แต่บางคนเชื่อว่ามันวัดความซับซ้อน[ 5 ]ความสามารถของเมตริก ABC ในการวัดความซับซ้อนขึ้นอยู่กับว่าความซับซ้อนถูกกำหนดอย่างไร
คำนิยาม
องค์ประกอบทั้งสามของคะแนน ABC มีคำจำกัดความดังต่อไปนี้:
- การกำหนดค่า: การจัดเก็บหรือถ่ายโอนข้อมูลลงในตัวแปร
- สาขา: การแตกสาขาโปรแกรมไปข้างหน้าอย่างชัดเจนที่อยู่นอกขอบเขต
- เงื่อนไข: การทดสอบ แบบบูลีนหรือตรรกะ
เนื่องจากภาษาพื้นฐาน เช่น C, C++, Java เป็นต้น มีเพียงการดำเนินการ เช่น การกำหนดค่าตัวแปร การเรียกฟังก์ชัน และเงื่อนไขการทดสอบเท่านั้น คะแนน ABC จึงมีองค์ประกอบทั้งสามนี้[ 1 ]
ถ้าเวกเตอร์ ABC ถูกกำหนดเป็น⟨5,11,9⟩สำหรับซับรูทีนหมายความว่าซับรูทีนนั้นมีการกำหนดค่า 5 ครั้ง มีการแยกสาขา 11 ครั้ง และมีเงื่อนไข 9 ครั้ง เพื่อความสม่ำเสมอ ควรเขียนจำนวนเหล่านั้นไว้ในวงเล็บเหลี่ยมและเรียงลำดับตามสัญลักษณ์⟨A, B, C⟩
โดยทั่วไปแล้ว การเปรียบเทียบขนาดของซอร์สโค้ดโดยใช้ค่าสเกลาร์จะสะดวกกว่า เนื่องจากค่า ABC แต่ละค่าแตกต่างกัน ดังนั้น ตามที่เจอร์รี ฟิตซ์แพทริกกล่าวไว้ เราจึงถือว่าส่วนประกอบทั้งสามนั้นตั้งฉากกันทำให้สามารถคำนวณค่า ABC ในรูปแบบสเกลาร์ได้ดังที่แสดงไว้ข้างต้น
ค่าคะแนน ABC แบบสเกลาร์นั้นสูญเสียข้อดีบางประการเมื่อเทียบกับค่าคะแนนแบบเวกเตอร์ แทนที่จะคำนวณขนาดของเวกเตอร์ การรวมเวกเตอร์แบบถ่วงน้ำหนักอาจช่วยให้เปรียบเทียบขนาดได้แม่นยำยิ่งขึ้น ไม่ควรนำเสนอค่าคะแนน ABC แบบสเกลาร์โดยปราศจากเวกเตอร์ ABC ประกอบ เนื่องจากค่าสเกลาร์ไม่ใช่ตัวแทนที่สมบูรณ์ของขนาด
ทฤษฎี
กฎเฉพาะสำหรับการนับค่าเวกเตอร์ ABC ควรได้รับการตีความแตกต่างกันไปในแต่ละภาษา เนื่องจาก มีความแตกต่าง ทางความหมายระหว่างภาษาเหล่านั้น
ดังนั้น กฎสำหรับการคำนวณเวกเตอร์ ABC จึงแตกต่างกันเล็กน้อยตามภาษา เรากำหนดกฎการคำนวณเมตริก ABC สำหรับ C, C++ และ Java ไว้ด้านล่าง กฎสำหรับภาษาเชิงคำสั่งอื่นๆ สามารถตีความได้ตามกฎเหล่านี้[ 1 ]
กฎ ABC สำหรับ C
กฎต่อไปนี้แสดงจำนวนของการกำหนดค่า (Assignments), สาขา (Branchs) และเงื่อนไข (Conditionals) ในเมตริก ABC สำหรับภาษา C :
- เพิ่มจำนวนการมอบหมายงานขึ้นหนึ่งรายการเมื่อ:
- การปรากฏของตัวดำเนินการกำหนดค่า ( =, *=, /=, %=, +=, -=, <<=, >>=, &=, !=, ^= )
- การปรากฏของตัวดำเนินการเพิ่มค่าหรือลดค่า ( ++, -- )
- เพิ่มจำนวนสาขาขึ้นหนึ่งเมื่อ:
- เพิ่มค่าเงื่อนไขหนึ่งเมื่อ:
- การปรากฏของตัวดำเนินการเงื่อนไข ( <, >, <=, >=, ==, != )
- การปรากฏของคำหลัก ต่อไปนี้ (' else ', ' case ', ' default ', ' ? ')
- การปรากฏของตัวดำเนินการเงื่อนไขเอกภาค
กฎ ABC สำหรับ C++
กฎต่อไปนี้แสดงจำนวนการกำหนดค่า (Assignments), การแยกสาขา (Branches) และเงื่อนไข (Conditionals) ในเมตริก ABC สำหรับภาษาC++ :
- เพิ่มจำนวนการมอบหมายงานขึ้นหนึ่งรายการเมื่อ:
- การปรากฏของตัวดำเนินการกำหนดค่า (ไม่รวมการประกาศค่าคงที่และการกำหนดค่าพารามิเตอร์ เริ่มต้น ) ( =, *=, /=, %=, +=, -=, <<=, >>=, &=, !=, ^= )
- การปรากฏของตัวดำเนินการเพิ่มหรือลดค่า (คำนำหน้าหรือคำต่อท้าย) ( ++, -- )
- การกำหนดค่าเริ่มต้นให้กับตัวแปรหรือสมาชิกคลาส ที่ไม่ใช่ค่าคง ที่
- เพิ่มจำนวนสาขาขึ้นหนึ่งเมื่อ:
- การเรียกใช้ฟังก์ชันหรือการเรียกใช้เมธอดของคลาส
- การปรากฏของคำสั่ง goto ใดๆ ที่มีเป้าหมายอยู่ในระดับการซ้อนที่ลึกกว่าระดับที่คำสั่ง goto นั้นตั้งอยู่
- การปรากฏของตัวดำเนินการ 'ใหม่' หรือ 'ลบ'
- เพิ่มค่าเงื่อนไขหนึ่งเมื่อ:
- การปรากฏของตัวดำเนินการเงื่อนไข ( <, >, <=, >=, ==, != )
- การปรากฏของคำหลักต่อไปนี้ (' else ', ' case ', ' default ', ' ? ', ' try ', ' catch ')
- การปรากฏของตัวดำเนินการเงื่อนไขเอกภาค
กฎ ABC สำหรับภาษา Java
กฎต่อไปนี้แสดงจำนวนการกำหนดค่า (Assignments), การแยกสาขา (Branches) และเงื่อนไข (Conditionals) ในเมตริก ABC สำหรับภาษา Java :
- เพิ่มจำนวนการมอบหมายงานขึ้นหนึ่งรายการเมื่อ:
- การปรากฏของตัวดำเนินการกำหนดค่า (ไม่รวมการประกาศค่าคงที่และการกำหนดค่าพารามิเตอร์เริ่มต้น) ( =, *=, /=, %=, +=, -=, <<=, >>=, &=, !=, ^=, >>>= )
- การปรากฏของตัวดำเนินการเพิ่มหรือลดค่า (คำนำหน้าหรือคำต่อท้าย) ( ++, -- )
- เพิ่มจำนวนสาขาขึ้นหนึ่งเมื่อ
- การเรียกใช้ฟังก์ชันหรือการเรียกใช้เมธอดของคลาส
- การปรากฏตัวของตัวดำเนินการ 'ใหม่'
- เพิ่มค่าเงื่อนไขหนึ่งเมื่อ:
- การปรากฏของตัวดำเนินการเงื่อนไข ( <, >, <=, >=, ==, != )
- การปรากฏของคำหลักต่อไปนี้ (' else ', ' case ', ' default ', ' ? ', ' try ', ' catch ')
- การปรากฏของตัวดำเนินการเงื่อนไขเอกภาค
แอปพลิเคชัน
[ 1 ]
ไม่ขึ้นอยู่กับรูปแบบการเขียนโค้ด
เนื่องจากตัวชี้วัดคะแนน ABC สร้างขึ้นจากแนวคิดที่ว่างานต่างๆ เช่น การจัดเก็บข้อมูล การแยกสาขา และการทดสอบ เงื่อนไข ตัวชี้วัดนี้จึงไม่ขึ้นอยู่กับรูปแบบการเขียนโค้ดของผู้ใช้
การประมาณเวลาโครงการ
การคำนวณคะแนน ABC ช่วยในการประมาณเวลาที่จำเป็นในการทำโครงการให้เสร็จสมบูรณ์ สามารถทำได้โดยการประมาณคะแนน ABC ของโครงการอย่างคร่าวๆ และโดยการคำนวณคะแนน ABC ของโครงการในแต่ละวัน เวลาที่ใช้ในการทำโครงการให้เสร็จสมบูรณ์สามารถหาได้โดยการหารคะแนน ABC ของโครงการด้วยคะแนน ABC ที่ได้ในหนึ่งวัน
การคำนวณอัตราข้อผิดพลาด
เดิมที อัตราข้อผิดพลาดคำนวณจากจำนวนข้อผิดพลาด / จำนวนบรรทัดโค้ด (LOC ) อย่างไรก็ตาม จำนวนบรรทัดโค้ดไม่ใช่มาตรวัดขนาดของโปรแกรมที่น่าเชื่อถือ เนื่องจากขึ้นอยู่กับรูปแบบการเขียนโค้ด วิธีการวัดอัตราข้อผิดพลาดที่แม่นยำกว่าคือ การคำนวณจากจำนวนข้อผิดพลาด / คะแนน ABC
การเปรียบเทียบโปรแกรม
โปรแกรมที่เขียนด้วยภาษาต่าง ๆ สามารถเปรียบเทียบกันได้โดยใช้คะแนน ABC เนื่องจากภาษาโปรแกรมส่วนใหญ่ใช้การกำหนดค่า การแยกเงื่อนไข และคำสั่งเงื่อนไข
ข้อมูลเกี่ยวกับการนับพารามิเตอร์แต่ละตัว (จำนวนการกำหนดค่า สาขา และเงื่อนไข) สามารถช่วยจำแนกโปรแกรมได้ว่าเป็น 'โปรแกรมที่เน้นข้อมูล' 'โปรแกรมที่เน้นฟังก์ชัน' หรือ 'โปรแกรมที่เน้นตรรกะ' รูปแบบเวกเตอร์ของคะแนน ABC สามารถให้ข้อมูลเชิงลึกเกี่ยวกับหลักการขับเคลื่อนเบื้องหลังแอปพลิเคชันในขณะที่รายละเอียดต่างๆ จะหายไปในรูปแบบสเกลาร์ของคะแนน
เมตริกเชิงเส้น
คะแนน ABC เป็นแบบเชิงเส้นดังนั้นไฟล์ โมดูล คลาส ฟังก์ชัน หรือเมธอดใดๆ ก็สามารถให้คะแนนได้ ตัวอย่างเช่น คะแนน ABC (แบบเวกเตอร์) สำหรับโมดูลหนึ่งคือผลรวมของคะแนนของโมดูลย่อยต่างๆ อย่างไรก็ตาม คะแนน ABC แบบสเกลาร์นั้นไม่ใช่เชิงเส้น
ดูเพิ่มเติม
- ความซับซ้อนของซอฟต์แวร์
- การวัดความซับซ้อนของ Halstead
- ความซับซ้อนแบบไซโคลมาติก
- ความซับซ้อนของการซิงโครไนซ์
- เมตริกซอฟต์แวร์
ลิงก์ภายนอก
- การประยุกต์ใช้เมตริก ABC กับภาษา C, C++ และ Java
- ABC Metric ถูกเก็บถาวรเมื่อวันที่ 28 มีนาคม 2018 ในWayback Machine
- กฎเกณฑ์ด้านขนาดและความซับซ้อน
- การถอดรหัสเมตริกโค้ด Ruby
- ตัวชี้วัด ABC
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ เมตริกซอฟต์แวร์ ABC
เมตริก ซอฟต์แวร์ ABC ได้รับการแนะนำโดย Jerry Fitzpatrick ในปี 1997 เพื่อเอาชนะข้อเสียของ LOC [ 1 ] เมตริกนี้กำหนดคะแนน ABC เป็นค่าสามค่าที่แสดงถึงขนาดของชุดคำสั่งซอร์สโค้ด คะแนน...
ประวัติศาสตร์
แนวคิดเรื่องการวัดขนาดซอฟต์แวร์ได้รับการนำเสนอครั้งแรกโดย Maurice Halstead [ 2 ] จากมหาวิทยาลัย Purdue ในปี 1975 เขาเสนอว่าโปรแกรมคอมพิวเตอร์ทุกโปรแกรมประกอบด้วย โทเค็น เป็นหลัก ได้แก่ ตัวดำเนินการ และ ตัวถูกดำเนินการ...
คำนิยาม
องค์ประกอบทั้งสามของคะแนน ABC มีคำจำกัดความดังต่อไปนี้:
ทฤษฎี
กฎเฉพาะสำหรับการนับค่าเวกเตอร์ ABC ควรได้รับการตีความแตกต่างกันไปในแต่ละภาษา เนื่องจาก มีความแตกต่าง ทางความหมาย ระหว่างภาษาเหล่านั้น