Implementasi Python dari Metrik Perangkat Lunak ABC:
Metrik perangkat lunak ABC diperkenalkan oleh Jerry Fitzpatrick pada tahun 1997 untuk mengatasi kelemahan LOC. Metrik mendefinisikan skor ABC sebagai triplet nilai yang mewakili ukuran serangkaian pernyataan kode sumber. Skor ABC dihitung dengan menghitung jumlah penugasan (a), jumlah cabang (b), dan jumlah kondisional (c) dalam suatu program. Skor ABC dapat diterapkan pada metode individu, fungsi, kelas, modul atau file dalam suatu program.
Makalah asli Fitzpatrick adalah, pada saat penulisan, hanya tersedia melalui mesin wayback, jadi salinannya termasuk dalam repo ini juga.
Makalah ini mencantumkan aturan penghitungan untuk C, C ++ dan Java, jadi inilah aturan yang digunakan repo ini untuk Python:
else , elif , except .assert tanpa operator bersyarat. Instal persyaratan di lingkungan virtual pilihan Anda, maka Anda dapat melihat argumen baris perintah yang tersedia:
$ 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 Yang diberikan file.py yang berisi teks berikut:
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 )Anda bisa mendapatkan output barebone sebagai berikut:
$ python -m python_abc /path/to/file.py
/path/to/file.py < 1, 7, 10> (12.2) Melewati bendera verbose akan memberikan lebih banyak detail:
$ 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) Jika Anda ingin memeriksa pohon sintaks abstrak untuk file, Anda dapat melewati bendera debug , yang akan mencetak setiap node dari pohon dan vektor yang dihasilkan darinya.
Argumen path juga dapat menjadi jalur ke direktori, dalam hal ini semua file python di direktori itu (dan sub-direktori) akan dipindai, pada titik mana dapat berguna untuk lulus bendera untuk sort peringkat file dengan ABC besarnya:
$ 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) Akhirnya Anda dapat melewati argumen cores untuk memberi tahu perpustakaan berapa banyak inti CPU untuk digunakan. Secara default perpustakaan akan mencoba menggunakan semua core yang tersedia di mesin Anda.