依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
ラベル付き区間グラフを列挙するBDDとその応用
スケールフリーネットワークにおける 経路制御のためのフラッディング手法の提案と評価
神奈川大学大学院工学研究科 電気電子情報工学専攻
プログラムの動作を理解するための技術として
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
プログラム静的解析手法の効率化と 解析フレームワークの構築に関する研究
大阪大学 大学院基礎工学研究科 情報数理系専攻 ソフトウェア科学分野 高田 智規
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
二分探索木によるサーチ.
プログラム実行履歴を用いたトランザクションファンクション抽出手法
静的情報と動的情報を用いた プログラムスライス計算法
ギャップを含むコードクローンの フィルタリング手法の提案
プログラム依存グラフを利用した 情報漏洩解析手法の提案と実現
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
動的スライスを用いた バグ修正前後の実行系列の比較
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
オブジェクト指向プログラムにおける エイリアス解析について
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
限られた保存領域を使用する Javaプログラムの実行トレース記録手法の 提案と評価
Javaプログラムの変更を支援する 影響波及解析システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
コンポーネントランク法を用いたJavaクラス分類手法の提案
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
オブジェクト指向プログラムにおける エイリアス解析・視覚化ツールの試作
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
UMLモデルを対象とした リファクタリング候補検出の試み
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
セキュリティ解析アルゴリズムの実現と オブジェクト指向言語への適用に関する一考察
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
Q3 On the value of user preferences in search-based software engineering: a case study in software product lines Abdel Salam Sayyad (West Virginia University,
静的情報と動的情報を用いた Javaプログラムスライス計算法
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
メソッドの同時更新履歴を用いたクラスの機能別分類法
アスペクト指向プログラミングの 動的プログラムスライスへの応用
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
発表者: 稲葉 一浩 複雑ネットワーク・地図グラフ セミナー 2017/1/19
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Detecting Software Modularity Violations
Presentation transcript:

依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法 大畑 文明 西松 顯 井上 克郎 大阪大学大学院 基礎工学研究科

発表内容 プログラムスライス 既存の手法の問題点 提案する手法 評価実験 まとめ 今後の課題 99/03/18 第122回 ソフトウェア工学研究会

研究の背景 ソフトウェアの大規模化・複雑化に伴い、ソフトウェア開発コストの50~80%をテスト工程に費やすという報告がある(Robson, D.J et al., “Approaches to Program Comprehension”, J.System Software, Vol.14, No.1, 1991.) テスト工程の中で最も時間のかかる作業がフォールト位置特定である フォールト位置の特定を効率よく行う手法として、プログラムスライスが提案されている 99/03/18 第122回 ソフトウェア工学研究会

プログラムスライス プログラム中のある文sのある変数v (スライス基準)の値に影響を与えうる文の集合 スライス基準(5, b)のスライス スライスの他の用途 プログラム再利用・プログラム理解 1: b = 5; 2: a = b + b; 3: if(a > 0) { 4: c = a: 5: d = b; } 1: b = 5; 2: a = b + b; 3: if(a > 0) { 4: c = a: 5: d = b; } スライス基準(5, b)のスライス 99/03/18 第122回 ソフトウェア工学研究会

スライスの計算過程 スライス計算問題 グラフ到達問題 99/03/18 第122回 ソフトウェア工学研究会

Phase 1: 定義・参照変数抽出 各文の定義・参照変数を抽出 1: b = 5; 2: a = b + b; 3: if(a > 0) { 4: c = a: 5: d = b; } 99/03/18 第122回 ソフトウェア工学研究会

Phase 2-1: (データ)依存関係解析 文間に存在するデータ依存関係を抽出 ある変数wが存在して、文sにおける変数wの定義が、変数wを参照している文tに到達 データ依存関係DD(s, w, t)が存在 DD(1, b, 2), DD(2, a, 3) DD(1, b, 5), DD(2, a, 4) 1: b = 5; 2: a = b + b; 3: if(a > 0) { 4: c = a: 5: d = b; } 99/03/18 第122回 ソフトウェア工学研究会

Phase 2-2: (制御)依存関係解析 文間に存在する制御依存関係を抽出 文sが分岐(繰り返し)命令であり、その分岐(繰り返し)節が文tを直接含む 制御依存関係CD(s, t)が存在 CD(3, 4), CD(3, 5) 1: b = 5; 2: a = b + b; 3: if(a > 0) { 4: c = a: 5: d = b; } 99/03/18 第122回 ソフトウェア工学研究会

Phase 3: プログラム依存グラフ構築 プログラムに存在する文・依存関係を有向グラフで表現した(節点 Û 文, 辺 Û 依存関係)、プログラム依存グラフ(PDG)を作成 1: b = 5; 2: a = b + b; 3: if(a > 0) { 4: c = a: 5: d = b; } 99/03/18 第122回 ソフトウェア工学研究会

Phase 4: スライス抽出 スライス基準に対応した節点からPDG辺を逆にたどる 到達可能節点 Û スライス基準に対するスライス 1: b = 5; 2: a = b + b; 3: if(a > 0) { 4: c = a: 5: d = b; } 1: b = 5; 2: a = b + b; 3: if(a > 0) { 4: c = a; 5: d = b; } 99/03/18 第122回 ソフトウェア工学研究会

既存の手法の問題点 「よりきめ細かい依存関係解析を行い、スライスの大きさを小さくする」ことを目標としてきた ポインタ解析、構造体・配列の要素を区別 関数間の依存解析 大規模プログラムに対する同様の要求は困難 28,000行のプログラムに対し、620MBのメモリ空間・2時間の解析時間(The Wisconsin Program-Slicing Tool 1.0, Reference Manual. Computer Science Department, University of Winconsion-Madison, August 1997.) 99/03/18 第122回 ソフトウェア工学研究会

既存の手法の問題点 続き コスト軽減のため多くの依存関係解析アルゴリズムが提案され、スライスの正確性(スライスの大きさ)とのトレード・オフが考えられてきた(Atkison, D. C. and Griswold, W. G. “The Design of Whole-Program Analysis Tools”. In Proceedings of the 18th International Conference on Software Engineering, Berlin, Germany, pages 16--27, 1996.) 異なる依存関係解析アルゴリズムで構築されたPDGは相互利用が困難 99/03/18 第122回 ソフトウェア工学研究会

提案する手法 依存関係解析アルゴリズム(Phase 2:)と独立した、コスト削減 従来PDG節点と文は1対1対応であったものを、1節点で複数文を処理(節点集約) 情報共有による、情報量(空間コスト)削減 計算対象の削減による、計算量(時間コスト)削減 99/03/18 第122回 ソフトウェア工学研究会

節点集約 位置付け 対象 「Phase 2: 依存関係解析」と独立 依存関係解析前に集約を実行(Phase 1.5: 集約) 集約の時間コストを最小限に抑える 制限された依存関係情報 PDG構築後の、正確性の変更コストを抑える 文・プログラム構造のまとまりに限定 99/03/18 第122回 ソフトウェア工学研究会

集約の問題 単純に連続した文を集約すると、スライスが著しく不正確になる可能性がある 1: a = 1; 2: b = 1; 3: c = 1; 4: d = 1; 5: if(a > 0) { 6: e = b; 7: f = c * d; 8: g = f + c + d + a; } 9: h = g; 10: i = e; (7) (9) 99/03/18 第122回 ソフトウェア工学研究会

集約の方針 同じ文に依存する(依存関係の局所性を有する)文の集約では、正確性の低下を抑えることができる 1: a = 1; 2: b = 1; 3: c = 1; 4: d = 1; 5: if(a > 0) { 6: e = b; 7: f = c * d; 8: g = f + c + d + a; } 9: h = g; 10: i = e; (7) (7) 99/03/18 第122回 ソフトウェア工学研究会

依存関係の局所性 隣接する2文に関して、それらが依存している文が一致していること 依存関係の局所性を把握するため、局所データ依存関係LD(s, w, t)を定義 99/03/18 第122回 ソフトウェア工学研究会

局所データ依存関係 直接のデータ依存関係に加え、間接的なデータ依存関係を含んでいる 集約対象文s1・s2の全参照変数集合Aに対し、"a$t[aÎA ® LD(t, a, s1)&LD(t, a, s2)]を満たす場合、集約を行う 99/03/18 第122回 ソフトウェア工学研究会

依存関係の局所性(例1) (直接の)参照変数の一致 1: a = 1; 2: b = 1; 3: c = a + b; 4: d = a + b; 99/03/18 第122回 ソフトウェア工学研究会

依存関係の局所性(例2) (DD+DD間接を含む)参照変数の一致 1: a = 1; 2: b = 1; 3: c = a + b; 4: d = c; 99/03/18 第122回 ソフトウェア工学研究会

依存関係の局所性(例3) (DD+CD間接を含む)参照変数の一致 1: a = 1; 2: b = 1; 3: if(a > 0) { 4: c = b; 5: d = a + b; } 99/03/18 第122回 ソフトウェア工学研究会

集約の判定(例) 文7・文8の集約 1: a = 1; 2: b = 1; 3: c = 1; 4: d = 1; 5: if(a > 0) { 6: e = b; 7: f = c * d; 8: g = f + c + d + a; } 9: h = g; 10: i = e; 99/03/18 第122回 ソフトウェア工学研究会

集約アルゴリズム 判定に必要な局所データ依存関係LDは、 「Phase 1: 定義・参照変数抽出」で取得可能 DD集合 Í LD集合であるため、集約によりスライスに含まれるべき文が含まれなくなることはない プログラム構造ごとの判定および集約 99/03/18 第122回 ソフトウェア工学研究会

集約アルゴリズム 続き 依存している文が一致する場合のみの集約は厳密であるため、集約許容値limit(³0)を定義 99/03/18 第122回 ソフトウェア工学研究会

評価実験 我々が試作したスライスツールへの機能追加 テストプログラム テスト項目 サブセットPascalを対象(レコード型・ポインタ なし) 空間コスト(PDGの節点・辺数) 時間コスト(解析時間) 正確性(スライスサイズ) 99/03/18 第122回 ソフトウェア工学研究会

実験結果(空間コスト) その1 PDG節点数[個] 99/03/18 第122回 ソフトウェア工学研究会

実験結果(空間コスト) その2 PDG辺数[本] 99/03/18 第122回 ソフトウェア工学研究会

実験結果(時間コスト) 解析時間[ms] Phase 1: (Phase 1.5:) Phase 2: Phase 3: PentiumII-300MHz-128MB(Linux) 99/03/18 第122回 ソフトウェア工学研究会

実験結果(スライスサイズ) 平均スライスサイズ[文] 99/03/18 第122回 ソフトウェア工学研究会

考察 約500行のプログラムに対し、PDGの空間コスト:6.7~45.1%・時間コスト:10.0~40.0%の削減を行うことができた より大きなプログラムに対して集約によるスライス正確性低下が抑えられる傾向がある 99/03/18 第122回 ソフトウェア工学研究会

まとめ プログラムスライスの紹介を行った 節点集約によるPDG構築コストの削減手法を提案し、その有効性を実験により評価した 99/03/18 第122回 ソフトウェア工学研究会

今後の課題 ポインタ変数を持つ言語への本アルゴリズムの適応 PDG構築後の節点分解 大規模プログラムに対する有効性の評価 プログラム理解に対する有効性の評価 99/03/18 第122回 ソフトウェア工学研究会