[논문 리뷰] SourcererCC and SourcererCC-I: Tools to Detect Clones in Batch mode and During Software Development
SourcererCC는 표준 워크스테이션에서 대규모 코드베이스에서 유형 1–3 클론을 효율적으로 탐지하기 위해 최적화된 역인덱스와 토큰 순서 히ュ리스틱을 사용하는 확장성 있고 토큰 기반의 클론 탐지 도구이다. SourcererCC-I는 소프트웨어 개발 중 실시간으로 증분 방식으로 클론 탐지를 가능하게 하는 Eclipse 플러그인으로, 분산 인fra구조가 필요 없이 높은 성능과 정확도를 달성한다.
Given the availability of large source-code repositories, there has been a large number of applications for large-scale clone detection. Unfortunately, despite a decade of active research, there is a marked lack in clone detectors that scale to big software systems or large repositories, specifically for detecting near-miss (Type 3) clones where significant editing activities may take place in the cloned code. This paper demonstrates: (i) SourcererCC, a token-based clone detector that targets the first three clone types, and exploits an index to achieve scalability to large inter-project repositories using a standard workstation. It uses an optimized inverted-index to quickly query the potential clones of a given code block. Filtering heuristics based on token ordering are used to significantly reduce the size of the index, the number of code-block comparisons needed to detect the clones, as well as the number of required token-comparisons needed to judge a potential clone, and (ii) SourcererCC-I, an Eclipse plug-in, that uses SourcererCC's core engine to identify and navigate clones (both inter and intra project) in real-time during software development. In our experiments, comparing SourcererCC with the state-of-the-art tools, we found that it is the only clone detection tool to successfully scale to 250 MLOC on a standard workstation with 12 GB RAM and efficiently detect the first three types of clones (precision 86% and recall 86-100%). Link to the demo: https://youtu.be/l7F_9Qp-ks4
연구 동기 및 목표
- 대규모 소프트웨어 시스템에서 근접한 오류(유형 3) 클론을 지원하는 확장성 있고 정확한 클론 탐지기가 부족한 문제를 해결한다.
- 분산 컴퓨팅이 필요 없이 배치 모드와 활성 소프트웨어 개발 중 모두 효율적인 클론 탐지를 가능하게 한다.
- 최소한의 자원 사용으로 다중 프로그래밍 언어 기반의 프로젝트 간 및 내부 코드베이스에서 작동하는 프로그래밍 언어에 관계없는 솔루션을 제공한다.
- IDE에서 실시간 클론 탐지를 지원하여 개발자가 코드 작성 중에 보다 유지보수 용이성을 높이고 중복 위험을 줄일 수 있도록 돕는다.
- 표준 워크스테이션에서만 사용하여도 대규모 리포지터리에서 유형 1–3 클론에 대해 높은 정밀도와 재현율을 유지를 하면서 성능을 유지는 한다.
제안 방법
- 코드 블록당 일부 토큰만 인덱싱하는 부분 역인덱스를 Sub-block Overlap Filtering 히ュ리스틱을 사용해 구성하여 인덱스 크기와 쿼리 비용을 감소시킨다.
- 토큰 순서를 이용해 유사도 점수의 동적 상한선 및 하한선을 계산하는 Token Position Filtering을 적용하여 후보 클론을 조기에 기각하거나 수락할 수 있도록 한다.
- AST 파싱이 필요 없이 언어 인식 토크나이저(현재 Java, C, C#에 대해)를 사용하는 토큰 기반 접근 방식을 적용하여 여러 프로그래밍 언어를 지원한다.
- SourcererCC-I는 개발 중 실시간 클론 탐지를 가능하게 하기 위해 핵심 SourcererCC 엔진을 Eclipse 플러그인으로 통합한다.
- 증분 인덱스 업데이트를 지원하여 전체 재처리 없이도 코드 변경 후 빠른 재인덱싱이 가능하도록 한다.
- 프로젝트 및 파일 기반으로 클론을 계층적으로 그룹화하여 IDE 내에서 직관적인 탐색을 가능하게 한다.
실험 결과
연구 질문
- RQ1표준 워크스테이션에서 250MLOC까지 확장성 있는 성능을 보장하면서도 유형 3(근접 오류) 클론을 지원하는 토큰 기반 클론 탐지기가 가능한가?
- RQ2토큰 순서 기반 필터링 히ュ리스틱이 재현율을 훼손하지 않으면서도 비교가 필요한 코드 블록 수와 인덱스 크기를 크게 줄일 수 있는가?
- RQ3성능 저하 또는 개발 워크플로우 영향 없이 IDE에 실시간 클론 탐지를 효율적으로 통합할 수 있는가?
- RQ4분산 처리 없이도 기존 배치 도구에 비해 확장성과 사용성 면에서 뛰어난 비분산, 언어에 관계없는 도구가 존재할 수 있는가?
- RQ5단일 머신 배포로도 대규모 프로젝트 간 리포지터리에서 높은 정밀도와 재현율을 유지할 수 있는가?
주요 결과
- SourcererCC는 Deckard, CCFinder, NiCad, iClones 중에서 유일하게 표준 워크스테이션(12GB RAM)에서 2억 5천만 행의 코드(MLOC)까지 성공적으로 확장한 도구이다.
- SourcererCC는 첫 번째 세 가지 클론 유형에 대해 86%의 정밀도와 86–100%의 재현율을 달성하여 최신 기술 대비 정확도와 확장성 면에서 뛰어난 성능을 보였다.
- 필터링 히ュ리스틱은 비교가 필요한 코드 블록 수와 토큰 비교 수를 줄여 성능 향상에 기여했다.
- SourcererCC-I는 10만 행의 코드당 몇 밀리초 내로 인덱스 생성이 가능하여 실시간 클론 탐지 기능을 제공한다.
- 증분 인덱스 업데이트 메커니즘이 코드 변경 후 신속한 반응을 보장하여 지속적인 개발에 실용적이다.
- SourcererCC-I는 내부 프로젝트 및 프로젝트 간 클론 탐지를 모두 지원하며, Eclipse IDE 내에서 계층적이고 탐색 가능한 트리 구조로 결과를 제시한다.
더 나은 연구,지금 바로 시작하세요
연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.