Python 정적 분석 도구
8217 단어 codereviewpythoncodequality
정적 코드 분석이란 무엇입니까?
정적 코드 분석은 실제 실행되지 않은 상황에서 컴퓨터 프로그램을 분석하여 문제를 발견하는 과정이다.일반적으로 정적 분석은 프로그램을 abstract syntax tree (AST)로 바꾸는 도구를 통해 프로그램의 원본 코드에 대해 실행하여 코드의 구조를 파악한 다음에 그 중의 문제점을 발견한다.
정적 분석 도구를 사용하는 이유는 무엇입니까?
정적 코드 분석은 코드의 반모드를 식별하고 가능한 코드의 질과 안전 문제를 측정하는 데 도움을 줄 수 있다.이것은 개발 초기 단계에서 코드의 문제를 발견하고 수정하여 후기에 생산 과정에서 문제가 발생할 가능성을 줄일 수 있도록 합니다.이러한 도구에 대한 정적 분석 유형은 다음과 같습니다.
정적 코드 분석의 장점
정적 코드 분석은 100% 정확하지 않아 오보나 오보를 되돌릴 때가 있다.그러나 다음과 같은 여러 가지 이점이 있습니다.
파이톤의 최고급 정적 분석 도구
Python 생태계에서 정적 코드 분석에 사용되는 도구를 살펴보겠습니다.
Pylint
pylint
은python 코드가 실행된 후 발생할 수 있는 오류를 열거하고 인코딩 표준을 실시하며 코드 냄새를 찾아내고 간단한 재구성 조언을 제공하며 코드의 복잡성에 대한 조언을 제공하는 정적 코드 분석 도구이다.pylint
는 13년 동안 존재했고 계속 유지보수하고 있다.기존의 진부하지만 .pylintrc
파일을 통해 사용자 정의를 할 수 있고 사용자와 관련된 오류나 프로토콜을 사용자 정의할 수 있습니다.예:
다음은 스타일 문제가 있는 프로그램입니다.
견본py
a = 23
b = 45
c = a + b
print(c)
pylint
를 실행하면 다음 출력을 얻을 수 있습니다. 프로그램의 여러 가지 스타일 문제가 열거되어 있습니다.
% pylint sample.py
************* Module sample
sample.py:5:0: C0304: Final newline missing (missing-final-newline)
sample.py:1:0: C0114: Missing module docstring (missing-module-docstring)
sample.py:1:0: C0103: Constant name "a" doesn't conform to UPPER_CASE naming style (invalid-name)
sample.py:2:0: C0103: Constant name "b" doesn't conform to UPPER_CASE naming style (invalid-name)
sample.py:3:0: C0103: Constant name "c" doesn't conform to UPPER_CASE naming style (invalid-name)
Pyflakes pyflakes
python 소스 코드의 검증 도구입니다.그것은 스타일을 검증하지 않고 논리 오류만 검증한다.이것은 오보를 거의 내지 않습니다. 이것은 docstring이 부족하거나 이름 스타일과 일치하지 않는 파라미터 이름에 대한 오류를 표시하지 않는다는 것을 의미합니다.pyflakes
를 pylint
보다 더 빠르게 하는 것은 각각의 파일을 단독으로 검사할 수 있는AST이며 유한한 오류가 수반된다.설치 가능
pyflakes
$ pip install --upgrade pyflakes
앞서 언급한 바와 같이 pyflakes
스타일 검사는 하지 않지만 원하시면 Flake8
라는 도구를 사용하여 스타일 검사를 할 수 있습니다. 이 도구는 pyflakes
와 PEP8
스타일 검사를 결합했습니다.또한 Flake8
각 항목에 구성 옵션을 추가할 수도 있습니다.Mypy
mypy
와pylint
와pyflakes
는 약간 다르다. 왜냐하면 이것은 파이톤의 정적 유형 검사기이기 때문이다.Python 3 함수 주석 문법 ((PEP484) 을 사용하여 코드에 대한 설명을 요구합니다. 코드에 대한 형식 검사를 하고 흔한 오류를 검출할 수 있도록 합니다.mypy
의 목적은 동적과 정적 입력의 장점을 결합시키는 것이다(입력 모듈을 사용한다).파이톤에서...
def fib(n):
a, b = 0, 1
while a < n:
yield a
a, b = b, a+b
...정적 형식의 Pythondef fib(n: int) -> Iterator[int]:
a, b = 0, 1
while a < n:
yield a
a, b = b, a+b
유형 설명은 기계 테스트를 거친 문서로 충당하고 정적 유형은 코드를 뚜렷하고 수정하기 쉬우며 오류가 발생하지 않도록 한다.Prospector
Prospector는 Python 코드의 강력한 정적 분석 도구입니다.오류, 잠재적 문제, 규정 위반, 복잡성에 대한 정보를 표시합니다.다음과 같은 다른 분석 도구의 기능이 통합되어 있습니다.
pyflakes - 오류 감지
코일 복잡도 분석기
mccabe - 기밀 누설 감지
dodgy - 를 설정합니다.py 검증기
pyroma - 사용되지 않는 코드 감지
pylint
, pep8
또는 pyflakes
의 까다로운 경고를 억제하고 중요한 내용만 제공할 수 있는 많은 설정이 있다.vulture
Bandit는 Python 코드에서 일반적인 보안 문제를 찾는 데 사용되는 도구입니다.이를 위해, 모든 파일을 분석하여 AST를 구축하고, 적합한 플러그인을 AST 노드로 실행합니다.모든 문서의 안전 문제에 대한 정적 분석이 완료되면 보고서를 생성합니다.하드코딩 암호, 잘못된 pickle 정렬화/반정렬화, 셸 주입, SQL 주입을 찾을 수 있습니다.
Bandit
정적 코드 분석을 자동화할 수 있습니다. 이것은 고품질 코드를 만드는 문화를 개발하는 데 도움을 줄 수 있습니다.자동화 정적 코드 분석은 많은 시간을 절약할 수 있다.그것은 감지할 수 없는 문제를 식별하는 데 도움이 된다.
특징 및 기능
대부분의 자동 정적 코드 분석 도구는 다음과 같은 기능을 제공합니다.
자동 정적 분석과 코드 심사 도구의 완벽한 예는 Automated Static Code Analysis이다.너는 개원 항목에서 그것을 무료로 사용할 수 있다.
DeepSource
Reference
이 문제에 관하여(Python 정적 분석 도구), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/withshubh/python-static-analysis-tools-275b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)