Pyan3
Pyan3는 파이썬(Python) 소스 코드의 정적 분석(Static Analysis)을 통해 함수와 클래스 메서드 간의 호출 관계도(Call Graph)를 추적하고 시각화 데이터로 변환하는 오픈소스 명령줄 도구이다. 해당 도구는 과거 Python 2 환경에서 구동되던 에드먼드 호너(Edmund Horner)의 원본 pyan 프로젝트를 Python 3 문법 및 생태계에 맞춰 포크(Fork) 및 현대화한 버전이다.
주요 특징은 다음과 같다.
- 추상 구문 트리 (AST) 기반 정적 분석: 코드를 실제로 작동시키지 않고, 파이썬 내장 라이브러리인
ast기반의 구문 분석기를 통해 소스 코드를 스캔한다. 이를 통해 프로그램 실행 과정 없이 함수 간의 논리적인 호출 흐름을 추출한다. - 함수 및 메서드 레벨의 미시적 추적: 모듈(파일)이나 패키지 단위의 거시적인 의존성만 분석하는 일반적인 도구들과 달리, 개별 파일 내에 존재하는 함수, 클래스, 그리고 메서드 단위의 호출 그래프를 매우 세밀하게 생성한다.
- 다양한 그래프 포맷 지원: 추출된 모델을 Graphviz 동작을 위한 DOT 포맷, yEd 그래프 에디터를 위한 GraphML 포맷으로 구조화하여 출력한다. 또한 브라우저에서 바로 열람할 수 있는 HTML(Vis.js 기반) 및 SVG 파일 형태의 컴파일도 지원한다.
- 동적 분석 플러그인 대비 안전성 검증: 코드베이스(Codebase) 전체를 분석할 수 있으므로, 테스트 커버리지 도달 여부나 코너 케이스(Corner case) 발생 유무와 관계없이 전체 프로젝트의 뼈대를 파악하는 작업에 유리하다.
파이썬 환경에서 소스 코드의 아키텍처 및 의존성 구조를 파악하는 목적으로 사용되는 다른 분석 도구들과의 비교 데이터는 다음과 같다.
| 특징 | Pyan3 | PyCallGraph | pydeps |
|---|---|---|---|
| 핵심 분석 방식 | 정적 분석 (AST 파싱) | 동적 분석 (sys.settrace 런타임 추적) | 정적 분석 (모듈 임포트 AST 스캔) |
| 타겟 분석 심도 깊이 | 함수 단위 트래킹 | 런타임에서 실행된 개별 함수 내역 | 모듈 시스템(파일) 및 패키지 단위 단위 |
| 프로그램 실행 요건 | 불필요 | 필수 요구 사항 (실제로 코드가 구동되어야 함) | 불필요 |
| 동적/런타임 바인딩 탐지 | 로직 탐지 불가 및 누락 가능성 존재 (정적 분석의 한계) | 완벽하게 탐지 가능 (실행된 분기에 한함) | 해당 없음 (함수 내부를 확인하지 않음) |
| 활용 우선 목적 | 레거시 코드의 함수 간 관계망 시각화 리팩토링 | 실제 실행 시간 병목 지점 및 의도치 않은 호출 조사 | 모듈 및 패키지 아키텍처 구조의 거시적 파악 |
출처 데이터:
- Python Package Index (PyPI). “pyan3: Offline call graph generator for Python 3.” (https://pypi.org/project/pyan3/)
- Pyan3 Official GitHub Repository (maintained by Technologicat/Juha Jeronen). “pyan: Static analysis and call generation for Python 3.” (https://github.com/Technologicat/pyan)
- Python Documentation. “ast — Abstract Syntax Trees.” (https://docs.python.org/3/library/ast.html)