オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
アルゴリズムとプログラミング (Algorithms and Programming)
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
情報伝播によるオブジェクト指向プログラム理解支援の提案
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
F11: Analysis III (このセッションは論文2本です)
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
プログラム静的解析手法の効率化と 解析フレームワークの構築に関する研究
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
静的情報と動的情報を用いた プログラムスライス計算法
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
プログラム依存グラフを利用した 情報漏洩解析手法の提案と実現
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
暗黙的に型付けされる構造体の Java言語への導入
ポインタ解析におけるライブラリの スタブコードへの置換の効果
オブジェクト指向プログラムにおける エイリアス解析について
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
コンパイラ 2012年11月15日
Javaプログラムの変更を支援する 影響波及解析システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
オブジェクト指向プログラムにおける エイリアス解析・視覚化ツールの試作
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
制御フローを考慮しない データ依存関係解析の実験的評価
セキュリティ解析アルゴリズムの実現と オブジェクト指向言語への適用に関する一考察
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
ソフトウェア工学 知能情報学部 新田直也.
静的情報と動的情報を用いた Javaプログラムスライス計算法
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
設計情報の再利用を目的とした UML図の自動推薦ツール
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
保守請負時を対象とした 労力見積のためのメトリクスの提案
メソッドの同時更新履歴を用いたクラスの機能別分類法
アスペクト指向プログラミングの 動的プログラムスライスへの応用
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
ソフトウェア工学 知能情報学部 新田直也.
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
識別子の読解を目的とした名詞辞書の作成方法の一試案
プログラム理解のための 付加注釈 DocumentTag の提案
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現 大畑 文明 井上研究室 2000/02/22 修士論文発表会

エイリアス (引数の参照渡し・参照変数・ポインタを介した間接参照などで生じる,)同じメモリ領域を指す可能性のある式間の同値関係 エイリアス解析結果の利用分野 プログラム依存関係解析/コンパイラ最適化 プログラム理解 インスタンス生成式 Integer a, b, c; 1: a = new Integer(1); 2: b = new Integer(2); 3: c = b; 4: System.out.println(c); 5: c = a; 6: System.out.println(c); 参照変数 「エイリアス指定」 2000/02/22 修士論文発表会

エイリアス計算手順 到達エイリアス集合(Reaching Alias, RA)を利用 RA(s) ⇔ 文sに到達可能なエイリアス組の集合 プログラム実行経路をたどりながら,順次計算 文 到達エイリアス集合 RA(s) 1 Φ 2 {(1, a), (1, new Integer)} 3 {(1, a), (1, new Integer)}, {(2, b), (2, new Integer)} 4 {(3, c), (2, b), (3, b), (2, new Integer)} 5 {(4, c), (3, c), (2, b), (3, b), (2, new Integer)} 6 {(5, c), (4, a), (1, a), (1, new Integer)}, {(2, b), (3, b), (2, new Integer)} Integer a, b, c; 1: a = new Integer(1); 2: b = new Integer(2); 3: c = b; 4: System.out.println(c); 5: c = a; 6: System.out.println(c); 2000/02/22 修士論文発表会

問題点 エイリアス解析共通の問題 OOプログラムにおけるエイリアス解析特有の問題 1) 到達エイリアス(RA)集合に依存した解析 プログラムのフローに従って解析をすすめるため,通常プログラムの一部を変更しても全体を再解析する必要がある. OOプログラムにおけるエイリアス解析特有の問題 2) 解析結果の再利用が考慮されていない 再利用性を持つOOプログラムでは,モジュール(クラス/メソッド)単位でエイリアス情報を保持し再利用可能にすることで,解析コストの削減が期待できる.また,要求に応じたエイリアス解析にも有効. 3) インスタンス属性の取り扱いコストが大きい インスタンス内部のエイリアス情報を同一クラスのインスタンスで共有する場合,正確な解析結果が期待できない.すべてを区別する場合,多くのコストが必要となる. 2000/02/22 修士論文発表会

研究の目的 本研究では,エイリアスフローグラフ(AFG)による,OOプログラムに対するエイリアス解析手法を提案する 問題点への対処 1) RA集合は,AFG構築のためのメソッド(クラス)内でのエイリアス解析でのみ利用される.エイリアス計算はグラフの到達問題に置き換えられる. 2) AFGはメソッド(クラス)単位で構築され,自身/依存するメソッド(クラス)が変更されない限り,再利用可能. 3) AFGはすべてのインスタンスに共通なエイリアス関係のみ持ち,インスタンス独自のエイリアス関係は,エイリアス計算時に導出. 2000/02/22 修士論文発表会

