Vol.2014-SE-184 No.8
Vol.2014-EMB-33 No.8
2014/5/20

情報処理学会研究報告
IPSJ SIG Technical Report

識別子名のタグクラウドを用いた
コードクローン理解支援ツールの開発
佐野 真夢1,a)崔 恩瀞1

山中 裕樹1

吉田 則裕2

井上 克郎1

概要：コードクローンとは, ソースコード中に存在する互いに一致または類似した部分を持つコード片のことであり, ソフトウェア保守を困難にする要因の 1 つと言われている. ソースコード中のコードクローンの存在位置を示したクローン散布図を用いて, コードクローンを多く含むコンポーネントを選択できるが,各コードクローンのソフトウェア中における役割を理解するには実際のコードを読む必要がある. コード
クローンの処理内容を直観的に理解できれば, 重要なコードクローンを把握し, 着目するコードクローンを効率良く選択できると考えられる. 本研究では, 識別子名を抽出し, それをキーワードとしたタグクラウドを用いたコードクローン理解支援ツールを開発した. 本研究における識別子名のタグクラウドはコードク
ローンの処理内容の直観的な理解を目的としている.
キーワード：コードクローン，ソフトウェア保守，タグクラウド

Developing a Tool for Understanding Code Clone
Using Tag Cloud of Identifier Name
Abstract: Code Clone is a code fragment that is identical or similar to other code fragments in source code.
Clones have been known to be a contributing factor for diﬃculties in software maintenance. To focus on
relevant clones, visual techniques such as scatter plots have been used for location identification. However, it
is often necessary to read the source code contents a code clone to properly understand its function. Proper
understanding ensures eﬀective identification of relevant clones. In this study, we developed a tool for understanding code clones using identifiers in the source code. Our tool uses a tag cloud to visualize extracted
identifiers from clones. We show that tag clouds can be used to intuitively understand the function of code
clones.
Keywords: Code Clone, Software Maintenance, Tag Cloud

1. まえがき
ソフトウェアの保守工程における大きな問題の 1 つとし

複数のコード片を 1 つのメソッドなどにまとめることである. 集約を行うことで, 保守対象となるコードクローンを除去することが可能である.

てコードクローンが指摘されている. コードクローンとは,ソフトウェアの保守を容易にするためには, コードク

ソースコード中に存在する互いに一致または類似した部分

ローンの集約を行うことが望ましいと考えられる. しかし,を持つコード片のことであり, 既存コードのコピーアンド

ツールによって自動検出されたコードクローンの中には,ペーストなどの様々な原因により生じる [4].

性能改善などの様々な理由により意図的に除去されていコードクローンに対する保守作業の 1 つとして集約が挙ないコードクローンが数多く存在する [6]. そのため, 全てげられる. 集約とは, 互いにコードクローンとなっているのコードクローンが集約の対象になるとは限らない. コー

1

2

a)

大阪大学
Osaka University
奈良先端科学技術大学院大学
Nara Institute of Science and Technology
m-sano@ist.osaka-u.ac.jpⓒ 2014 Information Processing Society of Japan

ドクローンを集約すべきかどうかを判断するには, 実際にソースコードを読む必要があるが, 全てのコードクローン
を読むことは非効率的である. このような問題を解決し,
コードクローンの効率良い分析を支援するために様々な可

1

Vol.2014-SE-184 No.8
Vol.2014-EMB-33 No.8
2014/5/20

情報処理学会研究報告
IPSJ SIG Technical Report

視化手法が提案されている.
既存のコードクローン可視化手法の 1 つとしてクローン散布図が挙げられる. クローン散布図とは, ソースコード
上に存在するコードクローンの位置を示した散布図のことであり, コードクローン分析ツール Gemini[12] などで利用されている. クローン散布図を用いることで, ソフトウェ
ア中におけるコードクローンが多く存在するコンポーネン
トを直観的に理解できる. また, そのコンポーネントのみに着目することで, 分析するコードクローンの数を減らすこともできる. しかし, クローン散布図には, 実際のソースコードに関する情報は反映されていない. そのため, コー
ドクローンのソフトウェア中における実際の役割を理解す
ることは困難である.
そこで, 本研究ではコードクローン理解支援を目的として, 変数名などの識別子名を利用した可視化手法を提案した. 具体的には, 開発者がクローン散布図中から興味のあるコンポーネントを選択すると，そのコンポーネント中の

図 1

コードクローンに含まれる識別子名をキーワードとしたタ

Fig. 1 Example of scatter plot in Gemini.

