実験 結果報告 - Software Engineering Laboratory

欠陥検出を目的とした
類似コード検索法
吉田則裕,石尾隆,松下誠,井上克郎
大阪大学 大学院情報科学研究科
{n-yosida, ishio, matusita, inoue}@ist.osaka-u.ac.jp
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
1
ソフトウェア保守と類似コード

類似コード(コードクローン)
 ソフトウェアの保守を困難にする要因の1つ
 コピー&ペーストなどが原因で発生
 欠陥が見つかると,その類似コードも検査する必要
がある
 全ての類似コードを人手で見つけることは難しい
類似コード
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2
類似コード検索

対象ファイル群から,選択したコード片に対応
するコード片を検索
ファイルA
ファイルB ファイルC ファイルD
コード片
を選択
コード片 CF = ( FromLine, FromColumn, ToLine, ToColumn )で定義される
上図を例に取ると,F( CFA ) = { CFB, CFC, CFD } となる目的関数Fを定義する問題
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
3
既存の類似コード検索技術

キーワード検索を用いた方法
入力コード片と検査対象のコード片の間で,キーワ
ードが共通している必要がある
 識別子の変化形に対応できない


コードクローン検出法を用いた方法

トークンや構文木ベースの検出法


トークン列や構文木が一致している必要がある
PDGベースの検出法

スケーラビリティが低い
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
4
識別子列の類似性に基づく類似コード検出法


対象識別子列から,入力識別子列の類似部分列を抽出
入力識別子列
Li
Ii[0]
Ii[1]
Ii[2]
対象識別子列
Lt
It[0]
It[1]
It[2]
It[3]
It[n-1]
It[n]
類似部分列の抽出および順位付け

入力識別子列をスライドさせながら類似度を計測

入力識別子Liからなる集合をSi,部分列の識別子からなる集合をSwとすると,
Similarity(Si, Sw) 


2  Si  Sw
Si  Sw
計測した類似度によって,類似部分列を順位付けする
類似度が0のコード片は検索結果に含めない
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
まとめと今後の課題

識別子列の類似性に基づく類似コード検出法を提案
 対象識別子列から,入力識別子列の類似部分列を抽出
 類似度に基づく順位付け
 拡張方法



識別子の変化形への対応
データフロー解析等の他の解析法を用いた順位付け法の拡張
今後の課題
 提案手法の実装
 論文で挙げられているオープンソースソフトウェアの欠陥に
適用
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
7