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