Gemini におけるクローン散布図の例

グクラウドを生成するコードクローン理解支援ツールを開発した．タグクラウドは，テキストデータの視覚的表現

見つけている [5].

の 1 つであり，指定された領域に多くのキーワードが配置

一般的に, 互いにコードクローンとなるコード片の対をされ，重要度の高いキーワードが大きく表示されるというクローンペアと呼び, クローンペアにおいて推移関係が成特徴を持つ．本ツールでは，タグクラウドを散布図とソーり立つコードクローンの集合をクローンセットと呼ぶ.

スコードの間に導入したため，開発者が効率的に興味のあ

コードクローン検出手法の 1 つとしてソースコードの字

るコードクローンを探索できると期待される．識別子名を

句解析に基づく手法 [1], [7], [10] が存在する. この手法でキーワードとする理由は, “ソフトウェア開発者はプログ

は, ソースコード中にある同一の文字列を検索することでラムを読む際, 識別子名の意味からプログラム要素の役割

コードクローン検出を行う.

を推測している [9], [13]”ためである. さらに, 本研究では,

本研究では, 字句解析ベースのコードクローン検出ツー

コードクローンの分析経験を持つ専門家が記述したコードル CCFinder[5] を利用してコードクローン検出を行う.

クローンの説明文に基づく有用な識別子名リストを利用しCCFinder は高いスケーラビリティを有しており, 大規模て, 本手法により抽出されたコードクローンに含まれる識なソフトウェアに対しても実用的な時間でコードクローン

別子名が有用であることを確認した.

を検出できる. また, 空白やタブの有無などのコーディン

以降, 2 節では本研究に関連する研究について説明する.

グスタイルを除いて完全に一致するコードクローンだけでまた, 3 節では本研究で開発したコードクローン理解支援なく, 変数名などのユーザ定義名や変数の型などの一部のツールについて説明し, 4 節では本研究で行った評価実験

予約語のみが異なるコードクローンも検出することができについて述べる. そして, 5 節で本研究のまとめと今後の課るという特徴を備えている. 実際に, CCFinder は様々な大題について述べる.

規模ソフトウェアに適用され, その有用性が確認されてい2. 関連研究2.1 コードクローン

る [8].

2.2 クローン散布図

コードクローンとは, ソースコード中に存在する互いに既存のコードクローン可視化手法の 1 つとしてクロー一致または類似した部分を持つコード片のことである. 一

ン散布図が挙げられる. クローン散布図とは, 分析対象と般的に, コードクローンの存在はソフトウェアの保守を困なるソースコード上に存在するコードクローンの位置を難にすると言われている [4]. そのため, コードクローンの示した散布図のことであり, コードクローン分析ツール

存在を知ることは重要であるが, 大規模ソフトウェアの場

Gemini[12] などで利用されている. 図 1 は Gemini におけ合, 開発者がソフトウェアに含まれる全てのコードクロー

るクローン散布図の例である. 図 1 では, コードクローン

ンを見つけることは非現実的である. 従って, 一般的に, ソは斜めの線分としてクローン散布図に描画されている. まフトウェア開発では検出ツールを用いてコードクローンをた, ファイルやディレクトリ単位で区切りが引かれるため,ⓒ 2014 Information Processing Society of Japan2

Vol.2014-SE-184 No.8
Vol.2014-EMB-33 No.8
2014/5/20

情報処理学会研究報告
IPSJ SIG Technical Report&ŝŶĚĞƌ

ศᯒ䛩䜛䝋䞊䝇䝁䞊䝗

䝁䞊䝗䜽䝻䞊䞁䛾᝟ሗ

㛤Ⓨ䛧䛯䝒䞊䝹
ĚŝƌĞĐƚŽƌǇ  ✁✂✄ ☎✆✝

䜽䝻䞊䞁ᩓᕸᅗ⾲♧㒊
図 2 自然文におけるタグクラウドの例

Fig. 2 Example of tag cloud in natural language text.

ŐĞƚZĞƐŽƵƌĐĞ

䝍䜾䜽䝷䜴䝗⾲♧㒊
図 3&ŝůĞĨŝůĞ сŶĞǁ&ŝůĞ;Ϳ͖͘͘͘͘㆑ูᏊྡ䜢ྵ䜐䝋䞊䝇䝁䞊䝗⾲♧㒊

ツールの概要Fig. 3 Overview of the proposed tool.

ソフトウェア中のどの部分に, どの程度のコードクローンが含まれるのかを直観的に理解できる.

キーワードの相対的な重要度を直観的に理解するため

