1 / 14

アスペクト指向プログラミングの 動的プログラムスライスへの応用

アスペクト指向プログラミングの 動的プログラムスライスへの応用. 石尾 隆 , 楠本 真二 , 井上 克郎 大阪大学大学院基礎工学研究科. 研究の背景. ソフトウェアの大規模化 フォールト特定、修正のコスト増大 テ ストケースからのフォールト特定 扱うコード量が多いと効率が悪くなる 実際に動くコードは、全体のごく一部. 関係のないコードを自動的に除外して 迅速なフォールト特定を行いたい. プログラムスライス. プログラム中のある文 s のある変数 v (スライス基点)の値に影響を与えうる文の集合

kelly-moody
Download Presentation

アスペクト指向プログラミングの 動的プログラムスライスへの応用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. アスペクト指向プログラミングの動的プログラムスライスへの応用アスペクト指向プログラミングの動的プログラムスライスへの応用 石尾 隆, 楠本 真二, 井上 克郎 大阪大学大学院基礎工学研究科

  2. 研究の背景 • ソフトウェアの大規模化 • フォールト特定、修正のコスト増大 • テストケースからのフォールト特定 • 扱うコード量が多いと効率が悪くなる • 実際に動くコードは、全体のごく一部 関係のないコードを自動的に除外して 迅速なフォールト特定を行いたい

  3. プログラムスライス • プログラム中のある文sのある変数v (スライス基点)の値に影響を与えうる文の集合 • デバッグ対象が限定され、フォールト位置特定を効率よく行うことができる 1: a = 5; 2: b = a + a; 3: if (b > 0) { 4: c = a; 5: } 6: d = b; 1: a = 5; 2: b = a + a; 3: if (b > 0) { 4: c = a; 5: } 6: d = b; スライス基点(6, b)に対するスライス

  4. データ依存関係 10: a = 1; 11: c = 4; 12: b = a; a 制御依存関係 20: if (a < 1) { 21: b = a; 22: } プログラム依存グラフ (PDG) DC(Dependence Cache)スライス 1.依存関係解析 • 動的データ依存関係 • 静的制御依存関係 2.プログラム依存グラフ(PDG)構築 • 節点:各プログラム文 • 有向辺:文間の依存関係 3.グラフ探索 • スライス基点に対応する節点から 有向辺を逆向きに探索 † Y.Ashida, F.Ohata and K.Inoue: “Slicing Methods Using Static and Dynamic Information”, Proceedings of the 6th Asia Pacific Software Engineering Conference , pp.344-350, Takamatsu, Japan, December (1999).

  5. 既存の手法 • Java Virtual Machine (JVM)の改造† • 細粒度でのスライスが可能 • 特定のJVMの実装、バージョンに依存する • プログラムがそのバージョンのJVMで動くかどうかの検証は困難 • コンパイラによる最適化を抑止する必要あり → ソースコード側に依存関係解析処理を追加する †誉田謙二, 大畑文明, 井上克郎: Javaバーチャルマシンを利用した動的依存関係解析手法の提案, SIGSS-2002 Jan

  6. アスペクト指向プログラミング • 複数のクラスを横断する要素をモジュール「アスペクト」として記述するプログラミング手法 • ある特定の目的に関する処理が、複数のクラスに分散することを避ける • ソースコード上では、ひとつの単位にまとめて記述 • コンパイル時、実行時にクラスに結合する • AspectJ: Java 用アスペクト記述・処理系 http://aspectj.org/

  7. アスペクトの例 HTTP Request HTTP Session HTTP Response クラスによる実現 Session Managing Code Session Managing Code Session Managing Code アスペクトをクラスに結合する (Aspect Weaving) AspectJ HTTP Request HTTP Session HTTP Response アスペクトによる実現 Session Managing Aspect

  8. アスペクトの記述 • アスペクト = 結合の基準 + 結合するコード • 主要な結合の基準 • メソッド呼び出し、メソッド実行 • フィールド代入、参照 • メソッド、フィールドの属するクラスに関する条件 • 結合するコードの特徴 • 通常の Java で記述される • 実際の結合位置に関する情報へアクセスできる • 動的データ依存関係解析アスペクト • フィールドへの代入: 代入のソースコード内での位置を記録 • フィールドの参照: そのフィールドへの最後の代入位置を取得し、動的依存関係を記録

  9. アスペクトによる実現の特徴 • 利点 • 高い抽象度で、結合ルールを明快に記述できる • データ依存関係解析処理をカプセル化できる • 特定のJavaのバージョンに依存しない • コンパイラによる最適化の影響を受けない • AspectJ における制限 • ローカル変数に対してはアスペクトを結合できない →静的解析で補う必要がある

  10. アスペクトによる依存関係解析 • スライスツールの実装(Java) • 約 16,000 行(コメント含む) • AspectJ によるデータ依存関係解析 • 依存関係解析アスペクト+クラス: 300行 • JVM改造アプローチでは、16,000 行程度の追加コードが必要(全体で約 580,000 行)

  11. スライス結果 スライス 計算 AspectJ 通常の JVM 依存関係情報 アスペクト結合済み クラスファイル 通常の実行結果 ツールの動作 スライス対象 ソースコード 依存関係解析 アスペクト

  12. 評価: スライスのサイズ • JVM 改造による実現との比較 • 適用対象 • P1: 簡易データベースプログラム (4クラス、262行) • P2: ソーティングプログラム(5クラス、228行) • P3: スライス計算プログラム(125クラス、約16000行) • ローカル変数の扱いの差 による影響はほとんど見られない • 短いメソッドが多いため 単位: 行

  13. 評価: 実行コスト • 同じ入力を与えて実行時間を比較 • 適用対象はスライスサイズの場合と同様 • コンパイラの最適化による影響 • JVMは、すべてのクラスに対し、解析コストを支払う • ライブラリが多いプログラムほど、JVM のアプローチは不利

  14. まとめと今後の課題 • アスペクトを用いた動的データ依存解析 • アスペクト指向プログラミングによって、動的情報取得モジュールの取り扱いが容易になる • JVM 改造アプローチに比べ、わずかなスライスサイズの変化で、高速化できる • 課題 • 大規模プログラムへの適用 • 手法のスケーラビリティ

More Related