Java 2000 Software Engineering Research Group Graduate School

  • Slides: 22
Download presentation
静的情報と動的情報を用いた Javaプログラムスライス計算法 広瀬 航也 井上研究室 2000年度修士論文発表会 Software Engineering Research Group, Graduate School of Engineering

静的情報と動的情報を用いた Javaプログラムスライス計算法 広瀬 航也 井上研究室 2000年度修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

プログラムスライス ある文のある変数(スライス基準)の値に 影響を与えうる文の集合 1: 2: 3: 4: 5: 6: 7: scanf("%d", &a); scanf("%d", &b);

プログラムスライス ある文のある変数(スライス基準)の値に 影響を与えうる文の集合 1: 2: 3: 4: 5: 6: 7: scanf("%d", &a); scanf("%d", &b); max = a; min = b; if ( a < b) { max = b; min = a; } 8: printf("%d", max); maxの値が誤っている maxをスライス基準に指定 maxに関係ある部分を抽出 10/19/2021 4 2000年度修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

Dependence Cache(DC)スライス† データ依存関係解析: 動的 制御依存関係解析: 静的 配列の各要素を区別 ポインタの指す記憶域を区別 解析コストの増加を抑えることができる † Ashida Y. , Ohata

Dependence Cache(DC)スライス† データ依存関係解析: 動的 制御依存関係解析: 静的 配列の各要素を区別 ポインタの指す記憶域を区別 解析コストの増加を抑えることができる † Ashida Y. , Ohata F. and Inoue K. : "Slicing Methods Using Static and Dynamic Information'', Proceedings of the 6 th Asia Pacific Software Engineering Conference (APSEC'99) , pp. 344 -350, December 1999. 10/19/2021 7 2000年度修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

DD解析の適用例 P P P int 1: 2: 3: 4: 5: 6: 7: 8: 9:

DD解析の適用例 P P P int 1: 2: 3: 4: 5: 6: 7: 8: 9: a; b; c; d; Cache a. Cache; = Cache b. Cache; = Cache c. Cache; = Cache d. Cache; = a = new P(); b = new P(); c = new Q(); a. data = 10; b. data = 20; c. data = 30; d = a. data + c. data; System. out. print(d); System. out. print(b. data); 1 2 3 7 data = 10 data. Cache =4 data = 20 data. Cache =5 class P int data; Cache data. Cache; class Q extends P data = 30 data. Cache =6 10/19/2021 13 2000年度修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

メソッド間CD解析の適用例 int a; Cache a. Cache; P b; Cache b. Cache; 1: 2: 3:

メソッド間CD解析の適用例 int a; Cache a. Cache; P b; Cache b. Cache; 1: 2: 3: 4: 5: 6: 7: a = read(); if (a > 0) b = new P(); else b = new Q(); b. data = 10; a = b. calc(); class P int data; Cache data. Cache; int calc() { return data*2; } class Q extends P int calc() { return data/2; } 10/19/2021 15 2000年度修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

評価 CGIプログラム 2クラス, 223行 スライスサイズ [行(全体に対する割合)] 静的スライス 本手法 動的スライス基準 1 26 (11. 7%) 15

評価 CGIプログラム 2クラス, 223行 スライスサイズ [行(全体に対する割合)] 静的スライス 本手法 動的スライス基準 1 26 (11. 7%) 15 ( 6. 7%) スライス基準 2 83 (37. 2%) 27 (12. 1%) スライス基準 3 37 (16. 6%) 24 (10. 8%) 実行時間 [ms] 通常実行 解析付実行 138 582 消費メモリ [Kbyte] 通常実行 解析付実行 478 645 (Celeron 500 MHz, 128 MB, Windows 98, Java 1. 3. 0_01) 10/19/2021 17 2000年度修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

GUIプログラムへの適用 class Draw. Panel extends Panel implements Mouse. Listener, Mouse. Motion. Listener { add.

GUIプログラムへの適用 class Draw. Panel extends Panel implements Mouse. Listener, Mouse. Motion. Listener { add. Mouse. Motion. Listener(this); add. Mouse. Listener(this); } void mouse. Dragged(Mouse. Event e) void mouse. Moved(Mouse. Event e) void mouse. Pressed(Mouse. Event e) void mouse. Released(Mouse. Event e) void mouse. Clicked(Mouse. Event e) class A{ data method() } class B{ data method() } class C{ data method() } class D{ data method() } class E{ data method() } 10/19/2021 19 2000年度修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

各スライス手法の比較 スライスサイズ (行) DC 15. 0 15. 7 61 P 2 P 3 静的

各スライス手法の比較 スライスサイズ (行) DC 15. 0 15. 7 61 P 2 P 3 静的 20. 7 182 187 P 1 P 2 P 3 静的解析時間 DC 静的 14 4. 5 219 19 710 48 動的 4. 7 5. 3 7. 7 P 1: カレンダー表示 (88行) P 2: 酒屋問題 (387行) P 3: 拡張酒屋問題 (941行) (Celeron-450 MHz, 128 MB) (ms) 動的 N/A N/A P 1 P 2 P 3 実行時間 (ms) DC 静的 動的 52 55 184 46 49 4, 649 4, 869 5, 274 38, 969 10/19/2021 20 2000年度修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

静的解析コスト 実行時間 [ms] 静的解析 命令付加 コンパイル 合計 通常 (スライス無し) 6, 480 消費メモリ [Kbyte] 通常

静的解析コスト 実行時間 [ms] 静的解析 命令付加 コンパイル 合計 通常 (スライス無し) 6, 480 消費メモリ [Kbyte] 通常 372 本手法 3, 207 本手法 6, 100 540 6, 760 13, 400 ソース [行] 通常 223 本手法 1, 754 10/19/2021 21 2000年度修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University

依存関係解析命令の付加 1 2 3 4 5 : : : int a = 10; int

依存関係解析命令の付加 1 2 3 4 5 : : : int a = 10; int b = 20; int c; c = a + b; println(c); 変換 ある文である変数が 定義される(def): 文番号を保存 使用される(ref): 最後に定義され た文から依存辺を引く 0 : ini. PDG(); 1’: def(a, 1); 1 : int a = 10; 2’: def(b, 2); 2 : int b = 20; 3’: def(c, 3); 3 : int c; 4’: ref(a, 4); 4’: ref(b, 4); 4’: def(c, 4); 4 : c = a + b; 5’: ref(c, 5); 5 : println(c); 10/19/2021 22 2000年度修士論文発表会 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University