비컴파일 C/C++ 코드 분석을 위한 다중뷰 그래프 생성 도구 ATLAS
초록
ATLAS는 빌드 환경이 없어도 C/C++ 소스의 AST·CFG·DFG를 자동으로 추출·정렬해 JSON·DOT·PNG 형태로 제공하는 파이썬 기반 CLI이다. 인터프로시저형, 타입 인식 분석과 변수 병합·노드 블랙리스트와 같은 그래프 최적화를 통해 CFG 96.8%, DFG 91.38%의 성공률을 달성했으며, LLM 기반 테스트 생성 시 라인·브랜치 커버리지를 각각 34.71%·32.66% 향상시켰다.
상세 분석
ATLAS는 기존 정적 분석 도구가 요구하는 완전한 빌드 환경을 우회하고, 소스 수준에서 구조적 정보를 보존한다는 점에서 의미가 크다. 먼저 전처리·파싱 단계에서 Tree‑sitter 기반 CST를 얻고, 매크로·전처리 지시문을 정규화한 뒤 전역 심볼 테이블을 구축한다. 이 테이블은 스코프·타입·선언‑사용 관계를 모두 포함해 인터프로시저 분석의 토대가 된다.
AST 생성 시 비문법적 토큰을 제거하고, 변수 병합 옵션을 통해 동일 변수 식별자를 하나의 노드로 압축한다. 노드 블랙리스트는 사용자가 의미 없는 구문(예: modifier)과 그 하위 트리를 제외하도록 허용해 그래프 차원을 크게 줄인다. 이러한 전처리는 후속 CFG·DFG 생성 시 노드 정합성을 유지하는 데 핵심적이다.
CFG 드라이버는 각 소스 문장을 노드로, 제어 흐름 전이를 엣지로 매핑한다. 함수 호출은 호출 지점에서 정의 위치로 연결되며, 함수 포인터에 대해서는 가능한 모든 타깃을 브랜칭 엣지로 표현한다. 재귀 호출도 자체 루프 엣지로 모델링해 전역적인 실행 경로를 하나의 연결 그래프에 포함한다. 이는 기존 툴이 함수 단위로 분리해 제공하던 그래프와 달리, 전체 프로그램 수준에서 경로 탐색이 가능하도록 만든다.
DFG는 Reaching Definition Analysis(RDA)를 활용해 변수 정의·사용·수정 관계를 추적한다. 인터프로시저 RDA는 포인터 역참조와 레퍼런스 전달을 타입‑aware하게 처리해, 예를 들어 int &a와 같은 레퍼런스 파라미터를 실제 변수와 연결한다. 클래스 멤버 변수는 생성자에서 초기화된 뒤 메서드 내 사용까지 일관된 흐름으로 연결돼 C++ 특유의 객체 상태 변화를 정확히 포착한다.
세 개의 뷰(AST·CFG·DFG)를 동일한 노드 ID로 정렬해 다중뷰 그래프를 구성한다. 엣지 타입별 메타데이터를 부여해 학습 모델이 구문, 제어, 데이터 흐름을 구분해 학습하도록 설계했으며, 사용자 정의 병합·블랙리스트 옵션을 다중뷰 전체에 일관되게 적용한다.
평가에서는 TheAlgorithms 데이터셋(406 C·360 C++)에 대해 CFG·DFG 생성 성공률이 각각 96.8%·91.38%에 달했으며, 실패 원인은 주로 goto, 멀티스레드, 복잡한 포인터 연산 등 정적 해석이 어려운 C/C++ 특수 구문이었다. DeepSeek V3.2와 연계한 테스트 자동 생성 실험에서, ATLAS가 제공한 문장‑레벨 CFG를 포함했을 때 라인 커버지는 평균 34.71%, 브랜치 커버지는 32.66% 상승했으며, KLEE와 동등하거나 더 나은 커버리지를 기록했다. 실행 시간은 평균 6.9초, 메모리 사용량은 135 MB 수준으로, 프로그램 규모가 증가해도 다항식 성장 형태를 보여 실용적인 확장성을 입증했다.
전반적으로 ATLAS는 비컴파일 C/C++ 코드에 대한 고품질 그래프 데이터를 자동으로 생성함으로써, ML4SE 연구에서 요구되는 대규모, 다중뷰 학습용 데이터셋을 손쉽게 구축할 수 있게 한다. 향후 작업으로는 C++ 템플릿·컨셉, 자동 메모리 안전 분석, 그리고 동시성 모델링을 추가해 그래프 표현의 완전성을 더욱 높일 계획이다.
댓글 및 학술 토론
Loading comments...
의견 남기기