プログラム依存グラフを用いた ソースコードのパターン違反検出法

Slides:



Advertisements
Similar presentations
シーケンス図の生成のための実行履歴圧縮手法
Advertisements

XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
CCC DATAset における マルウェアの変遷
シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法
知識情報演習Ⅲ(後半第1回) 辻 慶太(水)
AGMアルゴリズムを用いた ギャップを含むコードクローン情報の生成
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
情報伝播によるオブジェクト指向プログラム理解支援の提案
プログラムの動作を理解するための技術として
【ICSE2012 勉強会】 Recovering Links between an API and Its Learning Resources 担当 : 岩崎 慎司(NTTデータ)
複数のモジュールに共通する ソースコード片の検出と活用
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
分散処理を用いた大規模ソフトウェアに対するコーディングパターン検出ツール
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
アイテムセットマイニングを利用した コードクローン分析作業の効率向上
相関ルールマイニングを用いた メソッドの命名方法の分析
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
静的情報と動的情報を用いた プログラムスライス計算法
ギャップを含むコードクローンの フィルタリング手法の提案
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
動的スライスを用いた バグ修正前後の実行系列の比較
動的依存グラフの3-gramを用いた 実行トレースの比較手法
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
WWW上の効率的な ハブ探索法の提案と実装
構造情報に基づく特徴量を用いた グラフマッチングによる物体識別 情報工学科 藤吉研究室  EP02086 永橋知行.
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
コンポーネントランク法を用いたJavaクラス分類手法の提案
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
連続領域におけるファジィ制約充足問題の 反復改善アルゴリズムによる解法 Solving by heuristic repair Algorithm of the Fuzzy Constraint Satisfaction Problems with Continuous Domains 北海道大学.
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
不確実データベースからの 負の相関ルールの抽出
プログラム理解におけるThin sliceの 統計的調査による有用性評価
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
パターンマイニング技術を 用いた実時間プログラムの コーディングパターン検出
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
コーディングパターンの あいまい検索の提案と実装
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
ソフトウェアプロダクト集合に対する 派生関係木の構築
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
dcNavi:デバッグ支援のための グラフベース推薦システム
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
分散処理を用いたコーディングパターン検出ツールの実装
プログラム依存グラフの一貫性検査に基づく欠陥候補の検出手法
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
識別子の読解を目的とした名詞辞書の作成方法の一試案
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
Detecting Software Modularity Violations
Presentation transcript:

プログラム依存グラフを用いた ソースコードのパターン違反検出法 井上研究室 山田 吾郎

背景 パターン違反を検出したい パターン パターンの実装に誤り(パターン違反)が生じ得る 複数ヶ所に出現する特定の処理を実現するための実装[1] パターンの実装に誤り(パターン違反)が生じ得る 一部が欠落[2] 順序の誤り 識別子名の変更漏れ open(a); : read(a); close(a); open(b); : read(b); close(b); open(c); : read(c); close(c); open(d); : read(d); イディオムjはややこしいから使わない!!」 パターン違反を検出したい [1]石尾 隆ら. シーケンシャルパターンマイニングを用いたコーディングパターン抽出. 情報処理学会論文誌, 2009 [2]A. Wasylkowski et al., Detecting object usage anomalies. In Proc. of ESEC/FSE 2007, 2007

既存手法と問題点 確信度: “パターン違反らしさ”を表す値 パターンの正しい実装と違反との出現比 モデル構築 パターン抽出 違反検出 ソート ソースコード モデル パターン (頻出部分構造) パターン違反 モデル構築 パターン抽出 違反検出 ソート ------ - -- --- --------- -- - ------ --- --------- --- - -- ------ --------- 確信度 確信度 モデルの簡略化 抽出可能なパターンが減少 高い確信度を用いた検出 検出漏れが増加 モデル作る 目標に沿った最適化 パターン抽出する 頻出する部分構造.例えばグラフなら… 違反検出する 確信度を使う.確信度の話を読み上げる. 問題点 抽出が重いからモデルを簡略化→とれないパターン→欠陥が 誤検出が多いから確信度を高く設定→少数出現する違反はとれない 確信度: “パターン違反らしさ”を表す値 パターンの正しい実装と違反との出現比 高ければ高いほど違反らしい

提案手法:概要 PDG PDG構築 パターン抽出 違反検出 ソート プログラム依存グラフ (PDG) 低い確信度での検出 複数のメトリクス ソースコード PDG パターン パターン違反 PDG構築 パターン抽出 違反検出 ソート ------ - -- --- --------- -- - ------ --- --------- --- - -- ------ --------- プログラム依存グラフ (PDG) 低い確信度での検出 複数のメトリクス 5つのメトリクスにより フィルタリング ソート 誤検出の低下 従来手法に比べ多くの情報を持つ 抽出可能なパターンが増加 出現数の少ない違反を検出可能 誤検出増加

提案手法:プログラム依存グラフ 1 2 3 4 5 抽象化が少なく多くの情報をもつ グラフの構成要素 頂点: プログラムの文・条件式 辺: データ依存関係・制御依存関係 1 1: int i = 0; 2: i = method(); 3: if ( i > 0) 4: ..i = x; 5: y = i; 2 3 4 5

提案手法:パターン抽出の例 パターン抽出 P1 P2 PDGの構築 ソースコード 2段目3段目キャプション入れる --- - -- ------ --------- PDGの構築 --- - -- ------ --------- --- - -- ------ --------- ソースコード パターン抽出 P1 2段目3段目キャプション入れる P2

提案手法:違反候補の検出 確信度: パターンP1が存在するPDG中でP2も出現する条件付き確率 頂点 の欠落によるパターン違反 P1 P1が変種なんやから,1.0ちゅうことは変種の定義によりやな P2

提案手法:メトリクス 5つのメトリクスを提案 リフト値 頂点欠落数 違反PDG数 頂点重複度 平均ギャップ長 頂点欠落数: 1 どれを説明してるかキャプション 頂点欠落数: 1 違反PDG数: 1

評価実験:概要 既存研究であるGrouMiner[1]と比較実験を行う 目的 実験方法 GrouMinerはPDGに近似したモデルを使用 誤検出を抑えながら,少数しか出現しない違反を検出できるか 実験方法 準備としてメトリクスの閾値を決定する実験を行う 本手法,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% 違反検出 ------ --- --------- 欠陥 閾値 違反検出 ------ --- --------- それぞれのメトリクスの中で最悪値を閾値に 表現に一貫性がない 全てのメトリクスで上位50%に存在する候補に絞り込み 絞りこまれた全候補から欠陥を調査,列挙

評価実験:結果 プロジェクト名 GrouMiner 確信度0.9 本手法 欠陥数(上位15件) 確信度 0.9 0.6 確信度0.6 &フィルタリング Apache Ant 145 34 960 24 1 2 Apache log4J 32 8 143 11 AspectJ 244 26 368 14 Apache Axis 689 27 Columba 40 144 1343 50 jEdit 47 36 632 Jigsaw 115 41 723 Struts 33 5 137 3 合計6:5 誤検出を抑えながら検出できたか? 向こうでとれてたのがとれてません>< でも既存手法でとれなかったのがとれていますね^q^

org.apache.axis.components.net.JSSESocketFactory 検出例 Apache Axisからの欠陥: 確信度0.67 public Socket create(...) throws Exception { if (port == -1) { port = 443;} : Socket sslSocket = null; org.apache.axis.components.net.JSSESocketFactory 欠落 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と比較実験 誤検出の増加を抑えながらパターン違反を検出 今後の課題 手法の高速化 フィルタリングの有効性を他の手法で確認

ご清聴ありがとうございました