欠陥検出を目的とした
類似コード検索法
吉田則裕,石尾隆,松下誠,井上克郎
大阪大学 大学院情報科学研究科
{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
© Copyright 2026 ExpyDoc