エイリアス関係を考慮した Javaプログラム用静的スライシングツール 井上研究室 山中祐介 [email protected] 背景 ソフトウェアの大規模化・複雑化 プログラム言語の高級化 プログラムの理解や保守が困難なものになっている プログラム解析 プログラムスライス エイリアス解析 ‥ 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 壱 プログラムスライス プログラムにおける、ある文のある変数(スラ イス基準)の値に影響を与える文の集合 特定の機能やエラーに関係ある部分の抽出 が可能 1: 2: 3: 4: 5: 6: 平成拾伍年弐月拾八日 a = 3; if(a > 0) b = a; スライス基準<6, b>に else 対するスライス c = a; a = b + 2; 二○○二年度修士論文発表会 弐 スライスの計算過程 1. 依存関係解析 データ依存関係 制御依存関係 2. プログラム依存グラフ(PDG)の 構築 節点:各プログラム文 有向辺:文間の依存関係 3. PDG探索 スライス基準に対応する節点から 有向辺を逆向きに探索 1: 2: 3: 4: 5: 6: a a = 3; a if(a > 0) b = a; a else c = a; a = b + 2; b 1 2 3 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 5 6 参 エイリアス関係 同じメモリ空間を指す可能性がある式間の同値関係 エイリアス関係が発生する箇所 引数の参照渡し 参照変数 ポインタを介した間接参照 エイリアス集合 1: エイリアス関係にある式の集合 2: 3: 4: 5: 6: 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 a = new Integer(1); b = new Integer(2); c = b; System.out.println(c); c = a; System.out.println(c); 四 エイリアス解析 静的解析によりエイリアス集合を求めること オブジェクト指向言語に対して静的解析を行う 際に有効 オブジェクト指向言語には動的束縛や多態などの 実行時決定要素が多い 実行時決定要素の特定がある程度可能 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 伍 既存のスライス手法の問題点 既存のオブジェクト指向言語を対象とした依存 関係解析手法では、エイリアス関係の考慮に ついて言及されていない 1: class A { 2: int n; 3: } a 1: 2: 3: 4: 5: a A a = new A(); A b; b = a; a.n += 1; System.out.println(b.n); b a.nとb.nは同じメモリ領域にあるので、4行目から5行目に メンバ変数nに関するデータ依存関係があるはず 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 六 研究の目的 Javaを対象とするエイリアス関係を考慮した 静的スライス計算手法の提案、実装 既存の手法より正確なデータ依存関係の抽出 が期待できる オブジェクト指向言語特有の実行時決定要素 に対する解析が容易になる 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 七 提案手法の方針 エイリアス関係を考慮したデータ依存関係の抽出を 行うため3種類の表を用意 変数表 文番号、エイリアスID エイリアス表 エイリアスID メンバ変数表 メンバ変数、変数表 文番号:変数vが最後に定義された文の番号 エイリアスID:エイリアス集合を区別するためのID 前提としてエイリアス解析が終了している 必要に応じてエイリアス集合の情報の取得が可能である 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 八 適用例(1行目) aは参照変数であるため 1: class A { エイリアス集合を計算し 2: int n; エイリアス表を用意 3: } 1: 2: 3: 4: 5: 同一のエイリアス集合に 属しているためIDは同じ エイリアス表 式 ID 1:a 01 1:new 01 A a = new A(); 3:a 01 A b = new A(); 3:b 01 b = a; 4:a 01 a.n += 1; 変数表にIDを記入 System.out.println(b.n); 5:b 01 変数 a IDに対するメンバ変数表を用意 変数表 メンバ変数表 メンバ変数はn ID ID 文番号 メンバ変数 1 01 01 aの変数表を用意、文番号は1 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 n 文番号 1 九 新しいエイリアス集合 IDは02 適用例(2行目) エイリアス表 1: class A { ID 式 2: int n; bは参照変数であるためエイリアス 1:a 01 3: } 集合を計算しエイリアス表を用意 1: 2: 3: 4: 5: A a = new A(); A b = new A(); b = a; a.n += 1; System.out.println(b.n); 変数表 変数 IDに02を記入 ID 文番号 1:new 01 3:a 01 3:b 01 4:a 01 5:b 01 式 ID 2:b 02 2:new 02 メンバ変数表 IDに対するメンバ変数表を用意 ID メンバ変数 文番号 a 1 01 01 n 1 b 2 02 02 n 2 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾 適用例(3行目) エイリアス表 1: class A { 2: int n; 3: } a 式 ID 式 ID 1:a 01 2:b 02 1:new 01 2:new 02 1: A a = new A(); 3:a 2: A b = new A(); 3:b 3: b = a; 4:a 4: a.n += 1; 3:bはエイリアス表に含まれている 同一のIDからa,bは 5: System.out.println(b.n); 5:b 変数bは定義されているため 01 01 01 01 変数aは参照されているため ため変数表のIDを01に変更 同じメモリ領域を参照している 文番号を3に変更 変数表 メンバ変数表 1~3へのデータ依存関係を抽出 ことがわかる 変数 文番号 ID ID メンバ変数 文番号 a 1 01 01 n 1 b 2 3 02 01 02 n 2 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾壱 適用例(4行目) エイリアス表 1: class A { 2: int n; 3: } 1: 2: 3: a,n 4: 5: a 式 ID 式 ID 1:a 01 2:b 02 1:new 01 2:new 02 A a = new A(); 3:a 01 A b = new A(); 3:b 01 b = a; 4:a 01 a.n += 1; aとnは参照されているため System.out.println(b.n); 5:b 01 nは定義されているため文番号を4に変更 1~4へのデータ依存関係を抽出 変数表 メンバ変数表 変数 文番号 ID ID メンバ変数 文番号 a 1 01 01 n 1 4 b 3 01 02 n 2 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾弐 適用例(5行目) エイリアス表 1: class A { 2: int n; 3: } 1: 2: 3: a,n 4: 5: a A a = new A(); A b = new A(); b b = a; n a.n += 1; System.out.println(b.n); 式 ID 式 ID 1:a 01 2:b 02 1:new 01 2:new 02 3:a 01 3:b 01 4:a 01 5:b 01 変数表 メンバ変数表 変数 文番号 ID ID メンバ変数 文番号 a 1 01 01 n 4 b 3 01 02 n 2 b,nは参照されているため3~5,4~5の 二○○二年度修士論文発表会 データ依存関係を抽出 平成拾伍年弐月拾八日 拾参 スライシングツールの実現 我々の研究グループで開発しているJavaプログラム 解析フレームワークにスライス計算ライブラリを追加 スライス計算ライブラリ PDG構築部 入力:Javaプログラムの意味解析木とエイリアス集合情報 各種情報はフレームワークの既存ライブラリから取得 出力:プログラム依存グラフ スライス計算部 ユーザ要求に応じたスライス計算 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾四 Javaプログラム解析フレームワーク ソースコード エイリアス フローグラフ XML データベース プログラム依存グラフ Java 構文解析 ライブラリ XML-意味解析木 変換ライブラリ エイリアス解析 ライブラリ スライス計算 ライブラリ ユーザ 意味解析 ライブラリ 抽象構文木 平成拾伍年弐月拾八日 意味解析木 二○○二年度修士論文発表会 GUI 拾伍 評価実験 解析対象プログラム P1:サンプルプログラム(2クラス、24行) P2:簡易ドローツール(3クラス、323行) 実験環境 CPU:Pentium4 1.5Ghz メモリ:512MB OS:FreeBSD 5.0-CURRENT 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾六 評価(解析コスト) PDG構築までのコスト 解析対象が参照しているJDKクラスライブラリを含む P1の総クラス数:272、P2の総クラス数:876クラス 解析時間(秒) プログラム 総時間 メモリ使用量(MB) プログラム 合計 P1 17.2 P1 149 P2 67.8 P2 457 P2はP1と比べて遥かにコストが大きい コスト削減のためには、どのライブラリを PDG構築の対象に含めるか選択が必要 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾七 評価(スライスサイズ) 解析対象プログラムのみ(JDKクラスライブラリは含 まない) スライスサイズ(行) プログラム エイリアス考慮 エイリアス無視 P1 8 6 P2 42 30 エイリアスを考慮した方がスライスサイズが大きい 増加した文はエイリアス関係にある参照変数がもたらす依 存関係 エイリアスを無視した場合のスライスは正確な ものといえないため考慮することが重要 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾八 まとめと今後の課題 オブジェクト指向言語を対象とするエイリアス関係を 考慮した静的スライス計算手法の提案、実装 より正確な依存関係の抽出が可能 Javaプログラム解析フレームワークへの追加実装でスライ シングツールを実現 今後の課題 スレッド、例外を含めた複雑な制御構造の解析への対応 大規模システムに対する適用実験 PDG構築対象の選択を可能にすることでのコスト削減 平成拾伍年弐月拾八日 二○○二年度修士論文発表会 拾九 終劇
© Copyright 2024 ExpyDoc