ソフトウェアエンジニアリングシンポジウム 2012

機械学習に基づく有用なコードクローンの自動特定手法
楊 嘉晨1,a)堀田 圭佑1,b)

肥後 芳樹1,c)

井垣 宏1,d)

楠本 真二1,e)

概要：これまでにソースコード中からコードクローン (互いに類似するコード片) を自動的に検出するツー
ルが多数開発されている．これらの検出ツールはコードクローンを多数検出するが，それらすべてがソフ
トウェア保守に有用であるとは限らない．さらに，あるコードクローンが有用であるか否かの判別基準は，個々の開発者により，あるいはコードクローン情報の使用目的などにより異なる可能性が高い．そこで本稿では，機械学習を用いた有用なコードクローンの自動特定手法を提案する．提案手法は，ツールによって検出されたコードクローンの一部を利用者に有用であるか否かに分類してもらい，それらを学習デー
タとして残りのコードクローンからその利用者にとって有用なコードクローンを自動的に特定する．また，提案手法を実装し，被験者を用いて評価実験を行った．その結果，有用であるか否かの判断が利用者によって異なることを確認するとともに，提案手法が全体の 20%程度のデータを学習させることで，およ
そ 70%以上，最良の場合約 90.1%の精度で予測ができることを確認した．

A Method for Identifying Useful Code Clones
based on Machine Learning Techniques
Jiachen Yang1,a)

Keisuke Hotta1,b)

Yoshiki Higo1,c)Hiroshi Igaki1,d)Shinji Kusumoto1,e)Abstract: Currently, there is a variety of code clone detection tools. However, results from clone detectors
contain plentiful useless code clones. Thus, users of clone detectors need to identify useful code clones froma ﬂood of code clones, which requires much eﬀorts. In addition, judging whether a code clone is useful or
not varies from user to user and from purpose to purpose. Therefore, it is diﬃcult to deﬁne what code
clones are useful for software maintenance. This paper proposes a ﬁltering method for code clones basedon machine learning techniques. The proposed method has its users mark on some of code clones whether
they are useful or useless. Firstly, the proposed method learns the judgement of the individual user, andthen predicts unmarked code clones whether they are useful or not. We have implemented the proposed
method as a web-based system, and conducted a case study with subjects. As a result, we conﬁrmed thatthe judgement of whether a code clone is useful or not varies from user to user. Moreover, we conﬁrmed thatthe proposed method can predict the judgement of code clones by users with over 70% accuracy, in somecases it can predict the judgement with over 90% accuracy.

1. まえがき影響を与えると考えられており，これまでにコードクロー
ンの検出技術，及びその除去技術が盛んに研究されている．

近年，ソフトウェア工学における研究対象としてコード

また，コードクローンをソースコード中から自動的に検出クローンが注目されている．コードクローンとは，ソースするツールも多数開発，公開されている [1], [2], [3], [4]．

コード中の同一，あるいは類似するコード片のことを指す．

コードクローン検出ツールは対象となるソフトウェア中一般的にコードクローンの存在はソフトウェアの保守に悪から特定したコードクローンをすべて提示するため，提示されるコードクローンの量は膨大になる．しかし，これら

1

a)
b)
c)
d)
e)

大阪大学大学院情報科学研究科
Graduate School of Information Science and Technology, Osaka University
jc-yang@ist.osaka-u.ac.jp
k-hotta@ist.osaka-u.ac.jp
higo@ist.osaka-u.ac.jp
igaki@ist.osaka-u.ac.jp
kusumoto@ist.osaka-u.ac.jp

c 2012 Information Processing Society of Japanのコードクローンすべてがソフトウェア保守にとって有用であるとは限らない．このため，開発者は検出ツールによって提示された膨大なコードクローンの中から検出目的に即したコードクローンを特定する必要があるが，この作業は非常に大きな作業量を要する．さらに，あるコード

1

ソフトウェアエンジニアリングシンポジウム 2012

クローンが有用か否かを判別する基準は，個々の開発者によって，あるいはコードクローンの検出目的によって異なる．したがって，どのようなコードクローンがソフトウェ
ア保守に有用かを一般化することは難しい．
これまでにメトリクスなどを用いてコードクローンを分類する，あるいは有用でないものを除外する手法が提案されている [5], [6]．しかし，利用者ごと，あるいは利用目的ごとの違いを考慮したコードクローンのフィルタリング手法はこれまでに提案されていない．
本稿では，開発者がソフトウェア保守に有用なコードク
ローンを特定する作業を支援するために，機械学習を用いたコードクローンの自動フィルタリング手法を提案する．