しかし, クローン散布図には, 識別子名などの実際のソーには, 全てのキーワードが画面内に収まることが望まスコードに関する情報は反映されていない. そのため, コー

しい. しかし, 多くのキーワードが抽出された場合, 単

ドクローンのソフトウェア中における役割を理解するには,純なリストなどでは全てのキーワードが画面内に収ま実際にソースコードを読む必要があるが, 全てのコードク

らない可能性が高いと考えられる. タグクラウドを利ローンに関するソースコードを読むことは非効率的である.

用することで, より多くのキーワードを 1 つの画面内

開発者は識別子名の意味からプログラム要素の役割を推に収める事が可能となる.

測するため [9], [13], 識別子名を利用することで, コードク

重要度を直観的に理解しやすい

ローンの役割を直観的に理解し, 注目したいコードクロー

タグクラウド上に表示されるキーワードの大きさは,ンをより効率的に見つけ出すことができると考えられる.

その重要度が高いほど相対的に大きく表示される. そのため, どのキーワードがより重要であるのかを直観

2.3 タグクラウド
タグクラウドとは, 文書からキーワードを抽出し, そのキーワードを画面上に表示する視覚的表現の 1 つである.

的に理解することが可能となる.

3. 開発ツール

タグクラウドの厳密で普遍的な定義は存在していないが,

図 3 は本ツールの全体構成を表す概要図である. 本ツー

一般的には, 表示されるキーワードの大きさは, 対象文書にルは, CCFinder の出力結果を入力として動作する. そのたおける重要度や関心度を表す指標に基づいて定められておめ, ユーザは分析するソースコードを CCFinder に適用しり, 相対的に大きく表示されているキーワードは, より重要た結果（コードクローンの情報）を事前に準備する必要が度や関心度の高いキーワードであることを意味している.

ある.

図 2 は, タグクラウド生成 Web サービス Wordle*1 を用い

本ツールを実行すると, 始めに分析するソースコード中て生成した自然文に対するタグクラウドの例である. 図 2の識別子名の抽出が行われる. その後, 抽出した識別子名

において, 他のキーワードよりも相対的に大きく表示されの情報と入力したコードクローンの情報（CCFinder の出ている “code”や “clone”などのキーワードは, 元の自然文

力結果）に基づいて, クローン散布図の生成を行う. 本ツー

で頻出する単語であり, その文章の特徴を表すキーワード

ルでは, “クローン散布図表示部”, “タグクラウド表示部”,である可能性が高いことを示している.

“識別子名を含むソースコード表示部”の 3 つの分析環境を

開発者は識別子名の意味を元にプログラム要素の役割

提供しており, 以下のような手順で利用する.

を推測することから [9], [13], 識別子名をキーワードとし,

手順 1. 最初に表示されるクローン散布図を用いて, コー

コードクローンに対してタグクラウドを適用することで,ドクローン密度の高いディレクトリ対を探す. 本ツー

そのクローンの特徴を把握できると考えられる. しかし,

ルのクローン散布図は一般的なものとは異なり, ディ

コードクローンに対してタグクラウドを適用した事例はまレクトリ単位のコードクローン密度を示している.

だ見られない. そこで, 本研究では, タグクラウドを用いて手順 2. 手順 1. で見つけたディレクトリ対を選択するこ

ソースコード中の識別子名を可視化することで, コードクとで, そのディレクトリ対に応じた識別子名のタグク

ローンの理解支援を図る. タグクラウドを用いる利点としラウドが表示される. このタグクラウドを用いて, 選て, 以下の 2 つが挙げられる.

択したディレクトリ対におけるコードクローンの大ま

小さな領域に多くのキーワードを表示できるかな役割を把握する.

*1

http://www.wordle.net/ⓒ 2014 Information Processing Society of Japan

手順 3. 手順 2. で関心のある識別子名が存在する場合は,3

Vol.2014-SE-184 No.8
Vol.2014-EMB-33 No.8
2014/5/20

情報処理学会研究報告
IPSJ SIG Technical Report



ప





図 5

䜽䝻䞊䞁䛾ᐦᗘ

㧗

コードクローンの密度に対する散布図の色の変化

Fig. 5 Gradation of scatter plot visualizing density of code
clone.

ローンに含まれるものの割合を示している.
また, 本ツールの散布図では, コードクローン密度を
図 5 に示すグラデーションで表す. コードクローン密度が低い場合は青色で表し, 密度が高くなるに従って赤色に変化していく. 赤色で表されるコードクローン
密度の閾値は図 4 の C. で設定でき, 閾値以上の密度は

