識別子の共起関係を用いた類似コード検索手法の提案と実装

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