150 likes | 337 Views
プログラム依存グラフを用いた ソースコードのパターン違反検出法. 井上研究室 山田 吾郎. 背景. パターン 複数ヶ所に出現 する 特定の処理を実現するための実装 [1] パターンの実装に誤り ( パターン違反 ) が生じ得る 一部が欠落 [2] 順序の誤り 識別子名の変更漏れ. open(d); : read(d); : :. open(c); : read(c); : close(c);. open(a); : read(a); : close(a);. open(b); : read(b); :
E N D
プログラム依存グラフを用いたソースコードのパターン違反検出法プログラム依存グラフを用いたソースコードのパターン違反検出法 井上研究室 山田 吾郎
背景 • パターン • 複数ヶ所に出現する特定の処理を実現するための実装[1] • パターンの実装に誤り(パターン違反)が生じ得る • 一部が欠落[2] • 順序の誤り • 識別子名の変更漏れ open(d); : read(d); : : open(c); : read(c); : close(c); open(a); : read(a); : close(a); open(b); : read(b); : close(b); パターン違反を検出したい [1]石尾 隆ら. シーケンシャルパターンマイニングを用いたコーディングパターン抽出. 情報処理学会論文誌,2009 [2]A. Wasylkowski et al., Detecting object usage anomalies. In Proc. of ESEC/FSE 2007, 2007
既存手法と問題点 • 確信度: “パターン違反らしさ”を表す値 • パターンの正しい実装と違反との出現比 • 高ければ高いほど違反らしい パターン (頻出部分構造) パターン違反 ソースコード モデル パターン抽出 違反検出 ソート モデル構築 ------ - -- ------ --- --- --------- -- - -- ------ --- --- --------- --- - -- ------ --- --- --------- 確信度 確信度 モデルの簡略化 抽出可能なパターンが減少 高い確信度を用いた検出 検出漏れが増加
提案手法:概要 • 従来手法に比べ多くの情報を持つ 抽出可能なパターンが増加 パターン パターン違反 ソースコード PDG パターン抽出 違反検出 ソート PDG構築 ------ - -- ------ --- --- --------- -- - -- ------ --- --- --------- --- - -- ------ --- --- --------- プログラム依存グラフ (PDG) 低い確信度での検出 複数のメトリクス 複数のメトリクス • 出現数の少ない違反を検出可能 • 誤検出増加 • 5つのメトリクスにより • フィルタリング • ソート • 誤検出の低下
提案手法:プログラム依存グラフ • 抽象化が少なく多くの情報をもつ • グラフの構成要素 • 頂点: プログラムの文・条件式 • 辺:データ依存関係・制御依存関係 1 1:inti = 0; 2:i = method(); 3: if ( i > 0) 4:..i = x; 5: y = i; 2 3 4 5
提案手法:パターン抽出の例 --- - -- ------ --- --- --------- PDGの構築 --- - -- ------ --- --- --------- --- - -- ------ --- --- --------- ソースコード パターン抽出 P1 P2
提案手法:違反候補の検出 • 確信度: パターンP1が存在するPDG中でP2も出現する条件付き確率 • 確信度が1ではなく,かつ利用者が定めた閾値より大きい時,P1のみが出現するPDGがパターン違反 頂点 の欠落によるパターン違反 P1 P2
提案手法:メトリクス • 5つのメトリクスを提案 • リフト値 • 頂点欠落数 • 違反PDG数 • 頂点重複度 • 平均ギャップ長 • 頂点欠落数: 1 • 違反PDG数: 1
評価実験:概要 • 既存研究であるGrouMiner[1]と比較実験を行う • GrouMinerはPDGに近似したモデルを使用 • 目的 • パターン抽出に用いるデータ増加によりGrouMinerで検出できなかったパターンを抽出できるか • 誤検出を抑えながら,少数しか出現しない違反を検出できるか • 実験方法 • 準備としてメトリクスの閾値を決定する実験を行う • 本手法,GrouMinerともに上位15件を調査し分類 • [1]T.T. Nguyen et al., Graph-based mining of multiple object usage • patterns. In Proc. of ESEC/FSE 2009, 2009
評価実験:閾値決定 違反候補 上位50% プロジェクト 違反検出 欠陥 閾値 違反検出 ------ --- --- --------- ------ --- --- --------- それぞれのメトリクスの中で最悪値を閾値に ------ --- --- --------- ------ --- --- --------- 全てのメトリクスで上位50%に存在する候補に絞り込み 絞りこまれた全候補から欠陥を調査,列挙
検出例 • Apache Axisからの欠陥: 確信度0.67 org.apache.axis.components.net.JSSESocketFactory public Socket create(...) throws Exception { if (port == -1) { port = 443;} : Socket sslSocket = null; : 欠落 org.apache.axis.components.net.SunJSSESocketFactory等2箇所 public Socket create(...) throws Exception { Socket sslSocket = null; if (sslFactory == null){ initFactory(); } if (port == -1) { port = 443;} :
まとめと今後の予定 • まとめ • PDGをもとにパターン違反を検出する手法を提案 • ツールを実装し,GrouMinerと比較実験 • 誤検出の増加を抑えながらパターン違反を検出 • 今後の課題 • 手法の高速化 • フィルタリングの有効性を他の手法で確認