[Python] Python Tool(보안, 코드 품질, 스타일, 테스트)

2024. 9. 11. 19:12Python

코드 스타일 및 품질 검사 Tool

Flake8

  • 기능: PEP 8 코딩 스타일 준수 여부를 검사하고, 일부 코드 품질 문제(예: 사용되지 않는 변수)를 발견합니다.
  • 주요 목적: 코드 스타일 및 기본적인 코드 품질 유지.
  • 설치 및 사용: https://flake8.pycqa.org/en/latest/

flake8 테스트

Pylint

  • 기능: 더 심층적인 코드 분석을 수행하며, 코딩 표준, 코드 품질, 구조적 문제 등을 검사합니다. 또한, 사용자 정의 플러그인으로 확장할 수 있습니다.
  • 주요 목적: 코드 품질, 코드 표준 준수, 잠재적인 버그 발견.
  • 설치 및 사용: https://pylint.readthedocs.io/en/latest/user_guide/usage/run.html

pylint 테스트

Black

  • 기능: 코드 포매터로, 코드 스타일을 자동으로 정리합니다.
  • 주요 목적: 코드 스타일 일관성 유지.
    • PEP8을 완벽 준수하기 때문에 코드 가독성이 낮아질 수 있음.
  • 설치 및 사용: https://pypi.org/project/black/

black 테스트

Ruff

  • 기능: 코드 포매터로, 코드 스타일을 자동으로 정리합니다.
  • 주요 목적: 코드 스타일 일관성 유지.
    • Flake8, Black을 섞어 놓은 듯한 느낌.
    • 최근에 많은 프로젝트에서 사용 중

코드 스타일 및 품질 검사 Tool 비교

도구 목적 주요 기능 PEP 8 준수 자동 수정 기능 확장성 사용 난이도
Pylint 코드 스타일 및 품질 검사, 코드 논리 오류 탐지 코드 스타일 검사 (PEP 8), 논리적 오류, 사용되지 않는 변수 및 함수, 불필요한 import 등 다양한 코드 분석 부분적 없음 높음 중간
Flake8 코드 스타일 검사 및 복잡도 분석 코드 스타일 검사 (PEP 8), 코드 복잡도 검사 (McCabe), 불필요한 코드, 불필요한 공백 및 라인 체크 강력하게 준수 없음 플러그인 기반 쉬움
Black 코드 포맷팅 자동화 코드 스타일을 자동으로 포맷팅하여 일관성을 유지 (PEP 8 기반) 완벽 준수 있음 없음 매우 쉬움

 


보안 검사 Tool

Safety

Bandit

# FILE: bandit.yaml
exclude_dirs: ['tests', ]
skips: [
 'B101', # assert used
 'B110', # except_pass
 'B308', # mark_safe
 'B703', # django_mark_safe
 'B112' # except_continue
]
  • 방법(2.command 실행)
bandit -c ./.bandit.yaml -r . -f 'txt' -o ./results_confidence.txt  --confidence-level high
bandit -c ./.bandit.yaml -r . -f 'txt' -o ./results_severity.txt  --severity-level high

bandit 테스트

 


정적 분석 Tool

mypy

  • 기능: 정적 타입 검사 도구로, 코드의 타입 힌트를 검사합니다.
  • 주요 목적: 타입 안전성을 보장하고, 코드에서 타입 관련 오류를 사전에 발견.
  • 설치 및 사용: https://github.com/python/mypy

 


코드 복잡도 및 중복 검사 Tool

Radon

  • 기능: 코드 복잡도(Cyclomatic Complexity), 유지보수성(Maintainability Index) 및 중복 코드(Duplicate Code)를 분석합니다.
  • 주요 목적: 코드 복잡성을 낮추고, 유지보수성을 높임.
  • 설치 및 사용: https://pypi.org/project/radon/

Xenon

  • 기능: Radon과 유사하지만, CI/CD 파이프라인에서 사용할 수 있는 더 높은 수준의 코드 복잡도 관리 도구입니다.
  • 주요 목적: CI/CD 파이프라인에서 코드 복잡성 기준을 자동으로 관리.
  • 설치 및 사용: https://pypi.org/project/xenon/

 


Test Tool

pytest

  • 목적: pytest는 주로 Python 프로젝트에서 테스트를 작성하고 실행하는 데 사용됩니다. 다양한 유형의 테스트를 쉽게 작성할 수 있도록 지원하며, 테스트 기능 확장성도 뛰어납니다.
  • 주요 기능:
    • 간결한 구문을 통한 테스트 작성 지원.
    • 다양한 유형의 테스트 (단위 테스트, 통합 테스트, 기능 테스트 등) 실행.
    • 플러그인 시스템을 통한 확장 가능 (예: pytest-django, pytest-cov).
  • 확장성: pytest는 플러그인 시스템을 통해 쉽게 기능을 확장할 수 있으며, 여러 테스트 전략을 적용할 수 있습니다.
  • 주요 사용 사례: 테스트 함수 작성, 실패 시 상세한 디버깅 정보 제공, 복잡한 테스트 시나리오 실행.
  • 설치 및 사용: https://docs.pytest.org/en/stable/getting-started.html

tox

  • 목적: tox는 주로 멀티 환경에서 테스트 자동화 및 관리를 담당합니다. 특히, 프로젝트가 여러 Python 버전 및 의존성 조합에서 정상적으로 작동하는지 확인할 때 유용합니다.
  • 주요 기능:
    • 다양한 Python 버전과 의존성을 가진 가상 환경에서 테스트 실행.
    • CI/CD 파이프라인에 쉽게 통합하여 자동화된 테스트 실행 가능.
    • 의존성 설치 및 패키지 배포 전 테스트 검증.
  • 확장성: tox는 다중 Python 버전 지원, 테스트 명령어 자동 실행 등 매우 확장 가능하며, 설정 파일(tox.ini)을 통해 환경을 정의할 수 있습니다.
  • 주요 사용 사례: 다양한 Python 버전 및 의존성 조합에서 코드 호환성 테스트, 릴리즈 전 배포 전용 환경에서의 테스트 실행.
  • 설치 및 사용:https://tox.wiki/en/latest/user_guide.html#basic-example

테스트 Tool 비교

도구 목적 주요 기능 사용 범위 설정 난이도 확장성 주요 사용 사례
pytest 테스트 프레임워크 단위 테스트, 통합 테스트, 기능 테스트, 예외 처리 테스트 등 다양한 테스트 유형 지원 테스트 코드 작성 및 실행 쉬움 플러그인 시스템 유닛 테스트, 통합 테스트, 기능 테스트 관리
tox 테스트 환경 관리 및 멀티 환경 테스트 자동화 다양한 Python 버전과 의존성 환경에서 테스트 실행, 가상 환경에서의 테스트 관리 및 배포 전 테스트 자동화 멀티 환경에서의 테스트 실행 중간 강력한 확장성 다양한 Python 버전 및 의존성 조합에서의 테스트 실행

'Python' 카테고리의 다른 글

Pydantic 효과적인 사용 방법  (0) 2025.01.10
Python Formatter(Black) 설정 및 테스트  (1) 2024.11.04
pypi 패키지 등록 방법  (0) 2024.08.06
Python 휴일 찾기 2  (1) 2024.04.26
Django vs Flask  (0) 2024.04.01