識別子の共起関係を用いた類似コード検索手法の提案と実装
Download
Report
Transcript 識別子の共起関係を用いた類似コード検索手法の提案と実装
識別子の共起関係を用い
た類似コード検索手法の
提案と実現
井上研究室
博士前期課程2年
服部 剛之
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
1
概要
ソフトウェア保守を困難にする要因である類似
コードを検索する手法を提案する
検索キーワードを自動的に抽出
対象ソフトウェアに対する知識がなくても検索が可能
適用実験として,欠陥を含むコードの類似コー
ドを検索した
欠陥検出に対する有効性の評価
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2
類似コードが引き起こす問題点
類似コードはソフトウェア保守作業を困難にす
る要因
例)同様の内容を含む欠陥の修正
複数箇所に同様の修正を加える必要が生じることがある
欠陥の類似コードを検索する方法が必要
ソースコードの一部が
類似した箇所が存在
同様の内容を含む
欠陥が存在
欠陥が存在
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
3
類似コード検索
ソースコードの集合から,一致もしくは類似した
コード片(ソースコードの断片)を検索する
クエリ(検索質問)を与えることで検索を行う
キーワードをクエリとして与える方法
例)文字列照合コマンドgrep
ソースコードの集合
クエリ
(検索質問) 検索
request
開発者
・・・
・ request ・・
・・・
・・・
request・・・
・・・
・・・
・・・
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
4
grepを用いた類似コード検索
手順
1. ユーザがコード片からキーワードを抽出
2. grepによって,キーワードが出現する箇所を検索
3. 検索結果を基にキーワードを含むコード片を特定
問題点
適切なキーワードを抽出することが困難
対象のソースコード集合に対する知識が必要
同義語などのキーワードの変化形に対応すること
が困難
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
5
研究の目的とアプローチ
目的
自動的にキーワード抽出を行う類似コード検索
アプローチ
キーワード,キーワードの変化形を自動的に抽出
ソースコードの集合
提案手法
抽出部
キーワードの抽出
クエリ
開発者
クエリと類似した
コード片の集合
照合部
コード間の類似性の判定
コード片を与える
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
6
単語の共起関係に基づく関連語の検出法
ある単語と関連した単語を特定する手法
自然言語処理の分野で用いられている
単語間の共起関係を用いている
単語間の共起関係
関連語とは,文中で共起する単語が類似する単語対
This word is related to another example.
For example, it is related to another term.
It finds a similar word.
It found a similar term.
共に出現している
単語が類似
共に出現している
単語が類似
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
7
共起回数の分布
他の単語と文中で共起した回数を表した分布
関連語は,分布が類似している
This word is related to another example.
For example, it is related to another term
term.
It finds a similar word
word.
共起回数の分布が類似
It found a similar term
term.
term word
word another example found
term
term
term
word
word
0
0
1
1
1
1
1
0
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
8
提案手法の概要(抽出部)
1.
モジュール中で共起する識別子が類似する識別子の対を
関連語とする
2.
3.
単語の共起回数の分布に基づいて関連語を求める手法[1]を利用
モジュール単位で頻出する識別子を特徴語とする
特徴語を含むコードの構文を求める
モジュールB
代入文
代入文
...
... モジュールA
node
node = node_alloc(...);
host = host
host_alloc(...);
if (...) {
log(...);
hostとnodeは関連語
条件節
return;
条件節
}
if (!add_host(host))
host host {
if(!add_node(node))
node node {
// scan_host(host)
// scan_node(node)
// is missing!
// is missing!
}
hostが特徴語
nodeが特徴語
}
...
...
Department of Computer
Science,
School of Information
Science & Technology,
Osaka
University1999
[1] I. Dagan, et al. "Similarity-Based
Models
ofGraduate
Word Cooccurrence
Probabilities",
Machine
Learning,
9
提案手法の概要(照合部)
1.
2.
クエリのコード片から特徴語を含むコードを求める
特徴語を含むコードの対応付けを行う
特徴語が一致,もしくは関連語の関係にある
構文が一致
関連語はhostとnode
クエリの類似コード
比較対象
クエリのコード片
...
...
node = node_alloc(...);
host = host_alloc(...);
if (...) {
log(...); 特徴語が関連語の関係にある
return;
構文が代入文
}
if (!add_host(host)) {
if(!add_node(node)) {
// scan_host(host)
// scan_node(node)
// is missing!
特徴語が関連語の関係にある
// is missing!
}
構文が条件節
hostが特徴語
nodeが特徴語
}
...
...
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
10
実験概要
実験対象に存在している欠陥の箇所をクエリとする
クエリと同じ欠陥を含むコード片がどの程度検索結果
に含まれているか調べる
実験対象
クエリと類似した
モジュールの集合
提案手法
抽出部
キーワード等の抽出
クエリ
照合部
コード間の類似性の判定
ユーザ 欠陥を含むコード片
クエリと同じ欠陥を含むコード片が
含まれているか調べる
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
11
実験対象
日本語入力システム かんな
後のバージョンでバッファのオーバーフローを検知するコー
ドが追加
ソフトウェア部品検索システム SPARS-J
複数の関数において型キャストが追加
モジュールの単位を関数単位とした
かんなの修正事例
ir_debug( Dmsg(10, "ProcWideReq2 start!!\n") );
if (Request.type2.datalen != SIZEOFSHORT)
return( -1 );
バッファオーバーフローを検知
buf += HEADER_SIZE; Request.type2.context = S2TOS(buf);
ir_debug( Dmsg(10, "req->context =%d\n", Request.type2.context) );
・・・
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
12
実験の設定
関連語を設定する閾値
1.
識別子間の距離を算出
2.
共起回数の分布の差異を利用
識別子間の距離が閾値以下の識別子を関連語と設定
閾値を変化させて実験を行った
対象ソフトウェアでの識別子間の距離の最大値を求め,最
大値の0%~100%まで10%刻みで変化させた
0%
共に出現する識別子の種類が等しい識別子が関連語
100%
全ての識別子が関連語
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
13
評価基準
それぞれのクエリについて,適合率,再現率を
求めた
適合率: 検索された欠陥を含む関数の数
× 100 (%)
検索された関数の数
検索結果のノイズの少なさを表す
再現率:
検索された欠陥を含む関数の数
欠陥を含む関数の総数
× 100 (%)
検索結果の漏れの少なさを表す
欠陥を含む関数
検索された関数
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
14
実験結果
実験結果:かんな
実験結果:かんな
100%
80%
60%
適合率の平均
再現率の平均
40%
20%
0%
0%
10%
20%
30%
40%
50%
60%
70%
クラスタリングの閾値として設定した割合
80%
90%
100%
実験結果:SPARS-J
実験結果:SPARS-J
100%
80%
60%
適合率の平均
再現率の平均
40%
20%
0%
0%
10%
20%
30%
40%
50%
60%
70%
クラスタリングの閾値として設定した割合
80%
90%
100%
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
15
考察
欠陥を漏れなく検出することが要求される条件
下では,提案手法は有効である
クラスタリングの閾値に対して,基準となる値が
設定できると期待される
今回の実験では,10%~30%が基準に利用可能
入力コード片の選び方で,検出結果が変わる
可能性がある
入力コード片のサイズで,特徴語が変化
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
16
まとめと今後の課題
識別子の共起関係に基づいて類似コード片を
検索する手法を提案
コード片から自動的にキーワードを抽出
提案手法を欠陥検出に適用し,実験を行った
適合率は低いが,再現率は高い結果
今後の課題
他のソフトウェアを対象とした実験
入力コード片のサイズが与える影響の調査
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
17