全て赤色で表される.



B. 縦軸・横軸方向ディレクトリの絶対パス
図 4 の A. において, マウスカーソルがあるマスに対
図 4

クローン散布図表示部の例

Fig. 4 Example of scatterplot view.

応した縦軸・横軸方向ディレクトリの絶対パスを表示
する.

C. クローン密度の閾値を設定するスライダー
それを選択することでその識別子名を含む実際のコー

図 4 の A. のマスの色を決める際に使用する, 赤色で表

ドクローンを表示できる. これにより, コードクロー

示する密度の閾値を設定できる.

ンに関する詳細な調査を行うことができる.
以降, 本節では各分析環境の詳細について説明する.

D. RNR の閾値を設定するスライダー
RNR とは, コードクローンの非繰り返し度数を表すメ
トリクスのことであり, RNR が低い場合, そのコード

3.1 クローン散布図表示部

クローンは print 文の連続などの類似した処理の繰り本ツールが提供するクローン散布図は Live scatterplot[2]返しを多く含むことを意味する [3]. 一般に, RNR が低を参考にしている. Live scatterplot は, 2.2 節で述べた一いコードクローンは重要度の低い場合が多いため, 本

般的なクローン散布図とは異なり, ディレクトリなどのソツールでは, RNR が設定した閾値以下のコードクロー

フトウェア要素の単位に対するコードクローン密度を示す.

ンを分析対象から除外できる.

また, 大規模ソフトウェアの場合, 一般的なクローン散布図

E. 識別子名のタグクラウドのパラメータ設定には, コードクローンを表す線分を多数描画するため生成

3.2 節で述べる識別子名のタグクラウドを生成するたに時間がかかる, 線分が密集する場所では可視性が悪くなめのパラメータを設定できる. 設定可能なパラメータるなどの問題がある. しかし, Live scatterplot はディレクを以下に示す.

トリなどの大きな単位で描画を行うため, これらの問題を

表示上限数大きく緩和し, より大規模なソフトウェアに適用できるとタグクラウドに表示できるキーワードの上限数で考えられる.

ある.

図 4 は, Ant*2 に本ツールを適用した結果, 実際に表示

表示優先順位の指標

されたクローン散布図である. 図 4 の各記号箇所の説明を

タグクラウドに表示するキーワードの優先順位を定

以下に示す.

める指標である. 本ツールでは, 識別子名の出現回数

A. コードクローン密度を示したクローン散布図の他に, TF-IDF[11] も選択できる. TF-IDF とは, 文*2

分析対象を含む全てのソースコードに対するコードク

書中に出現する単語に関する重み付け手法のことでローン密度を示した散布図である. 縦軸と横軸は, 左あり, 出現頻度（TF : Term Frequency）と非一般度上端を原点としてそれぞれ同じ順序でディレクトリの（IDF : Inverse Document Frequency）の 2 つの指標列が並んでいる. また, 縦軸と横軸のディレクトリ間を掛け合わせることで重みを計算する.

にまたがるコードクローンの密度に基づき, 各マスが本ツールでは, 文書をソースコード, 単語を識別子名

着色される. なお, 本ツールにおけるコードクローンと考えて TF-IDF の指標を計算する. 本ツールにお密度は, ソースコード全体のトークンのうち, コードク

いて, 識別子名 i の T Fi , IDFi は以下の式で計算す

http://ant.apache.org/

る. 以下の式で使用する記号は表 1 にまとめている.

ⓒ 2014 Information Processing Society of Japan4

Vol.2014-SE-184 No.8
Vol.2014-EMB-33 No.8
2014/5/20

情報処理学会研究報告
IPSJ SIG Technical Report

T Fi =ni|D|, IDFi = logN|di |識別子名 i の T Fi は, 分析対象のソースコード群 s 中における i の出現頻度であり, IDFi は, あるソース
ファイルの集合 S における, ファイル単位での i の希少さを意味している. また, S は s を内包した集合であり, 例えば, S はソフトウェアの全てのソースファ
イル, s はソフトウェアの 1 つのディレクトリに属す
るソースコードなどがある. なお, 本ツールでは, s を

2 つのディレクトリ（同じディレクトリでも可）に属するソースファイルとしている.
図 6 タグクラウド表示部の例

表示する識別子名の長さの下限

Fig. 6 Example of tag cloud view.