図 1 提案手法を用いたフィルタリング処理の流れ

提案する手法では，まず利用者に一部のコードクローン

Fig. 1 Overall Workﬂow of Filtering with the Proposed

を “有用” か “有用でない” かに分類してもらう．その後，それらを学習データとして，残りのコードクローンを “有用” または “有用でない” に自動的に分類し，利用者に提示する．提案手法を用いることで，利用者は一部のコードクローンに対して自身が有用と思うか否かを入力するのみ

Method( 1 ) 利用者が対象システムのソースコードを検出ツールに入力する．

( 2 ) 検出ツールは入力されたソースコードからクローンセットを検出する．

で，膨大な検出結果から自身にとって有用なコードクロー

個々の利用者が提案手法を利用する手順は以下の通り．

ンのみを抽出することが可能となる．これにより，有用な( 3 ) 検出ツールにより検出されたクローンセットの中のい

コードクローンの特定に要するコストを低減させることがくつかを，利用者がその有用性に応じて “有用” か “有できる．さらに，利用者ごとに学習データを作成するため，用でない” かに分類し，登録する．

利用者や利用状況による有用か否かの判別基準の違いにも対応できる．

2. 提案手法
本節では，提案するコードクローンのフィルタリング手法について述べる．

( 4 ) 提案システムは利用者によって分類されたクローン
セット (学習データ) をデータベースに格納する．

( 5 ) 提案システムは学習データを分析し，機械学習を用いてそれらの特徴を抽出する．

( 6 ) 提案システムは (5) で抽出した特徴をもとに，学習デー
タに含まれていないクローンセットすべてに対し，それらの有用性を判別する．

2.1 入出力提案手法が入力として必要とするものは以下の通り．

( 1 ) 対象ソフトウェアのソースコード( 2 ) 対象ソフトウェア中に存在する全クローンセットの位
置情報( 3 ) 学習データ

2.3 機械学習手法
提案手法における機械学習手法は，クローンセット間の類似度の算出，並びにそれを用いた有用性の判別の 2 つのステップから成る．以降それぞれについて述べる．

2.3.1 クローンセット間の類似度の算出

ここでクローンセットとは，互いにコードクローン関係提案手法では，各クローンセットを構成するコード片にあるコード片の集合を指す．また (3) の学習データとは，のトークン型列 (トークンの種類をアルファベットとする

対象ソフトウェアから検出されたクローンセットの一部で文字列) をもとにクローンセット間の類似度を算出する．

あり，利用者によって “有用” あるいは “有用でない” のい

コード片のトークン型列を用いることで，細かな文字列のずれかの分類が付与されている．

違いを吸収することが可能となり，算出するクローンセッ
ト間の類似度，及び最終的な予測精度の向上が期待できる．

2.2 処理の流れ

図 2 にトークン型列の例を示す．

提案手法は与えられた入力情報をもとに，利用者によっ提案手法では，類似度の算出に TF-IDF 値 (Term Fre-て分類されていないすべてのクローンセットについて，そquency - Inverse Document Frequency)[7] を用いる．以降

れらが “有用” か “有用でない” かを自動的に判別し，提示の説明では，1 つのクローンセットを d，クローンセット

する．図 1 に提案手法を用いたフィルタリング処理の流の集合を D と表記する．

れを示す．提案手法を利用する際，準備として以下の (1)，(2) の作業が必要となる．

c 2012 Information Processing Society of Japan

TF-IDF 値の算出に際し，まず各クローンセット d を構成するコード片のトークン型列から N-Gram を抽出する．

2

ソフトウェアエンジニアリングシンポジウム 2012

tf idf (t, d, D) は個々の N-Gram に対する TF-IDF 値を−−−−−−−→
表しており，tf idf (d, D) は tf idf (t, d, D) を連結して作成

struct b l o b * l o o k up _ b l o b (struct o b j e ct * o b j ){i f (! o b j -> ty p e )o b j -> ty p e = O B J _ B L O B ;i f (o b j -> ty p e ! = O B J _ B L O B )re turn N U L L ;re turn (struct b l o b * ) o b j ;}したベクトルである．
−−−−−−−→
この tf idf (d, D) を用いて，2 つのクローンセット a，b間の類似度 nsim(a, b, D) を以下のように算出する．

