← Back to Problem Bank

1. 문제 (Problem)

Points-to analysis는 프로그램의 포인터 변수가 런타임에 어떤 객체를 가리킬 수 있는지를 정적으로 근사하는 기본 프로그램 분석 기법이다. 특히 context-sensitivity — 동일 메서드에 대해 서로 다른 호출 문맥을 구분하여 분석하는 기법 — 는 분석의 정밀도와 확장성에 가장 큰 영향을 미치는 단일 요인이다.

Context tunneling [Jeon, Jeong, Oh, OOPSLA 2018]은 기존의 k-limited context-sensitive analysis가 모든 호출 지점에서 무조건적으로 context를 갱신하여 중요한 context element를 덜 중요한 것으로 덮어쓰는 문제를 해결하는 기법이다. Java points-to analysis에서 1-context-sensitive + tunneling이 2-context-sensitive를 네 가지 flavor 모두에서 outperform하는 것으로 입증되었다.

그러나 context tunneling은 Java 전용으로 설계·평가되었으며, Python에 대한 연구는 전무하다.

Python의 언어적 특성과 분석 난제

  1. 동적 타이핑(Dynamic Typing): Python은 변수에 타입이 없고 런타임에 임의의 객체를 할당할 수 있다. Java에서는 정적 타입 정보가 points-to analysis의 강력한 필터 역할을 하지만, Python에서는 이 필터가 부재하여 points-to set이 훨씬 크고 분석이 본질적으로 더 어렵다.
  2. First-class 함수와 고차 함수: Python에서 함수는 first-class 객체이며, map, filter, sorted(key=...), decorator 등 고차 함수 패턴이 지배적이다.
  3. Duck typing과 동적 디스패치: Python의 메서드 해석은 MRO(Method Resolution Order)를 따르며, __getattr__, __getattribute__, descriptor protocol 등 동적 메커니즘이 호출 대상을 결정한다.
  4. Decorator, 클래스 메타프로그래밍: @property, @staticmethod, @classmethod, 사용자 정의 decorator 등은 함수를 감싸는(wrapper) 패턴을 생성한다. 이 wrapper chain에서 context가 빠르게 소진된다.
  5. Generator, async/await, comprehension: Python 고유의 제어 흐름을 생성한다.
  6. 모듈 시스템과 import 메커니즘: Python의 import는 런타임에 모듈을 로드하고 실행하는 동적 연산이다.
  7. 내장 함수와 C 확장: len(), print(), sorted() 등 built-in 함수와 NumPy, Pandas 등의 C 확장 모듈은 정적 분석이 내부를 볼 수 없는 opaque 호출이다.

기존 Python 정적 분석의 한계

연구 공백

Context tunneling은 Java에서 k-context-sensitive analysis의 정밀도와 확장성을 동시에 크게 향상시켰다. Python은 동적 타이핑으로 인해 context-sensitivity가 더욱 중요하지만, (a) Python용 체계적 k-context-sensitive points-to analysis 프레임워크가 부재하고, (b) Python의 고유 언어 특성에 맞는 context tunneling 설계가 연구되지 않았으며, (c) Python 코드베이스에서 tunneling heuristic을 학습하기 위한 atomic feature와 data-driven 알고리즘이 개발되지 않았다.

2. 목표 (Goal)

Context tunneling을 Python points-to analysis에 확장하여, Python의 고유 언어 특성에 맞는 context tunneling 프레임워크를 설계·구현·평가한다.