不要なものとして除去する識別子名の長さの閾値である. 詳細は 3.2.2 節で述べる.
表示する識別子名の IDF の下限
不要なものとして除去する識別子名の IDF の閾値である. 詳細は 3.2.2 節で述べる.
本ツールにおけるクローン散布図の主な目的は, 注目するディレクトリを削減することである. 一般的に, コード
クローン密度の高いディレクトリ対は保守作業が困難であり, 分析する必要性が大きいと考えられる. 本ツールの散布図により, コードクローン密度の高いディレクトリ対を直観的に把握できるため, そのようなディレクトリ対におけるコードクローンに着目することで, 分析の時間的効率を向上できると考えられる.

図 7

本ツールにおける識別子名の情報テーブル

Fig. 7 Table of information on identifier name in the proposed

3.2 タグクラウド表示部

tool.

3.1 節で述べた散布図の各マスを選択することで, それに対応したディレクトリ対における識別子名のタグクラウ
ドが表示される. 縦軸と横軸が同じディレクトリの場合は,単一ディレクトリ内が対象となる.
図 6 は, 図 4 において, あるディレクトリ対を選択した際に実際に表示された識別子名のタグクラウドである. 図 6において, コードクローンに含まれる識別子名は赤色, 含まれない識別子名は黒色で着色されている.
本ツールにおける識別子名のタグクラウドの主な目的は,ディレクトリ（または, ディレクトリ対）におけるコードク
ローンの実際の役割を大まかに把握することである. コー
ドクローンの大まかな役割を直観的に把握することで, 関
表 1提案手法における TF-IDF の計算式の記号の意味

Table 1 Meaning of each symbol used by the expression of

心の無いコードクローンを除外し, その結果, 実際に読む必要のあるソースコードの量を減らすことができると考えられる.
また, 本ツールでは識別子名のタグクラウドと共に識別
子名の情報テーブルを表示する. 図 7 は, 図 6 と共に実際に表示された識別子名の情報テーブルである. このテーブ
ルには, 共に表示されたタグクラウドのキーワードに対応した識別子名に関する情報（ソースコード全体での出現回数など）が記載されている.
本ツールにおける識別子名の情報テーブルは, 識別子名
同士の厳密な比較のために利用できる. 例えば, タグクラウ
ドでは相対的に大きく表示されているキーワードが重要であることを直観的に理解できるが, 同程度の大きさのキー

TF-IDF in the proposed approach.

ワード同士を比較する場合, 目視では正確さに欠ける可能記号

意味性がある. そのような場合, 識別子名の情報テーブルに記N

分析対象中に出現する重複を許した識別子名の総数

載された具体的な数値を参考にして, キーワード（識別子ni

分析対象における識別子名 i の出現回数

名）の厳密な比較を行う.

|D|

分析対象を内包するソースファイル集合のファイル数|di ||D| に属し, かつ, 識別子名 i を含むファイル数ⓒ 2014 Information Processing Society of Japan

以降, 本節では, 本研究で提案する識別子名のタグクラウ
ドの詳細な仕様について説明する.

5

Vol.2014-SE-184 No.8
Vol.2014-EMB-33 No.8
2014/5/20

情報処理学会研究報告
IPSJ SIG Technical Report

3.2.1 キーワードの色と大きさ



コードクローンに含まれるキーワードは, 含まれていな

いものと区別できるように着色を行う. これにより, コード







&

クローンと直接関係のある識別子名を直観的に判断できる.
なお, 本ツールでは, 単一ディレクトリ内, または, 2 つのディレクトリ間にまたがるコードクローンを対象とする.
すなわち, クローン散布図表示部で選択したマスに応じた
ディレクトリ対におけるコードクローンに含まれるキー
ワードを着色する.
また, タグクラウドのキーワードの大きさは, 各キーワードに対応した識別子名の TF-IDF の値に基づいて決定する.

TF-IDF の値が高い識別子名は, 相対的に大きなサイズのキーワードとして表示される.

3.2.2 不要なキーワードの除去

図 8

識別子名を含むソースコード表示部の例

Fig. 8 Example of view that shows source code including an
identifier name.

全ての識別子名をキーワードとして表示するのは非現実的であり, また, タグクラウドの可視性を損なうと考えられる. そこで, 本ツールではコードクローン理解支援に有益

実際のコードクローンを表示できる. 図 8 は, 図 6 のキーである可能性の低い識別子名を除去するために, 以下の指ワード “createArgument”に対する実際のコードクローン

標によるキーワードのフィルタリングを行う.

の例である. 図 8 における各番号が指す箇所の説明を以下

識別子名の長さに示す.

