Pyan3

Pyan3는 파이썬(Python) 소스 코드의 정적 분석(Static Analysis)을 통해 함수와 클래스 메서드 간의 호출 관계도(Call Graph)를 추적하고 시각화 데이터로 변환하는 오픈소스 명령줄 도구이다. 해당 도구는 과거 Python 2 환경에서 구동되던 에드먼드 호너(Edmund Horner)의 원본 pyan 프로젝트를 Python 3 문법 및 생태계에 맞춰 포크(Fork) 및 현대화한 버전이다.

주요 특징은 다음과 같다.

  1. 추상 구문 트리 (AST) 기반 정적 분석: 코드를 실제로 작동시키지 않고, 파이썬 내장 라이브러리인 ast 기반의 구문 분석기를 통해 소스 코드를 스캔한다. 이를 통해 프로그램 실행 과정 없이 함수 간의 논리적인 호출 흐름을 추출한다.
  2. 함수 및 메서드 레벨의 미시적 추적: 모듈(파일)이나 패키지 단위의 거시적인 의존성만 분석하는 일반적인 도구들과 달리, 개별 파일 내에 존재하는 함수, 클래스, 그리고 메서드 단위의 호출 그래프를 매우 세밀하게 생성한다.
  3. 다양한 그래프 포맷 지원: 추출된 모델을 Graphviz 동작을 위한 DOT 포맷, yEd 그래프 에디터를 위한 GraphML 포맷으로 구조화하여 출력한다. 또한 브라우저에서 바로 열람할 수 있는 HTML(Vis.js 기반) 및 SVG 파일 형태의 컴파일도 지원한다.
  4. 동적 분석 플러그인 대비 안전성 검증: 코드베이스(Codebase) 전체를 분석할 수 있으므로, 테스트 커버리지 도달 여부나 코너 케이스(Corner case) 발생 유무와 관계없이 전체 프로젝트의 뼈대를 파악하는 작업에 유리하다.

파이썬 환경에서 소스 코드의 아키텍처 및 의존성 구조를 파악하는 목적으로 사용되는 다른 분석 도구들과의 비교 데이터는 다음과 같다.

특징Pyan3PyCallGraphpydeps
핵심 분석 방식정적 분석 (AST 파싱)동적 분석 (sys.settrace 런타임 추적)정적 분석 (모듈 임포트 AST 스캔)
타겟 분석 심도 깊이함수 단위 트래킹런타임에서 실행된 개별 함수 내역모듈 시스템(파일) 및 패키지 단위 단위
프로그램 실행 요건불필요필수 요구 사항 (실제로 코드가 구동되어야 함)불필요
동적/런타임 바인딩 탐지로직 탐지 불가 및 누락 가능성 존재 (정적 분석의 한계)완벽하게 탐지 가능 (실행된 분기에 한함)해당 없음 (함수 내부를 확인하지 않음)
활용 우선 목적레거시 코드의 함수 간 관계망 시각화 리팩토링실제 실행 시간 병목 지점 및 의도치 않은 호출 조사모듈 및 패키지 아키텍처 구조의 거시적 파악

출처 데이터:

  1. Python Package Index (PyPI). “pyan3: Offline call graph generator for Python 3.” (https://pypi.org/project/pyan3/)
  2. Pyan3 Official GitHub Repository (maintained by Technologicat/Juha Jeronen). “pyan: Static analysis and call generation for Python 3.” (https://github.com/Technologicat/pyan)
  3. Python Documentation. “ast — Abstract Syntax Trees.” (https://docs.python.org/3/library/ast.html)

Entities