(a) ソースコード
STRUCT ID TIMES ID L PAREN STRUCT ID TIMES ID RPARENL B RACE
IF L PAREN L NO T ID RPARENID ARRO W ID EQ UAL S ID SEMI
IF L PAREN ID ARRO W ID NE ID RPAREN
RETURN ID SEMI
RETURN L PAREN STRUCT ID TIMES RPAREN ID SEMI
RB RACE−−−−−−−→ −−−−−−−→
sim(a, b, D) = tf idf (a, D) · tf idf (b, D)(5){0, sim(a, b, D) = 0
nsim(a, b, D) =(6)
sim(a,b,D), otherwise|sim(a,b,D)|
2.3.2 有用性の判別
本小節では，学習データとして与えられた分類済みのク(b) トークン型列

ローンセット集合を用いて，未分類のクローンセットが “

図 2 トークン型列の例

有用” か否かを判別する方法について述べる．

Fig. 2 An Example of Token Types Seqneuce

学習データとなるクローンセットの集合を M ，判別の

例えば，図 2(a) のソースコードから得られるトークン型列対象となる未分類のクローンセットを t(t ∈/ M ) と表記す

(図 2(b)) に対して N = 3 とすると，以下のような N-Gram

る．また，M に含まれるクローンセットのうち，“有用”が得られる．

と分類されているクローンセットの集合を Mi ，“有用でSTRUCT

ID
ID

TIMES
TIMES
TIMES

ない” と分類されているクローンセットの集合を Mn と
ID
ID
ID

LPARENLPARENLPARENSTRUCT
STRUCT
STRUCTする．仮定より，Mi ∩ Mn = ∅，Mi ∪ Mn = M である．
ID
ID
...

TIMES

このようにして得られた N-Gram のうちの 1 つを t と表記する．次に，得られたすべての N-Gram に対して term

frequency tf (t, d) を式 (1) を用いて算出する．
tf (t, d) =|t : t ∈ d|
|d|

(1)

このとき，Mi ，Mn のそれぞれに対し，式 (7) で定義する

poss(t, Mx )(Mx = Mi or Mn ) を算出する．
{
1, |Mx | = 0∑
poss(t, Mx ) =(7)∀m∈Mx nsim(t,m,Mx ),otherwise|Mx |この poss(t, Mx ) は，クローンセット t とクローンセッ
ト集合 Mx 中のクローンセットの類似度を表しており，

tf (t, d) はあるクローンセット d 中に N-Gram t がどの

この値が高いほど t が Mx に属する確率が高いといえる．

程度の割合で出現するのかを表している．図 2 の場合，す提案手法では，poss(t, Mi ) と poss(t, Mn ) の値を比較し，べての N-Gram t に対して tf (t, d) を算出すると以下のよ

poss(t, Mi ) ≥ poss(t, Mn ) の場合に t は “有用” と判定し，うになる．

それ以外の場合は t は “有用でない” と判定する．

STRUCT ID TIMES:

0.06818181818181818

ID TIMES ID:

0.045454545454545456

TIMES ID LPAREN:

0.022727272727272728

ID LPAREN STRUCT:

0.022727272727272728

3. 評価実験
提案手法を実装したツール Fica を用い，評価実験を行った．本実験における評価項目は以下の通り．

...

• 利用者による “有用” か “有用でない” かの判別基準の続いて，inverse document frequency idf (t, D) を式違い(2) を用いて算出する．idf (t, D) は t がどれだけ多くのク• 提案手法による予測の精度

ローンセット内に出現するのかを表す指標であり，多くの以降，実験方法，実験結果，及び考察について述べる．

クローンセット内に出現している場合にその値が小さくなる．

|D|
idf (t, D) = log
1 + |d ∈ D : t ∈ d|

3.1 実験方法(2)

次に，式 (1) 及び式 (2) を用いて，tf idf を算出する (式(3)，式 (4)).

提案手法の予測精度を評価するため，4 つのオープンソー
スソフトウェアを対象とした評価実験を行った．実験対象のソフトウェアを表 1 に示す．これらのプロジェクトに含まれるファイルのうち，C 言語のソースファイルのみを実験の対象とした．また，表中の CSs はそのプロジェクト

tf idf (t, d, D) = tf (t, d) × idf (t, D)−−−−−−−→
tf idf (d, D) = [tf idf (t, d, D) ∀t ∈ d]

c 2012 Information Processing Society of Japan(3)

から検出されたクローンセットの総数を，Len はコードク(4)

ローン検出時の最小一致トークン数をそれぞれ表している．

3

ソフトウェアエンジニアリングシンポジウム 2012

値として，今回は 0.028 を設定している．類似度の高さがクローンセット間の結びつきの強さに対応しており，類似するクローンセットほどそれらの距離が短くなっている．
図 3 より，“有用でない” クローンセットは “有用” なク
ローンセットと比較して互いに類似度が高く，1 つの群として密集している．これは，“有用でない” コードクローン(a) git

はそのトークン型列の特徴によっていくつかのカテゴリに(b) xz分類できる可能性を示唆している．一方，“有用” と分類されたコードクローンは密集しておらず，カテゴリに分類することが難しい．すなわち，他のコードクローンとの類似度が小さい “有用な” コードクローンの判別には利用者の判断が重要であると考えられる．
さらに図 3 より，被験者によって “有用” か “有用でな(c) bashい” かの判別が分かれたクローンセットが多数存在するこ(d) e2fsprogs

図 3 クローンセット間の類似度を表すグラフとがわかる．このことは “有用” なコードクローンの特定Fig. 3 Force-Directed Graphs Showing Code Clone Similarity

を行う際に利用者ごとの判断基準の違いを反映させることの必要性を示唆している．

ここで最小一致トークン数とは，コードクローンとして検出されるコード片の最小の大きさ (トークン数) である．本
実験では e2fsprogs に対してのみ異なる最小一致トーク

3.3 提案手法による予測の精度についてそれぞれのプロジェクトについて，以下の手順で予測精ン数を用いているが，これは最小一致トークン数 48 でコー度の評価を行った．

ドクローンの検出を行った際に多くのクローンセットが検( 1 ) 被験者によって分類されたクローンセットのうち，一出され，実験に過度な負担がかかると判断したためである．

定数をランダムに抽出し，学習データとして Fica に

さらに本実験では，ソフトウェア開発やコードクローン検

登録する．

出技術について異なる知識，経験を持つ 8 人の被験者に協( 2 ) それぞれの被験者について，学習データとして登録

力を依頼し，検出された全 281 のクローンセットを “有用”

されていないクローンセットの分類を Fica に予測さもしくは “有用でない” のいずれかに分類させた．

せる．

( 3 ) Fica の予測結果と，実際に被験者が分類を行った結果
3.2 利用者による判別基準の違いについてがどの程度一致しているのかを調査する．

図 3 にクローンセット間の類似関係を force-directed ア
ルゴリズム [8] を用いてグラフ化したものを示す．グラフ
中の 1 つの頂点が 1 つのクローンセットを表しており，青に塗られた頂点は被験者によって “有用” と分類されたク( 4 ) (1)〜(3) を 256 回繰り返し，予測精度の平均値を算出する．

( 5 ) 学習データとして使用するクローンセットの数を変更
し，(1)〜(4) の手順を繰り返す．

ローンセットを，赤に塗られた頂点は “有用でない” と分

図 4 に実験結果を示す．グラフの X 軸が全クローンセッ

類されたクローンセットをそれぞれ表している．また，2

トのうち学習データとして使用したクローンセットの割合

つの色が共に塗られている頂点は被験者によって分類結果を表しており，Y 軸が Fica の予測結果と実際の被験者の分が異なるクローンセットを表しており，各色の面積比がそ

類結果が一致していた割合の平均値を表している．図 4 よれぞれの分類を行った被験者の比率に対応している．

り，Fica の予測精度は被験者により，またプロジェクトにクローンセット間の類似度 (式 (6)) が一定値以上の場合より大きく異なっていることがわかる．すべてのプロジェに，クローンセット間に辺が存在する．辺が存在する基準

クトに共通してみられる傾向として，グラフの右側ほど，
すなわち学習データとして与えるクローンセットの割合を

表 1 実験対象ソフトウェア

増やすほど，予測精度が向上している．

Table 1 Open Source Projects Used in Experiments

4 つのプロジェクトのうち，bash に対する予測精度が最

CSs

Len

LOC

TokensFilesも高く，被験者 A を除くすべての被験者に対して 15%以上

git

78

48

153,388829,930315のクローンセットを学習データとして与えることで 80%以

xz

36

48

25,873

113,894113

上の精度で予測を行えた．bash から検出されたクローン

bash

105

48

133,547494,248248

e2fsprogs

62

64

99,129442,978

274

Total

281

411,937

1,881,050

950

Project

c 2012 Information Processing Society of Japan

セット数は 105 であるため，16 のクローンセットに対して分類を行うことで 80%以上の精度で予測を行えるという結4

ソフトウェアエンジニアリングシンポジウム 2012(a) git(b) xz(c) bash(d) e2fsprogs
図 4 予測精度 (プロジェクトごと)

Fig. 4 Result of Machine Learning (for Each Project)

果となった．

この問題点は，他のメトリクスを組み合わせて類似度を算出することによって改善が見込まれる．

3.4 考察
評価実験の結果，Fica は概ね 70%〜90%の精度で予測できることが確認できた．この結果は，適切に予測できなかった事例がいくつか存在することを意味している．

4. 関連研究
Higo らは複数のメトリクスを用いてリファクタリングしやすいコードクローンを特定する手法を提案している [5]．

図 5 にそのような事例の 1 つを示す．この例は xz から

また，Koschke は機械学習技術を用いてライセンスに違反得られた例である．この例には以下の 2 つのクローンセッ

して流用されているソースコードの特定を支援する手法を

トが存在する．

提案している [9]．これらの手法はある特定の目的に特化

α： (a)130-142 & (b)61-72

しているのに対し，提案手法は様々な使用用途に対応する

β ： (a)136-145 & (c)475-484

ことが可能であるため，汎用性においてこれらの手法に勝

被験者実験の結果，8 人の被験者のうち 7 人が，α を “るといえる．

有用” と分類している．他方，β は 8 人中 6 人が “有用でJiang らは CCFinder によって得られた検出結果に対しない” と分類している．しかしながら，α と β の間の類似てデータマイニング手法を適用することでコードクローン

度を式 (5) を用いて算出すると，43%という値が得られる．

をフィルタリングする手法を提案している [10]．Jiang ら

この値は他のクローンセット同士の組み合わせから得られの手法は利用者による手動の分類を必要としない．提案手る類似度と比較して高い値である．このため，Fica は α が法は Jiang らの手法と比較して利用者の負担が大きくなる“有用” であるという学習データが存在した場合，β も同様

ものの，利用者ごとの判断基準の違いを繊細に反映させるに “有用” と判別する可能性が高い．

ことができる．

c 2012 Information Processing Society of Japan5

ソフトウェアエンジニアリングシンポジウム 2012

130
}
131
r e t u r n L Z M A _ P R O G _ E R R O R ;132 }133 s t a t i c v o i d
134 b l o c k _ e n c o r d e r _ e n d (l z m a _ c o d e r *c o d e r , . . . )
135 {
136
l z m a _ n e x t _ e n d (& c o d e r -> n e x t , a l l o c a t o r );137
l z m a _ f r e e (c o d e r , a l l o c a t o r );138
r e t u r n ;139 }14 0 s t a t i c l z m a _ r e t
14 1 b l o c k _ e n c o r d e r _ u p d a t e (l z m a _ c o d e r *c o d e r , . . . ,14 2
c o n s t l z m a _ f i l t e r *f i l t e r s ,14 3
c o n s t l z m a _ f i l t e r * r e v e r s e d _ f i l t e r s )14 4 {
14 5
i f (c o d e r -> s e q u e n c e ! = S E Q _ C O D E )価を行いたいと考えている．
謝辞 本研究は日本学術振興会科学研究費補助金基盤研
究 (A)(課題番号：21240002)，挑戦的萌芽研究 (課題番号：

23650014)，及び若手研究 (A)(課題番号：24680002) の助成を得て行われた．
参考文献[1](a) src/liblzma/common/block encoder.c
61
62
63
64
65
66
67
68
69
7 0
7 1
7 2
7 3

}
}

