Python 정적 분석 도구

Stack overflow가 2020년에 실시한 조사에서 전 세계 개발자들은 파이톤을 가장 인기 있는 프로그래밍 언어third most loved programming language와 가장 인기 있는 프로그래밍 언어로 꼽았다.파이톤이 개발자들 사이에서 이렇게 유행하는데, 어쩐지 이렇게 정적 분석 도구가 많더라니.그러나 어떻게 그 중에서 가장 좋은 정적 코드 분석 도구를 선택합니까?이 블로그에서 나는 파이톤 코드에 대해 정적 코드 분석을 하는 내용, 원인과 방식을 공유할 것이다.

정적 코드 분석이란 무엇입니까?


정적 코드 분석은 실제 실행되지 않은 상황에서 컴퓨터 프로그램을 분석하여 문제를 발견하는 과정이다.일반적으로 정적 분석은 프로그램을 abstract syntax tree (AST)로 바꾸는 도구를 통해 프로그램의 원본 코드에 대해 실행하여 코드의 구조를 파악한 다음에 그 중의 문제점을 발견한다.

정적 분석 도구를 사용하는 이유는 무엇입니까?


정적 코드 분석은 코드의 반모드를 식별하고 가능한 코드의 질과 안전 문제를 측정하는 데 도움을 줄 수 있다.이것은 개발 초기 단계에서 코드의 문제를 발견하고 수정하여 후기에 생산 과정에서 문제가 발생할 가능성을 줄일 수 있도록 합니다.이러한 도구에 대한 정적 분석 유형은 다음과 같습니다.
  • 코드 스타일 분석
  • 안전줄
  • 오류 감지
  • UML 그림 생성
  • 중복 코드 검사
  • 복잡성 분석
  • 평론 스타일 분석
  • 코드 감지 미사용
  • 정적 코드 분석의 장점


    정적 코드 분석은 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 pyflakespython 소스 코드의 검증 도구입니다.그것은 스타일을 검증하지 않고 논리 오류만 검증한다.이것은 오보를 거의 내지 않습니다. 이것은 docstring이 부족하거나 이름 스타일과 일치하지 않는 파라미터 이름에 대한 오류를 표시하지 않는다는 것을 의미합니다.pyflakespylint보다 더 빠르게 하는 것은 각각의 파일을 단독으로 검사할 수 있는AST이며 유한한 오류가 수반된다.
    설치 가능pyflakes
    $ pip install --upgrade pyflakes
    
    앞서 언급한 바와 같이 pyflakes 스타일 검사는 하지 않지만 원하시면 Flake8라는 도구를 사용하여 스타일 검사를 할 수 있습니다. 이 도구는 pyflakesPEP8 스타일 검사를 결합했습니다.또한 Flake8 각 항목에 구성 옵션을 추가할 수도 있습니다.
    Mypy mypypylintpyflakes는 약간 다르다. 왜냐하면 이것은 파이톤의 정적 유형 검사기이기 때문이다.Python 3 함수 주석 문법 ((PEP484) 을 사용하여 코드에 대한 설명을 요구합니다. 코드에 대한 형식 검사를 하고 흔한 오류를 검출할 수 있도록 합니다.mypy의 목적은 동적과 정적 입력의 장점을 결합시키는 것이다(입력 모듈을 사용한다).
    파이톤에서...
    def fib(n):
        a, b = 0, 1
        while a < n:
            yield a
            a, b = b, a+b
    
    ...정적 형식의 Python
    def fib(n: int) -> Iterator[int]:
        a, b = 0, 1
        while a < n:
            yield a
            a, b = b, a+b
    
    유형 설명은 기계 테스트를 거친 문서로 충당하고 정적 유형은 코드를 뚜렷하고 수정하기 쉬우며 오류가 발생하지 않도록 한다.
    Prospector
    Prospector는 Python 코드의 강력한 정적 분석 도구입니다.오류, 잠재적 문제, 규정 위반, 복잡성에 대한 정보를 표시합니다.다음과 같은 다른 분석 도구의 기능이 통합되어 있습니다.
  • PyLint-코드 품질/오류 감지/반복 코드 감지
  • pep8.py-PEP8 코드 품질
  • pep257.py-PEP27 리뷰 품질

  • pyflakes - 오류 감지

  • 코일 복잡도 분석기

  • mccabe - 기밀 누설 감지

  • dodgy - 를 설정합니다.py 검증기

  • pyroma - 사용되지 않는 코드 감지
  • '탐색' 은 pylint, pep8 또는 pyflakes 의 까다로운 경고를 억제하고 중요한 내용만 제공할 수 있는 많은 설정이 있다.
    vulture
    Bandit는 Python 코드에서 일반적인 보안 문제를 찾는 데 사용되는 도구입니다.이를 위해, 모든 파일을 분석하여 AST를 구축하고, 적합한 플러그인을 AST 노드로 실행합니다.모든 문서의 안전 문제에 대한 정적 분석이 완료되면 보고서를 생성합니다.하드코딩 암호, 잘못된 pickle 정렬화/반정렬화, 셸 주입, SQL 주입을 찾을 수 있습니다.
    Bandit
    정적 코드 분석을 자동화할 수 있습니다. 이것은 고품질 코드를 만드는 문화를 개발하는 데 도움을 줄 수 있습니다.자동화 정적 코드 분석은 많은 시간을 절약할 수 있다.그것은 감지할 수 없는 문제를 식별하는 데 도움이 된다.
    특징 및 기능
    대부분의 자동 정적 코드 분석 도구는 다음과 같은 기능을 제공합니다.
  • 다중 프로그래밍 언어 지원
  • 다양한 보안 및 업계 표준 라이브러리
  • 코드 표준화
  • 보고 및 분석 계기판
  • Github 및 Jenkins
  • 를 비롯한 타사 통합 기능 제공
    자동 정적 분석과 코드 심사 도구의 완벽한 예는 Automated Static Code Analysis이다.너는 개원 항목에서 그것을 무료로 사용할 수 있다.
    DeepSource

    좋은 웹페이지 즐겨찾기