C 프로젝트에서 추적 정보 자동 추출
초록
본 논문은 C# 소스코드에서 클래스, 메서드, 변수 등 핵심 요소 간의 의존관계를 자동으로 추출하여 트레이서빌리티 정보를 생성하는 방법을 제시한다. 이를 통해 유지보수 담당자는 시스템 구조와 변경 영향도를 빠르게 파악할 수 있어 유지보수 비용과 위험을 크게 감소시킬 수 있다.
상세 분석
이 연구는 소프트웨어 유지보수 단계에서 가장 큰 비용 부담 요인인 ‘시스템 이해 부족’ 문제를 해결하고자, 정적 분석 기반의 자동 트레이서빌리티 추출 기법을 설계하였다. 핵심 아이디어는 C# 컴파일러가 제공하는 파싱 엔진을 활용해 소스코드를 추상 구문 트리(AST) 형태로 변환한 뒤, AST 노드들을 탐색하면서 클래스 선언, 메서드 정의, 필드 선언, 인터페이스 구현, 상속 관계, 메서드 호출, 이벤트 연결 등 다양한 관계를 식별한다.
먼저, 프로젝트 전체를 대상으로 파일 시스템을 순회하며 *.cs 파일을 수집한다. 각 파일은 Roslyn(마이크로소프트의 .NET 컴파일러 플랫폼) API에 전달되어 구문 트리와 의미 체계(semantic model)를 동시에 생성한다. 구문 트리는 코드 구조를, 의미 체계는 타입 바인딩과 심볼 정보를 제공한다는 점에서 두 자료 구조를 병행 활용하는 것이 본 방법의 차별점이다.
다음 단계에서는 ‘관계 추출 규칙’을 정의한다. 예를 들어, 클래스 선언 노드에서 BaseList를 확인하면 상속·구현 관계를 도출하고, 메서드 선언 내부에서 InvocationExpression을 탐색하면 호출 관계를, PropertyDeclaration에서 Accessor를 분석하면 getter/setter 의존성을 파악한다. 또한, 이벤트 선언·구독 구문을 식별해 이벤트 흐름을 그래프에 포함시킨다. 이러한 규칙은 정규 표현식 기반이 아니라 AST 패턴 매칭을 이용해 구현되므로, 코드 포맷이나 주석 여부에 영향을 받지 않는다.
관계 추출 결과는 일종의 방향성 그래프 형태로 메모리 내에 저장된다. 노드는 소스 코드 심볼(클래스, 메서드, 필드 등)을, 엣지는 ‘소유’, ‘호출’, ‘상속’, ‘구현’, ‘사용’ 등 의미론적 라벨을 갖는다. 그래프는 XML 스키마에 맞춰 직렬화되며, 이는 기존의 요구사항 관리 도구나 문서화 시스템과 연동하기 쉽게 만든다. 또한, 그래프 기반 질의 인터페이스를 제공해 “특정 메서드가 영향을 미치는 모든 클래스” 혹은 “변경될 가능성이 높은 모듈” 등을 즉시 추출할 수 있다.
실험에서는 3개의 오픈소스 C# 프로젝트(ASP.NET MVC 샘플, Unity 게임 엔진 플러그인, 기업 내부 ERP 모듈)를 대상으로 정확도와 성능을 평가하였다. 정밀도와 재현율 모두 92% 이상을 기록했으며, 대형 프로젝트(30,000 LOC)에서도 전체 분석 시간을 2분 이내로 단축했다. 이는 기존 수작업 기반 트레이서빌리티 매핑에 비해 10배 이상 빠른 속도이며, 유지보수 담당자가 코드 변경 전 영향을 시각적으로 검증할 수 있게 해준다.
마지막으로, 논문은 이 접근법의 확장 가능성을 논의한다. 현재는 C#에 특화되었지만, Roslyn과 유사한 파싱 프레임워크가 존재하는 다른 언어(Java의 Eclipse JDT, Python의 ast 모듈 등)에도 동일한 패턴 매칭 로직을 적용할 수 있다. 또한, 동적 분석 결과와 결합해 런타임 호출 정보를 보강하거나, 머신러닝 기반 위험도 예측 모델에 그래프 특성을 입력값으로 활용하는 미래 연구 방향을 제시한다.
댓글 및 학술 토론
Loading comments...
의견 남기기