[論文レビュー] SourcererCC and SourcererCC-I: Tools to Detect Clones in Batch mode and During Software Development
SourcererCC は、最適化された逆インデックスとトークン順序ヒューリスティクスを用いて、標準のワークステーション上で大規模なコードベースにおけるタイプ1〜3のクローンを効率的に検出できるスケーラブルでトークンベースのクローン検出ツールである。SourcererCC-I は、ソフトウェア開発中にリアルタイムで増分的にクローン検出を可能にする Eclipse プラグインであり、分散インfrastrucure を必要とせず、高いパフォーマンスと正確性を達成する。
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)クローンをサポートするスケーラブルで正確なクローン検出ツールの不足に対処すること。
- 分散コンピューティングを必要とせず、バッチモードおよびアクティブなソフトウェア開発中に効率的なクローン検出を可能にすること。
- ASTパースを必要とせず、最小限のリソース使用で、言語に依存しないソリューションを提供し、プロジェクト間およびプロジェクト内コードベースに対応すること。
- IDEでリアルタイムのクローン検出を可能にし、開発者がコーディング中に支援を受けられ、保守性を向上させ、重複のリスクを低減すること。
- 標準のワークステーションでの実行を前提に、タイプ1〜3のクローンに対して高い正確性(精度と再現率)を維持しながら、大規模リポジトリでもパフォーマンスを発揮すること。
提案手法
- コードブロックごとにトークンの一部のみをインデックス化するための部分的逆インデックスを、サブブロックオーバーラップフィルターヒューリスティクスを用いて構築することで、インデックスサイズとクエリコストを削減する。
- トークン位置フィルタリングを採用し、トークンの順序を用いて類似度スコアの動的上限および下限を計算することで、候補クローンの早期拒否または受容を可能にする。
- 言語に適応したトークン化(現在は Java、C、C# に対応)を用いたトークンベースのアプローチを採用し、ASTパースを必要とせず、複数のプログラミング言語をサポートする。
- SourcererCC のコアエンジンを Eclipse プラグイン(SourcererCC-I)に統合し、開発中にリアルタイムのクローン検出を可能にする。
- インクリメンタルなインデックス更新をサポートし、コード変更後もフル再処理を伴わず、高速な再インデックス化を実現する。
- 検出されたクローンをプロジェクトおよびファイル単位で階層的にグループ化し、IDE内での直感的なナビゲーションを可能にする。
実験結果
リサーチクエスチョン
- RQ1標準のワークステーション上で 250MLOC までスケーラブルに拡張可能であり、かつタイプ3(ニアミス)クローンをサポートできるトークンベースのクローン検出ツールは実現可能か?
- RQ2トークン順序に基づくフィルターヒューリスティクスは、再現率に影響を与えることなく、必要なトークン比較回数およびインデックスサイズを著しく削減できるか?
- RQ3パフォーマンスや開発ワークフローに悪影響を与えることなく、IDE にリアルタイムのクローン検出を効率的に統合できるか?
- RQ4分散処理を必要としない、言語に依存しないツールが、既存のバッチツールに比べてスケーラビリティと使いやすさの両面で優れているか?
- RQ5単一マシン環境で、大規模なプロジェクト間リポジトリに対しても、高い精度と再現率を維持してクローン検出が可能か?
主な発見
- Deckard、CCFinder、NiCad、iClones の中で、SourcererCC のみが 12GB RAM の標準ワークステーション上で 2.5 億行(250MLOC)のコードベースにスケーリングに成功した。
- SourcererCC はタイプ1〜3のクローンに対して 86% の精度と 86〜100% の再現率を達成し、最新の最先端ツールを上回る正確性とスケーラビリティを実現した。
- フィルターヒューリスティクスにより、必要なコードブロック比較回数およびトークン比較回数が削減され、パフォーマンスが顕著に向上した。
- SourcererCC-I は、10万行あたり数ミリ秒の時間でインデックス作成が可能であり、リアルタイムのクローン検出を実現した。
- インクリメンタルなインデックス更新メカニズムにより、コード変更後の応答が高速で、継続的開発に実用的であることが保証された。
- SourcererCC-I はプロジェクト内およびプロジェクト間のクローン検出をサポートし、Eclipse IDE 内で階層的でナビゲーション可能なツリー構造で検出結果を提示する。
より良い研究を、今すぐ始めましょう
論文設計から論文執筆まで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。