ABC 소프트웨어 메트릭의 파이썬 구현 :
ABC 소프트웨어 메트릭은 1997 년 Jerry Fitzpatrick에 의해 도입되어 LOC의 단점을 극복했습니다. 메트릭은 ABC 점수를 소스 코드 문의 세트의 크기를 나타내는 값의 삼중 항로 정의합니다. ABC 점수는 프로그램에서 과제 수 (a), 분기 수 (b) 수 및 조건부 수 (c)를 계산하여 계산됩니다. ABC 점수는 프로그램 내의 개별 방법, 기능, 클래스, 모듈 또는 파일에 적용될 수 있습니다.
Fitzpatrick의 원본 논문은 글을 쓰는 시점에서 Wayback Machine을 통해서만 사용할 수 있으므로이 저장소에도 사본이 포함되어 있습니다.
이 논문에는 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 )
다음과 같이 베어 본 출력을 얻을 수 있습니다.
$ 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 파일 (및 하위 다이렉터)이 스캔되며,이 시점에서 ABC에 의해 파일을 순위하기 위해 sort
플래그를 전달하는 것이 유용 할 수 있습니다. 크기:
$ 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 코어를 사용할 수 있는지 알 수 있습니다. 기본적으로 라이브러리는 컴퓨터에서 사용할 수있는 모든 코어를 사용하려고합니다.