تطبيق Python لمقياس برامج ABC:
تم تقديم مقياس برامج ABC بواسطة Jerry Fitzpatrick في عام 1997 للتغلب على عيوب LOC. يحدد المقياس درجة ABC على أنها ثلاثية من القيم التي تمثل حجم مجموعة من عبارات رمز المصدر. يتم حساب درجة ABC عن طريق حساب عدد المهام (أ) ، وعدد الفروع (ب) ، وعدد الشرطية (ج) في البرنامج. يمكن تطبيق درجة ABC على الأساليب الفردية أو الوظائف أو الفئات أو الوحدات أو الملفات داخل البرنامج.
تتوفر ورقة Fitzpatrick الأصلية ، في وقت كتابة هذا التقرير ، فقط عبر آلة Wayback ، لذلك يتم تضمين نسخة منه في هذا الريبو أيضًا.
يسرد الورقة قواعد العد لـ C و C ++ و Java ، لذا فيما يلي القواعد التي يستخدمها هذا الريبو لـ Python:
else
، elif
، except
.assert
بدون مشغل مشروط. قم بتثبيت المتطلبات في بيئتك الافتراضية التي تختارها ، ثم يمكنك رؤية وسيط سطر الأوامر المتوفرة:
$ 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 )
يمكنك الحصول على إخراج Barebones على النحو التالي:
$ 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
لإخبار المكتبة كم عدد نوى وحدة المعالجة المركزية التي يجب استخدامها. بشكل افتراضي ، ستحاول المكتبة استخدام جميع النوى المتوفرة على جهازك.