Skip to main content
QUICK REVIEW

[논문 리뷰] SourcererCC and SourcererCC-I: Tools to Detect Clones in Batch mode and During Software Development

Vaibhav Saini, Hitesh Sajnani|arXiv (Cornell University)|2016. 03. 05.
Software Engineering Research참고 문헌 24인용 수 24
한 줄 요약

SourcererCC는 표준 워크스테이션에서 대규모 코드베이스에서 유형 1–3 클론을 효율적으로 탐지하기 위해 최적화된 역인덱스와 토큰 순서 히ュ리스틱을 사용하는 확장성 있고 토큰 기반의 클론 탐지 도구이다. SourcererCC-I는 소프트웨어 개발 중 실시간으로 증분 방식으로 클론 탐지를 가능하게 하는 Eclipse 플러그인으로, 분산 인fra구조가 필요 없이 높은 성능과 정확도를 달성한다.

ABSTRACT

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가 만들고, 인간 에디터가 검토했습니다.