AFGによるエイリアス解析手法 ⇔ RA集合による直接のエイリアス関係の導出 ⇔ グラフの到達問題 Phase 1: AFGの構築 class Test { Calc a, b; Integer c; Test() { a = new Calc(); b = new Calc(); a.inc(); b.add(1); c = b.result(); } 2000/02/22 修士論文発表会

AFG特殊節点 ⇔ メソッド引数/メソッド戻り値/属性 Phase 1: AFG構築 AFG標準節点 ⇔ オブジェクトへの参照 インスタンス生成式 参照変数 ポインタ変数による間接参照式 AFG特殊節点 ⇔ メソッド引数/メソッド戻り値/属性 AFG辺 ⇔ 2節点間の(代入文/引数渡し/同一変数の参照 などによる)直接のエイリアス関係 ((1, new Integer), (1, a)) ((1, a), (3, a)) ((3, a), (3, b)) ((3, b), (4, b)) ((4, b), (4, c)) 1: Integer a = new Integer(1); 2: Integer b, c; 3: b = a; 4: c = b; 2000/02/22 修士論文発表会

Phase 1: AFG構築(続き) AFG ⇔ AFG節点/AFG辺により構築 メソッド → メソッドAFG クラス → クラスAFG public class Calc { Integer i; public Calc() {i = new Integer(0); } public void inc() { i = new Integer(i.intValue() + 1); } public void add(int c) { i = new Integer(i.intValue() + c); public Integer result() {return(i); } 2000/02/22 修士論文発表会

Phase 2: AFGによるエイリアス計算 単純式x … 例: a, b, c, new Calc() Step 1: グラフ到達問題 限定式x.y … 例: b.result() Step 1: (インスタンス)xに関するエイリアス計算 Step 2: X に関する情報の抽出 (エイリアス集合をX) Step 3: yに関するエイリアス計算 public class Calc { Integer i; public Calc() {i = new Integer(0); } public void inc() { i = new Integer(i.intValue() + 1); } public void add(int c) { i = new Integer(i.intValue() + c); public Integer result() {return(i); } class Test { Calc a = new Calc(); Calc b = new Calc(); Integer c; Test() { a.inc(); b.add(1); c = b.result(); } 2000/02/22 修士論文発表会

Phase 2: AFGによるエイリア…(続き) 例: 限定式b.result() Step 1: bに関するエイリアス計算(エイリアス集合をB ) Step 2: B に関する情報の抽出 型: Calcクラス メソッド: Calc::Calc(), Calc::add(), Calc::result() Step 3: result()に関するエイリアス計算 public class Calc { Integer i; public Calc() {i = new Integer(0); } public void inc() { i = new Integer(i.intValue() + 1); } public void add(int c) { i = new Integer(i.intValue() + c); public Integer result() {return(i); } class Test { Calc a = new Calc(); Calc b = new Calc(); Integer c; Test() { a.inc(); b.add(1); c = b.result(); } 2000/02/22 修士論文発表会

本手法の実現(Javaエイリアス解析ツール) C++で記述 libantlr …構文解析(17,000[自動生成] + 1,200行) libjavamm …意味解析(5,500行) libAFG …AFG構築(3,300行) Javaエイリアス表示ツール Gtk+(GTK--)を利用(4,200行) 2000/02/22 修士論文発表会

評価 評価対象プログラム 評価1: 解析結果のモジュール化による効率化 2000/02/22 修士論文発表会 新規 再利用可能(JDK) ファイル 行(コメント無) 概要 WeirdX 47 16,703 815 115,977 Xサーバ ANTLR 129 18,775 267 33,847 構文解析生成器 DynamicJava 242 32,037 825 119,564 Javaインタプリタ 新規[ms] 新規 + 再利用可能[ms] WeirdX 14,220 114,760 ANTLR 12,830 36,310 DynamicJava 56,260 166,410 2000/02/22 修士論文発表会

評価(続き) 評価2: AFGによるエイリアス計算のオーバーヘッド 評価3: 同一クラスのインスタンス間でのエイリアス情報共有による正確性低下 プログラム 計算対象クラス 平均計算時間[ms] エイリアス 平均 最小 最大 WeirdX com.jcraft.weirdx.Client 0.29 15.37 1 46 ANTLR antlr.MakeGrammer 0.17 5.94 18 DynamicJava koala.dynamicjava.interpreter.TypeChecker 0.07 9.16 37 エイリアス プログラム 計算対象クラス 非共有 共有 平均 最小 最大 WeirdX com.jcraft.weirdx.Client 15.37 1 46 24.54 47 ANTLR antlr.MakeGrammer 5.94 18 18.77 76 DynamicJava koala.dynamicjava.interpreter.TypeChecker 9.16 37 17.19 105 Debian/GNU Linux on PentiumIII-667MHz 512MB 2000/02/22 修士論文発表会

まとめ と 今後の課題 まとめ 本研究では,エイリアスフローグラフによる,正確性・再利用を考慮したオブジェクト指向プログラムにおけるエイリアス解析手法を提案した また,提案手法をJavaを対象とするエイリアス解析ツールとして実装を行いその有効性を評価した 今後の課題 スレッド/例外処理への対応 AFGデータベースの構築 2000/02/22 修士論文発表会

後期課程における研究方針 プログラムスライス プログラム中に存在するさまざまな(依存)関係 関係の抽出方法 プログラム中のある文のある変数に着目し,その変数に直接/間接的に依存関係のある部分を抽出したもの プログラム中に存在するさまざまな(依存)関係 データ依存関係 制御依存関係(条件節~述部,同期制御,例外,…) 手続き呼び出し関係 エイリアス関係 関係の抽出方法 動的/静的 プログラム実行順を考慮する/考慮しない 2000/02/22 修士論文発表会

後期課程における研究方針(続き) プログラムスライスの現状 プログラム中に多種多様な関係が存在 (依存)関係の管理機能の実現 抽出可能なあらゆる依存関係が1つにまとめられている プログラム中に多種多様な関係が存在 (依存)関係の管理機能の実現 情報の分散生成/管理 ユーザの要求に応じた,いくつかの依存関係の組み合わせによるスライス計算 および そのガイダンス 依存関係の集約/フィルタリング 2000/02/22 修士論文発表会