문제 영역을 식별하기 위해 Python 코드를 분석하려면 어떻게해야합니까?


99

여러 프로젝트에 분할 된 대규모 소스 저장소가 있습니다. 해결해야 할 문제 영역을 식별하여 소스 코드의 상태에 대한 보고서를 작성하고 싶습니다.

특히 순환 복잡도가 높은 루틴을 호출하고, 반복을 식별하고, 아마도 보풀과 같은 정적 분석을 실행하여 의심스러운 (따라서 오류 가능성이있는) 구성을 찾아보고 싶습니다.

그러한 보고서를 작성하려면 어떻게해야합니까?

답변:


36

순환 복잡도를 측정하기 위해 traceback.org 에서 사용할 수있는 멋진 도구가 있습니다 . 이 페이지는 또한 결과를 해석하는 방법에 대한 좋은 개요를 제공합니다.

필 린트의 경우 +1 . 이는 코딩 표준 ( PEP8 또는 조직의 변형) 준수 여부를 확인하는 데 탁월 하며 결국 순환 복잡성을 줄이는 데 도움이 될 수 있습니다.


4
traceback.org는 링크가 끊어졌습니다
denfromufa

Pylint는 훌륭하지만 느립니다. 우리는 pre-push hook으로 사용하지만 정기적 인 검사와 pre-commit hook을 위해 flake8과 많은 플러그인을 사용합니다. https://flakehell.readthedocs.io/config.html요즘은 실행 모델이 훨씬 더 강력하고 구성 가능하기 때문에 실제로 권장 합니다.
DylanYoung

29

순환 복잡도의 경우 https://github.com/rubik/radon을 사용할 수 있습니다 radon.

(사용 pip을 설치하려면 다음을 수행하십시오 pip install radon)

또한 다음과 같은 기능도 있습니다.

  • 원시 메트릭 (SLOC, 주석 줄, 빈 줄, & c 포함)
  • Halstead 메트릭 (모두)
  • 유지 관리 성 인덱스 (Visual Studio에서 사용되는 인덱스)

Halstead 메트릭을 얻기위한 스위치는 무엇입니까?
Dima Tisnek

1
@qarma 문서를 이해하면 명령 줄을 사용할 수 없다고 생각합니다. Python API를 사용해야합니다.
Dave Halter 2015


11

Pycana는 새로운 프로젝트를 이해해야 할 때 매력적으로 작동합니다!

PyCAna (Python Code Analyzer)는 코드 실행 후 클래스 다이어그램을 생성하는 Python 용 간단한 코드 분석기의 멋진 이름입니다.

작동 방식보기 : http://pycana.sourceforge.net/

산출:

대체 텍스트




4

유사한 코드 조각을 찾는 데 도움이되는 CloneDigger 라는 도구가 있습니다 .


1
Python 3에서는 작동하지 않으며 잘 유지되지도 않았습니다.
Acumenus 2010 년

3

순환 적 복잡성을 확인하기위한 mccabe패키지 는 물론 있습니다.

설치:

$ pip install --upgrade mccabe

용법:

$ python -m mccabe --min=6 path/to/myfile.py

위의 임계 값 6에 유의하십시오. 당 이 답변 점수> 5 아마 단순화해야한다.

다음을 사용한 샘플 출력 --min=3:

68:1: 'Fetcher.fetch' 3
48:1: 'Fetcher._read_dom_tag' 3
103:1: 'main' 3

선택적으로 pylint-mccabe 또는 pytest-mccabe 등을 통해 사용할 수도 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.