“it”などの 2 文字以下の識別子名は, ほとんどの場合その意味を推測できないと考えられる. 従って, 一定の長さ未満の識別子名はキーワード候補から除外する.
識別子名の IDF

A. ディレクトリ対の絶対パス
識別子名のタグクラウドが対象とするディレクトリ対の絶対パスである.

B. 選択した識別子名

IDF 値の低い識別子名は多数のファイル中に見られるユーザが選択した識別子名を示す.

一般的な識別子名である可能性が高く, コードクロー

C. 識別子名を含むコードクローン一覧

ンを特徴付けるには不向きと考えられる. 従って, 閾

対象ディレクトリ対において, 選択した識別子名を含値未満の IDF を持つ識別子名はキーワード候補から

むコードクローンの一覧である.

除外する.

D. 識別子名を含むクローンのソースコード

また, 大規模ソフトウェアの場合, フィルタリングを行っ

図 8 の C. で選択したコードクローンを含むソースコーてもなお非現実的な量の識別子名が残ると考えられる. そドを表示する. 選択したコードクローンに該当する場

こで, 本ツールでは識別子名の出現回数が多いものを優先

所を青色の背景で強調し, 選択した識別子名を赤色, そ

的にタグクラウドのキーワードとして表示する.

の他のタグクラウドに表示されている識別子名を緑色

なお, 識別子名のスペルの大文字・小文字のみが異なる場合, その違いは識別子名の意味に影響しないと考えられるため同じ識別子名として扱う. また, “getValue”などの複数の英単語で構成された識別子名もそのままの 1 つのキー
ワードとする. これは, 1 つの識別子名を単語に分割したの文字で表示する.

E. 同クローンセット内のコードクローン一覧
図 8 の C. で選択したコードクローンと同じクローン
セットに属する他のコードクローンの一覧である.

F. 同クローンセット内のクローンのソースコード

場合, 元の識別子名と異なる意味を推測する可能性が考え

図 8 の E. で選択したコードクローンを含むソースコーられるためである. 例えば, “addElement”と “getValue”とドを表示する. 図 8 の D. と同様, 選択したコードク

いう識別子名を “add”, “element”, “get”, “value”の 4 つのローンや識別子名を強調表示する.

キーワードに分けた場合, 元の識別子名が判断できないた

本ツールにおいて, ユーザが選択した識別子名を含むコー

め, “addValue”などの存在しない識別子名を推測する可能

ドクローンを表示する目的は, 関心のあるキーワードを含性がある.

むコードクローンの実際のコード片を確認することである.

3.3 識別子名を含むソースコード表示部
識別子名のタグクラウドのキーワードがコードクローンに含まれる場合, そのキーワードに対する識別子名を含むⓒ 2014 Information Processing Society of Japan

4. 評価実験
本節では, 本ツールが抽出するタグクラウドのキーワー
ドの有用性に関する評価実験について説明する.

6

Vol.2014-SE-184 No.8
Vol.2014-EMB-33 No.8
2014/5/20

情報処理学会研究報告
IPSJ SIG Technical Report

4.1 実験方法

然文で説明することは難しく, 結果として説明文を元

本実験では, 有用なキーワードを事前に定めておき, 本にした有用なキーワードが不正確となる可能性がある.

ツールにおけるタグクラウドのキーワードがそれらと一致

これは再現率と適合率に影響を与えると考えられる.

するか, あるいは推測可能であるかを調べることでその有• 本ツールでは出現回数の多い識別子名を優先的にタグ用性を評価する. 有用なキーワードは, コードクローン分

クラウドに表示するため, ソースコード全体と直接関析経験を持つ専門家が書いたコードクローンの説明文（自係の無い処理などの出現回数の少ない識別子名が関係然文）を元に決定する. また, 有用なキーワードは説明文にするコードクローンが存在する場合, それを抽出でき出現する名詞と動詞に限定する. ただし, 代名詞や be 動詞

ない. そのため, 再現率が低下する可能性がある.

などの明らかに有用ではないと考えられる単語は除外する.

• 本ツールでは一般性の高いキーワードはタグクラウド

本実験において “キーワードが一致した”とは, 有用なに表示されない. ゆえに, コードクローンが文字列のキーワードがタグクラウドのキーワードと全く同じ, また操作などの汎用的な処理の場合, 関連するキーワード

は, タグクラウドのキーワードの一部に含まれることを示を抽出できず, 再現率が低下する可能性がある.