[2]

r e t u r n

L Z M A _ O K ;s t a t i c v o i da l o n e _ e n c o d e r _ e n d (l z m a _ c o d e r * c o d e r , . . . ){l z m a _ n e x t _ e n d (& c o d e r -> n e x t , a l l o c a t o r ) ;l z m a _ f r e e (c o d e r , a l l o c a t o r ) ;r e t u r n ;}s t a t i c l z m a _ r e t
a l o n e _ e n c o d e r _ i n i t (l z m a _ n e x t _ c o d e r * n e x t , . . .
c o n s t l z m a _ o p t i o n s _ l z m a * o p t i o n s )

[3]

[4]
,

(b) src/liblzma/common/alone encoder.c474
e l s e475
l z m a _ f r e e (c o d e r ->l z . c o d e r , a l l o c a t o r );476
l z m a _ f r e e (c o d e r , a l l o c a t o r );477
r e t u r n ;478 }479 s t a t i c l z m a _ r e t
48 0 l z _ e n c o d e r _ u p d a t e (l z m a _ c o d e r * c o d e r , . . . ,48 1
c o n s t l z m a _ f i l t e r * f i l t e r s _ n u l l ,48 2
c o n s t l z m a _ f i l t e r * r e v e r s e d _ f i l t e r s )48 3 {48 4
i f (c o d e r ->l z . o p t i o n s _ u p d a t e = = N U L L )

[5]

[6]

[7]

(c) src/liblzma/lz/lz encoder.c
図 5 ソースコード (xz)[8]

Fig. 5 Example of Source Code (xz)[9]5. あとがき
本稿では，機械学習を用いたコードクローンの自動フィ
ルタリング手法を提案した．提案手法はその利用者がいく
つかのコードクローンに対して与えた “有用” か否かの分類
情報を学習することで，未分類のコードクローンが “有用”

[10]

肥後芳樹，楠本真二，井上克郎：コードクローン検出とその関連技術，電子情報通信学会論文誌， Vol. J91-D,
No. 6, pp. 1465–1481 (2008).
神谷年洋，肥後芳樹，吉田則裕：コードクローン検出技術の展開，コンピュータソフトウェア， Vol. 28, No. 3,
pp. 28–42 (2011).
Bellon, S., Koschke, R., Antniol, G., Krinke, J. andMerlo, E.: Comparison and Evaluation of Clone Detection Tools, IEEE Transactions on Software Engineering, Vol. 31, No. 10, pp. 804–818 (2007).
Kamiya, T., Kusumoto, S. and Inoue, K.: CCFinder: A
multi-linguistic token-based code clone detection system
for large scale source code, IEEE Transactions on Software Engineering, Vol. 28, No. 7, pp. 654–670 (2002).
Higo, Y., Kusumoto, S. and Inoue, K.: A metricbased approach to identifying refactoring opportunities
for merging code clones in a Java software system, Journal of Software Maintenance and Evolution: Researchand Practice, Vol. 20, No. 6, pp. 435–461 (2008).
Tairas, R. and Gray, J.: An information retrieval process
to aid in the analysis of code clones, Empirical Software
Engineering, Vol. 14, pp. 33–56 (2009).
Jones, K.: A statistical interpretation of term speciﬁcity
and its application in retrieval, Journal of documentation, Vol. 28, No. 1, pp. 11–21 (1972).
Fruchterman, T. and Reingold, E.: Graph drawing byforce-directed placement, Software: Practice and experience, Vol. 21, No. 11, pp. 1129–1164 (1991).
Koschke, R.: Large-Scale Inter-System Clone Detection
Using Suﬃx Trees, Proc. of the 16th European Conference on Software Maintenance and Reengineering, pp.
309–318 (2012).
Jiang, Z. and Hassan, A.: A framework for studying
clones in large software systems, Proc. of the 7th International Working Conference on Source Code Analysis
and Manipulation, pp. 203–212 (2007).

か否かを自動的に判別する．提案手法を実装し，評価実験を行った．その結果，提案手法の予測精度は概ね 70%を超え，被験者やプロジェクトによっては 90%以上の精度で予測ができることを確認した．さらに，あるコードクローンが “有用” か否かの判断基準が利用者によって異なるということを確認した．
今後の課題として，類似度以外のメトリクス値を組み合わせることで予測精度を向上させることが挙げられる．また，現在は “有用” あるいは “有用でない” の二択による学
習データ作成を行っているが，これを拡張して，“有用さ”の度合いによる順位付けが可能な分類方式や，タグを用いた分類方式などに対応することを考えている．さらに，被験者のプログラミングに関する経験，知識の違いや，被験者ごとの’ 有用である” という判断基準の違いを加味した評

c 2012 Information Processing Society of Japan

6