1English abstract

In this letter, we develop a code clone information retrieval tool for software maintenanceactivity. Then, we have applied the tool to the debug data collected from a certain software
project and evaluated the usefulness of it.

2

English keyword
Code Clone, Software maintenace

1

研究速報
ウェア保守を効率よく実施するためのコードクローン
ソフトウェア保守のための類似コード片検索ツール
泉田聡介†

植田 泰士†

神谷年洋††

井上克郎†（正員）楠本真二†（正員）

2. コードクローン検索ツール CCFinder
コードクローン検出ツール CCFinder は, 単一または複数のファイルのソースコード中から全てのコード

Code clone information retrieval tool for software maintenanceSousuke IZUMIDA† , Yasushi UEDA† ,Toshihiro KAMIYA†† , Nonmembers, Shinji KUSUMOTO† , andKatsuro INOUE† , Members†検索ツールについて述べる.

クローンを検出し, クローンの位置情報として出力する. CCFinder の持つ主な特徴は以下の通りである.

(1) ソースコードをトークン単位で直接比較するこ大阪大学 大学院情報科学研究科 コンピュータサイエンス専攻

Graduate School of Information Science and Technology, Osaka University†† 科学技術振興事業団 さきがけ研究 21とによりクローンを検出する.

(2) クローン検出アルゴリズムにサフィックス木を用いることで高速化を図っており, 数百万行規模のシPRESTO, Japan Science and Technology Corp.

ステムにも実用時間で解析可能である.

あらまし 本論文では, コードクローン検出ツールにあるテーブルの初期化文の繰返し等) は検出しない.