す. 名詞の複数形などの文法的な変化がある場合も一致し• 有用なキーワードやタグクラウドのキーワードの数自たとみなす. また, “キーワードが推測可能”とは, タグクラ体が少ない場合, 1 つのキーワードに掛かる重みが大ウドのキーワードから有用なキーワードが推測できることきくなり, 指標の値が低下する. 例えば, 有用なキーを意味し, 例えば, “Windows”と “OS”, “utility”と “util”

ワードが 3 個の場合, 1 個取得できないだけで再現率などが挙げられる.

は 0.67 になる.

本実験における評価指標を以下に示す. 以下の評価指標
では, タグクラウドのキーワードはコードクローンに含ま4.3 妥当性への脅威れるものに限定する. この理由は, 説明文がコードクロー

本実験ではコードクローン分析経験を持つ専門家が書いンのみを対象しているため, タグクラウドのキーワードもた説明文を元に有用なキーワードを選定した. しかし, 例

同じ範囲に限定するべきであると考えられたためである.

えば, Ant に詳しい専門家が書いた説明文を用いると, 説明

再現率 本実験では, 有用なキーワードのうち, タグクラウ

文の詳細の程度が異なり, 結果が変化する可能性が考えら

ドのキーワードと一致, あるいは推測可能なものの割れる. また, 説明文は自然文であるため, 書く人によって個合を示す.

人差が出る可能性が高い. ゆえに, 様々な人が書いた説明

適合率 本実験では, タグクラウドのキーワードのうち, 有文を用いて実験する必要があると考えられる. 同様に, 実用なキーワードと一致, あるいは推測可能なものの割験対象を他のディレクトリ対や Ant 以外のソフトウェアに合を示す.

した場合も結果が変化する可能性があると考えられる.

本実験では, 表 2 に示す Ant の 10 個のディレクトリ対

また, 本研究ではコードクローン検出に CCFinder を用を対象に評価を行った. 表 2 は各ディレクトリ対の相対パ

いているが, 異なる検出手法を実装したコードクローン検スを示しており, 頭の “src/main/org/apache/tools/ant/”

出ツールを用いると結果が変化すると考えられる. 例えば,は省略されている. また, これらはコードクローン密度が識別子名の類似度に基づくコードクローン検出手法 [14] を高いものから選択しているが, 最上位の 10 組ではない. こ用いたツールの場合, 内部に出現する識別子名が類似するの理由は, 他者に説明文を書いてもらう都合上, 多数のコーメソッドが同じクローンセットのコードクローンとして検ドクローンが存在するディレクトリ対を対象にすることが出される. このような検出ツールを用いた場合, 識別子名

困難であったためである.

ベースの検出手法であることが結果に影響するかもしれな

4.2 実験結果と考察を書くことが容易になるため, 上述の問題点が一部解決さい. また, メソッド単位のコードクローンであれば, 説明文
本実験における実験結果を表 3 に示す. 表 3 からわかる
ように, 実験結果では, 再現率と適合率は共に平均値が約0.8 であった. 従って, 平均的に見ると, 本手法が抽出したれると考えられる.

5. まとめと今後の課題

タグクラウドのキーワードは, ほとんどが有用なキーワー

本研究では, ソースコード中に含まれる識別子名を抽出

ドであり, 不要なキーワードは少ないと考えられる. しかし, 特徴的な識別子名をタグクラウドとして表示すること

し, ディレクトリ対 {util/regexp, util/regexp} などの極端で, コードクローンの実際の役割を直観的に理解する手法に低い数値を示す結果も存在する. このような結果が生じを提案した. また, 本手法を実装したクローン散布図ベーた要因として, 以下のような可能性が考えらえれる.

スのコードクローン分析ツールの開発を行った. そして,

• コードクローンの中には処理の一部分などの表現が難

コードクローンの説明文に基づく有用なキーワードと比較

しいものが存在する. このようなコードクローンを自することで, 本手法により抽出される識別子名が有用なもⓒ 2014 Information Processing Society of Japan7

Vol.2014-SE-184 No.8
Vol.2014-EMB-33 No.8
2014/5/20

情報処理学会研究報告
IPSJ SIG Technical Report
表 2

実験対象

Table 2 Pairs of target directories for evaluation.
ディレクトリ対

taskdefs/optional/clearcase

taskdefs/optional/clearcase

taskdefs/optional/javah

taskdefs/optional/javah

taskdefs/optional/sos

taskdefs/optional/sos

types/spi

types/spi

types/optional/image

types/optional/image

taskdefs/optional/depend/constantpool

taskdefs/optional/depend/constantpool

util/regexp

util/regexp

taskdefs/launcher

taskdefs/launcher

taskdefs/optional/ccm

