การใช้งาน Python ของตัวชี้วัดซอฟต์แวร์ ABC:
ตัวชี้วัดซอฟต์แวร์ ABC ได้รับการแนะนำโดย Jerry Fitzpatrick ในปี 1997 เพื่อเอาชนะข้อเสียของ LOC ตัวชี้วัดกำหนดคะแนน ABC เป็น triplet ของค่าที่แสดงขนาดของชุดคำสั่งซอร์สโค้ด คะแนน ABC คำนวณโดยการนับจำนวนการมอบหมาย (a) จำนวนสาขา (B) และจำนวนเงื่อนไข (c) ในโปรแกรม คะแนน ABC สามารถนำไปใช้กับแต่ละวิธีฟังก์ชันคลาสคลาสโมดูลหรือไฟล์ภายในโปรแกรม
กระดาษต้นฉบับของ Fitzpatrick คือในขณะที่เขียนมีให้เฉพาะผ่านเครื่อง Wayback ดังนั้นสำเนาของมันจะรวมอยู่ใน repo นี้เช่นกัน
กระดาษแสดงกฎการนับสำหรับ C, C ++ และ Java ดังนั้นนี่คือกฎที่ repo นี้ใช้สำหรับ Python:
else , elif , exceptassert โดยไม่มีตัวดำเนินการตามเงื่อนไข ติดตั้งข้อกำหนดในสภาพแวดล้อมเสมือนจริงที่คุณเลือกจากนั้นคุณสามารถดูอาร์กิวเมนต์บรรทัดคำสั่งที่มีอยู่:
$ python -m python_abc --help
usage: python_abc [-h] [--debug DEBUG] [--sort SORT] [--verbose VERBOSE] path
A python implementation of the ABC Software metric: https://en.wikipedia.org/wiki/ABC_Software_Metric
positional arguments:
path path to directory or file
optional arguments:
-h, --help show this help message and exit
--debug DEBUG display AST output for each element in the parsed tree
--sort SORT sort files from highest to lowest magnitude
--verbose VERBOSE display marked-up file กำหนด file.py ที่มีข้อความต่อไปนี้:
if a and b :
print ( a )
else :
print ( b )
a = sum ( i for i in range ( 1000 ) if i % 3 == 0 and i % 5 == 0 )
def f ( n ):
def inner ( n ):
return n ** 2
if n == 0 :
return 1
elif n == 1 :
return n
elif n < 5 :
return ( n - 1 ) ** 2
return n * pow ( inner ( n ), f ( n - 1 ), n - 3 )คุณสามารถรับเอาท์พุทเปล่าได้ดังนี้:
$ python -m python_abc /path/to/file.py
/path/to/file.py < 1, 7, 10> (12.2) การผ่านธง verbose จะให้รายละเอียดเพิ่มเติม:
$ python -m python_abc file.py --verbose=true
cc | if a and b:
b | print(a)
c | else:
b | print(b)
|
abbcc | a = sum(i for i in range(1000) if i % 3 == 0 and i % 5 == 0)
|
| def f(n):
| def inner(n):
| return n ** 2
c | if n == 0:
| return 1
cc | elif n == 1:
| return n
cc | elif n < 5:
| return (n - 1) ** 2
bbb | return n * pow(inner(n), f(n - 1), n - 3)
file.py < 1, 7, 10> (12.2) หากคุณต้องการตรวจสอบแผนผังไวยากรณ์นามธรรมสำหรับไฟล์คุณสามารถผ่านธง debug ซึ่งจะพิมพ์แต่ละโหนดจากต้นไม้และเวกเตอร์ที่เป็นผลมาจากมัน
อาร์กิวเมนต์ path ยังสามารถเป็นเส้นทางไปยังไดเรกทอรีซึ่งในกรณีนี้ไฟล์ Python ทั้งหมดในไดเรกทอรีนั้น (และไดเรกทอรีย่อย) จะถูกสแกน ณ จุดนี้จะมีประโยชน์ในการส่งธง sort เพื่อจัดอันดับไฟล์โดย ABC ขนาด:
$ python -m python_abc . --sort
./calculate.py < 18, 56, 23> (63.2)
./vector.py < 12, 23, 11> (28.2)
./main.py < 10, 23, 8> (26.3)
./tests/test_vector.py < 4, 19, 10> (21.8)
./tests/__init__.py < 4, 12, 1> (12.7)
./tests/test_radon_test_cases.py < 1, 2, 1> (2.4)
./tests/test_calculate_condition.py < 1, 2, 1> (2.4)
./tests/test_calculate_empty.py < 1, 2, 1> (2.4)
./tests/test_calculate_assignment.py < 1, 2, 1> (2.4)
./tests/test_calculate_branch.py < 1, 2, 1> (2.4) ในที่สุดคุณสามารถผ่านอาร์กิวเมนต์ cores เพื่อบอกไลบรารีว่าจะใช้คอร์ CPU จำนวนเท่าใด โดยค่าเริ่มต้นไลบรารีจะพยายามใช้คอร์ทั้งหมดที่มีอยู่ในเครื่องของคุณ