(3) 実用的に意味のないクローン (モジュールの先頭CCFinder で検出されたコードクローン情報に基づい(4) 複数のプログラミング言語へ対応している.て, ソフトウェア保守を効率よく実施するためのコー

3. コードクローン検索ツール

ドクローン検索ツールについて述べる.

3. 1 基 本 方 針

キーワード

コードクローン ソフトウェア保守

今回作成したコードクローン検出ツールは, デバッ

1. ま え が きグ時の利用と機能追加時の利用を想定している. 具体

近年, ソフトウェアシステムの大規模化, 複雑化に伴的には, 修正（あるいは, 機能追加）対象のコード片い, プログラムの保守・デバッグ作業に要するコストが特定された時に, そのコード片に対応するコードクが増加してきている. ソフトウェア保守を困難にしてローンを前もって検出しておき, それらについても修いる一つの要因としてコードクローンが指摘されてい正（あるいは, 機能追加）が必要であるかを検討する

る. コードクローンとは, ソースコード中に含まれる時の支援を行う.

同一または類似したコード片のことである [2]. それら検索ツールとしては, ユーザが入力したコード片には多くの場合, 既存システムに対する変更や拡張時に対して, そのコードクローンを含むファイルを検索し,おけるコピーとペーストによる安易な機能的再利用のユーザに対してわかりやすく提示する必要がある. ま際に発生する. もしあるコード片にバグが含まれていた, それらの処理を簡便に行えることも重要である.

た場合, そのコード片に対する全てのコードクローン3. 2 概について修正を行わなければならない. 大規模ソフト開発した検索ツールでは, まず, 入力として, ユーザウェアから効率よくコードクローンを検出する手法がが指定するコード片とコードクローン検出対象となる求められている.

要

ファイル名のリストを与える. その結果, 出力としてこれまで様々なコードクローン検出法が提案されている [1] [2]. 我々もトークン単位でのコードクローンユーザが指定したコード片のクローンを含むファイルのリストを表示する.

を検出するツール (CCFinder [4]) を開発してきてお検索ツールの画面例を図 1 に示す. ユーザが指定すり, 様々なソフトウェアに対する適用を行ってきているコード片をＢに入力する. エディタ等からコピーとる. これらの適用の中で, CCFinder は大規模なソーペーストによって入力することもできる. また, コースコードも, 細粒度でのコードクローン解析を非常にドクローン検出対象となるファイル名のリストをＡに高速に行うことが可能であると評価されてきた. しか入力する. このリストの作成は, Ｃに提示されている

し, CCFinder の出力結果は, テキスト情報であり, 実ディレクトリ構造から検索対象ファイルを選ぶ操作に際に保守を実施する場合には, コードクローンの位置よっても行える.

を直感的に把握することが困難であった.

図 1 の手前のウィンドウに実行結果を示す. ユーザ

本論文では, コードクローン検出ツール CCFinderが指定したコード片のクローンを含むファイルのリスで検出されたコードクローン情報に基づいて, ソフトトが, 新しいウィンドウに表示される. リスト中の下

電子情報通信学会論文誌 X Vol. Jxx–X No. xx

pp. 1–3xxxx 年 xx 月

1

電子情報通信学会論文誌 ’xx/xx Vol. Jxx–X No. xx
表1 検索結果Table 1 retrieval result
grep
本ツール

検索結果
検索時間
243 行 (58 ヵ所) 1 秒以内
17 ヵ所8秒

表 2 結果の比較
Table 2 Comparison
grep
本ツール

完全性 効率性 f 値
95%
34%
0. 50
81%
100% 0. 90

正しく修正箇所を示していた. 本ツールで発見されなかった部分は, 入力コード片として与えた 2 行が連続していなかった部分であった.
この 2 つの結果を f 値 [5] を用いて比較する. f 値と図1 画 面 例
Fig. 1 snapshotは完全性と効率性から情報検索の精度を評価するものであり,f値=線のついたファイル名を選ぶことで, そのファイルの内容が表示され, コードクローンがハイライト表示される.

3. 3 適 用 例
開発したツールを用いた疑似デバッグによって, ツールの適用例を示すとともに, その有効性を評価する.
実験では, SourceForge で開発されている日本語入力システム「かんな」[3] の修正例を用いた. 具体的には, 「かんな」バージョン 3.6 とバージョン 3.6p1 間でのセキュリティ問題の修正で, バッファ処理の前にオーバーフローを調べる処理を追加してあり, その中でほぼ同じ修正を行っている 21 箇所を対象とした.
修正されたコード片の一つから残り 20 個のコード片を検索する作業において, 標準的な検索ツールである grep と本ツールを比較する. まず, grep を用いた検索では, 修正箇所で使用されている “Request.type” という変数名の一部で検索を行った. 本ツールではバッ2 × 完全性 × 効率性
完全性 + 効率性で求められる.
ここで, 完全性は必要な情報のうち実際に検索された情報の割合を, 効率性は実際に検索された情報のうち必要な情報の割合と定義され, 両方ともに高いほど優れた検索システムであると判断される. 従って, f 値の値が大きいほど, 情報検索の精度が高いといえる. 本
実験結果に対して, f 値を計算した結果を表 2 に示す.
本ツールの結果が, grep を用いた検索結果よりもよい結果を示している.

4. ま と め
本論文では, ソフトウェア保守を支援するためのコードクローン検索ツールについて述べた. 今後の課題としては, 実際の保守現場での適用・評価や検索されたコードクローンの絞り込み等の改良が考えられる.
文

献[1] M. Balazinska , E. Merlo, M. Dagenais, B. Lagüe, andK. Kontogiannis, “Measuring Clone Based Reengi-

ファ処理を行っている部分の 2 行を入力コード片としneering Opportunities”,て与えて検索を行った. 検索対象ファイルは「かんな」

1999, 292-303.

ver3.6 の全ソースコード (約 21, 000 行) である.
検索結果と検索に要した時間を表 1 に示す. grep でProc. of METRICS99,[2] I.D. Baxter, A. Yahin, L. Moura, M. Sant’Anna, andL. Bier,“Clone Detection Using Abstract Syntax

Trees”, Proc. of ICSM98, 1998, 368-377.の検索結果では 234 行が検出された. このうち, 2 行[3] 日本語入力システム「かんな」http://canna.sourceforge.jp/

以上連続したコード片を 1 つの修正対象コード片とみ[4] T. Kamiya, S. Kusumoto, and K. Inoue, “CCFinder:

なすと, 全部で 58 箇所となった. このうち, 134 行 (20箇所) が修正箇所に関連した場所であった. 一方, 本A multilinguistic token-based code clone detection
system for large scale source code”,

IEEE Trans.

on Soft. Eng., 2002, 28(7):654-670.

ツールの検索結果では, 17 箇所が検出され, 4 箇所が[5] 徳永 武信, “情報検索と言語処理”, 東京大学出版会, 2002.

発見されなかった. しかし, 発見された 17 箇所は全て（平成 x 年 xx 月 xx 日受付）

2