Skip to main content
QUICK REVIEW

[論文レビュー] Code Clone Matching: A Practical and Effective Approach to Find Code Snippets

Katsuro Inoue, Yuya Miyamoto|arXiv (Cornell University)|Mar 12, 2020
Software Engineering Research参考文献 37被引用数 4
ひとこと要約

本稿では、トークンベースのクローン検出とメタパターンを組み合わせることで、柔軟で言語に適応したコードスニペット検索を可能にする実用的な手法、Code Clone Matching (CC matching) を提案する。この手法はccgrep—grepに類似したツール—を駆動しており、タイプ1、2、および一部のタイプ3クローンを高精度に効率的に検出する。従来のgrepや既存のクローン検出ツールに比べ、使いやすさと正確性の両面で優れている。

ABSTRACT

Finding the same or similar code snippets in source code is one of fundamental activities in software maintenance. Text-based pattern matching tools such as grep is frequently used for such purpose, but making proper queries for the expected result is not easy. Code clone detectors could be used but their features and result are generally excessive. In this paper, we propose Code Clone matching (CC matching for short) that employs a combination of token-based clone detection and meta-patterns enhanced with meta-tokens. The user simply gives a query code snippet possibly with a few meta-tokens and then gets the resulting snippets, forming type 1, 2, or 3 code clone pairs between the query and result. By using a code snippet with meta-tokens as the query, the resulting matches are well controlled by the users. CC matching has been implemented as a practical and efficient tool named ccgrep, with grep-like user interface. The evaluation shows that ccgrep~ is a very effective to find various kinds of code snippets.

研究の動機と目的

  • 複数行にわたるコードスニペットを検索する際、grepの限界、すなわち空白やコメントなどの構文要素を無視することを補うため。
  • 完全なクローン検出ツールが生じる過剰で制御不能な出力、つまり関連性のないクローンが多すぎる問題を克服するため。
  • 開発者がメタトークン(例:$var)を用いて特定のコードパターンを検索することで、マッチ範囲を正確に制御できるようにするため。
  • タイプ1、2、および部分的なタイプ3クローンマッチングをサポートする実用的で効率的かつ使いやすいツールを開発するため。
  • 初心者および熟練の開発者にとって、正確性、パフォーマンス、使いやすさのバランスを取ったソリューションを提供するため。

提案手法

  • 本手法は、空白やコメントを無視することで、構文的マッチングを可能にするトークンベースのクローン検出を用いて、ソースコードを正規化する。
  • メタパターンは、変数名、文、または式を表すためにメタトークン(例:$var、$stmt)を用いて導入され、柔軟なクエリ定式化を可能にする。
  • メタトークンを強化したクエリスニペットをコードベースと照合することで、タイプ1、2、および選択されたタイプ3クローンを取得する。
  • 使いやすさと既存のワークフローへの統合を確保するため、ccgrepにはgrepに類似したコマンドラインインターフェースを実装する。
  • トークン化とパターンマッチングを活用することで、構造的・構文的類似性を保持したまま、クローンを効率的に特定する。
  • ツールはトークン列を用いてコードをインデックス化し、メタパターンマッチングを適用することで、誤検出を低減し、関連性を向上させる。

実験結果

リサーチクエスチョン

  • RQ1コードクローン検出に基づくパターンマッチングシステムは、従来のgrepに比べ、コードスニペット検索における正確性と使いやすさを向上させることができるか?
  • RQ2メタトークンの使用は、コードクローンマッチの範囲と特異性を制御するためにどの程度有効か?
  • RQ3本システムは、grepと同等のパフォーマンスを維持しながら、タイプ1、2、およびタイプ3クローンを効率的に取得できるか?
  • RQ4ccgrepは、CBCD、NCDSearch、およびSiameseといった既存のツールと比べて、速度、正確性、使いやすさの面でどの程度優れているか?
  • RQ5メタパターンは、特定の制御変数を持つforループや埋め込まれた文を含むような複雑なコードパターンをどの程度正確に表現できるか?

主な発見

  • ccgrepは、メタパターンを用いてタイプ1、2、およびタイプ3の代表的サブセットのクローンを効果的に検出でき、正確で柔軟な検索を可能にした。
  • コメント、空白、構文的ノイズを含む関連性のないマッチをフィルタリングすることで、grepよりも高い正確性を達成した。
  • ccgrepのパフォーマンスはgrepより遅いが、CBCD や NCDSearch などの他のクローン検出ツールよりもはるかに速く、インタラクティブ利用に実用的である。
  • 評価により、メタパターンが、特定の制御変数を持つforループやreturn文といった複雑なクエリを、誤検出なしに表現可能であることが確認された。
  • ccgrepは、特に一時的でインタラクティブなコード検索タスクにおいて、既存のツールに比べ使いやすさと応答時間の面で優れている。
  • 本ツールは、大規模なコードベースにおいて類似するコードパターンを効果的に特定でき、バグ検出、リファクタリング、コード再利用分析などのタスクを支援する。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。