자바 코드 복제 탐지를 위한 StoneDetector: 지배자 트리 기반 다목적 솔루션
초록
StoneDetector는 자바 소스와 바이트코드에서 코드 클론을 찾기 위해 지배자 트리 경로를 문자열로 인코딩하고, 다양한 문자열 거리와 해시 기법을 활용해 텍스트 비교를 수행하는 전통적인 복제 탐지 도구이다. 실험 결과, 기존 도구와 비교해 정확도·재현율·확장성 모두에서 경쟁력을 보이며 특히 구문 차이가 큰 Type 3·4 클론을 높은 정밀도로 탐지한다.
상세 분석
StoneDetector는 코드 복제 탐지 분야에서 흔히 사용되는 토큰 시퀀스, 추상 구문 트리(AST) 기반 방법의 한계를 보완하기 위해 지배자 트리(dominator tree)를 핵심 분석 대상으로 선택한다. 지배자 트리는 각 기본 블록이 프로그램 흐름에서 반드시 통과해야 하는 노드를 나타내어, 제어 흐름상의 의미적 관계를 보다 명확히 드러낸다. 이 구조를 이용해 함수 단위로 루트에서 리프까지의 모든 경로를 추출하고, 각 경로를 식별자·리터럴 추상화 후 문자열로 변환한다. 변환된 문자열은 Levenshtein, Needleman‑Wunsch, Hamming, LCS 등 다양한 문자열 거리 메트릭과 LSH( locality‑sensitive hashing) 기반 해시와 결합해 비교된다.
핵심 기여는 다음과 같다. 첫째, 지배자 트리 경로를 텍스트화함으로써 구문적 변형(변수명 교체, 리터럴 변경, 코드 재배열 등)에도 강인한 매칭을 가능하게 한다. 둘째, 여러 문자열 거리와 해시 알고리즘을 파라미터화하여 사용자가 정확도와 성능 사이의 트레이드오프를 조정할 수 있다. 예를 들어, LCS 기반 메트릭은 재현율을 높이는 반면, Hamming 거리와 같은 단순 메트릭은 속도는 빠르지만 큰 구문 차이를 가진 클론 탐지에는 한계가 있다. 셋째, StoneDetector는 자바 바이트코드(Jimple/Soot)까지 확장되어, 소스가 없거나 난독화된 경우에도 클론을 탐지한다. 바이트코드 분석 시 스택·레지스터 기반 중간 표현을 사용해 동일한 지배자 트리 생성 로직을 적용한다.
평가에서는 BigCloneBench, Google Code Jam, Project CodeNet, GPTCloneBench 등 네 개 이상의 대규모 벤치마크를 활용했으며, NiCad, iClones, SourcererCC, DecKard, CCAligner, NIL, CloneWorks, Oreo 등 최신 복제 탐지기와 비교하였다. 결과는 StoneDetector가 Type 1·2 클론에서는 기존 도구와 동등한 성능을 보이며, 특히 Type 3·4 클론(큰 구문 차이·큰 간격 클론)에서는 재현율·정밀도 모두에서 우수함을 입증한다. 또한 1억 라인 규모의 코드베이스에서도 메모리·시간 효율성을 유지해 실무 적용 가능성을 확인했다.
구성 파라미터 실험에서는 최소 클론 길이, 유사도 임계값, 해시 비트 수, 문자열 메트릭 선택 등이 탐지 결과에 미치는 영향을 정량화하였다. 최적 구성으로는 LCS+LSH 조합, 최소 클론 길이 10 LOC, 유사도 임계값 0.3~0.4가 대부분의 벤치마크에서 높은 F1 점수를 제공한다는 결론을 도출했다.
전반적으로 StoneDetector는 지배자 트리 기반 텍스트 매칭이라는 새로운 관점을 제시함으로써, 기존 AST·토큰 기반 방법이 놓치기 쉬운 구조적·의미적 유사성을 포착한다. 이는 코드 유지보수, 보안 취약점 전파 분석, 리팩터링 지원 등 다양한 소프트웨어 엔지니어링 작업에 실질적인 가치를 제공한다.
댓글 및 학술 토론
Loading comments...
의견 남기기