taskdefs/optional/ccm

types/resolver

types/resolver

表 3

実験結果

Table 3 Results of evaluation.
再現率

適合率

taskdefs/optional/clearcase

ディレクトリ対

taskdefs/optional/clearcase

0.88

0.84

taskdefs/optional/javah

taskdefs/optional/javah

0.90

0.75

taskdefs/optional/sos

taskdefs/optional/sos

0.95

1.00

types/spi

types/spi

0.67

1.00

types/optional/image

types/optional/image

0.93

0.79

taskdefs/optional/depend/constantpool

taskdefs/optional/depend/constantpool

0.71

1.00

util/regexp

util/regexp

0.48

0.67

taskdefs/launcher

taskdefs/launcher

0.80

0.67

taskdefs/optional/ccm

taskdefs/optional/ccm

1.00

0.91

types/resolver

types/resolver

0.67

0.71

0.80

0.83

平均

のであることを確認した.
今後の課題として, まず, 本ツールの有用性に関する評価が必要と考えられる. コードクローンの説明文には個人差[6]がある可能性が高いため, 様々な説明文に対して本手法の評価を行う必要もある. 同様に, 様々なソフトウェアを実験対象に評価を行う必要がある. また, 選択した識別子名[7]の強調表示の範囲をソースコード全体に広げるなどの細かいツールの改善も必要である.
謝辞[8]

本稿の執筆にあたり，貴重なご意見をくださりま

した大阪大学 大学院情報科学研究科 春名 修介 特任教授，
ならびに Raula Gaikovina Kula 特任助教に感謝いたします．本研究は JSPS 科研費 25220003，26730036 の助成を

[9]
[10]

受けたものてす.
参考文献
[1]

[2]
[3]

[4]

[5]

Basit, H. A. and Jarzabek, S.: Detecting higher-level
similarity patterns in programs, Proc. of ESEC/FSE
2005, pp. 156–165 (2005).
Cordy, J. R.: Live scatterplots, Proc. of IWSC 2011, pp.
79–80 (2011).
肥後芳樹，吉田則裕，楠本真二，井上克郎：産学連携に基づいたコードクローン可視化手法の改良と実装，情報処
理学会論文誌，Vol. 48, No. 2, pp. 811–822 (2007).
肥後芳樹，楠本真二，井上克郎：コードクローン検出とその関連技術，電子情報通信学会論文誌，Vol. J91-D, No. 6,
pp. 1465–1481 (2008).
Kamiya, T., Kusumoto, S. and Inoue, K.: CCFinder: aⓒ 2014 Information Processing Society of Japan

[11]
[12]

[13]

[14]

multilinguistic token-based code clone detection system
for large scale source code, IEEE Trans. Sofw. Eng.,
Vol. 28, No. 7, pp. 654–670 (2002).
Kapser, C. and Godfrey, M. W.: ”Cloning consideredharmful” considered harmful, Proc. of WCRE 2006, pp.
19–28 (2006).
Li, Z., Lu, S., Myagmar, S. and Zhou, Y.: CP-Miner:
Finding copy-paste and related bugs in large-scale software code, IEEE Trans. Sofw. Eng., Vol. 32, No. 3, pp.
176–192 (2006).
門田暁人，佐藤慎一，神谷年洋，松本健一：コードクローンに基づくレガシーソフトウェアの品質の分析，情報処
理学会論文誌，Vol. 44, No. 8, pp. 2178–2188 (2003).
Pennington, N.: Empirical studies of programmers: 2ndworkshop, pp. 100–113, Ablex Publishing Corp. (1987).
Prechelt, L., Malpohl, G. and Philippsen, M.: Finding
plagiarisms among a set of programs with JPlag, Journal of Universal Computer Science, Vol. 8, No. 11, pp.
1016–1038 (2002).
徳永健伸：情報検索と言語処理，東京大学出版会 (1999).
植田泰士，神谷年洋，楠本真二，井上克郎：開発保守支援を目指したコードクローン分析環境，電子情報通信学会
論文誌，Vol. 86-D-I, No. 12, pp. 863–871 (2003).
von Mayrhauser, A. and Vans, A.: Identification of dynamic comprehension processes during large scale maintenance, IEEE Trans. Sofw. Eng., Vol. 22, No. 6, pp.
424–437 (1996).
山中裕樹，吉田則裕，崔 恩瀞，井上克郎：テキストマ
イニング技術を応用したメソッドクローン検出手法の提案，情報処理学会研究報告，Vol. 2013-SE-182, No. 28,
pp. 1–8 (2013).

8