プログラム静的解析手法の効率化と 解析フレームワークの構築に関する研究 大阪大学 大学院基礎工学研究科 情報数理系専攻 ソフトウェア科学分野 大畑 文明 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 背景 ソフトウェアの大規模化による、開発作業の複雑化 高品質ソフトウェアを効率よく開発する要求の高まり ソフトウェアの品質改善、開発作業の生産性向上の 必要性 プログラム解析: プログラムからその性質やふるまいを 抽出し、それを開発者に提供することでソフトウェア 開発を支援する技法 2 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University プログラム静的解析 プログラム静的解析: 対象プログラムの実行を必要 としないプログラム解析技法で、一般に対象プログラ ムのソースコードに対して行われる プログラム静的解析により得られる解析情報(例) データフロー 制御フロー 抽象構文木 クラス階層 … 3 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 問題点 既存のプログラム解析手法は、 解析精度の向上 ある解析対象に特化した手法の提案及び実装 を重視してきた (a) 解析の効率 (b) 解析コストと解析精度のトレードオフ制御 (c) 解析情報の二次利用 への配慮が不足している 4 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University (a) 効率 プログラミング言語の高級化、プログラムの大規模化 解析コストの増大 目標 解析アルゴリズムの効率化 解析手順の効率化 5 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University (b) トレードオフ制御 解析コストと解析精度はトレードオフ関係 解析コストを抑えると、解析精度が低下する 解析精度を向上させると、解析コストは増大する 求められるコストと精度のバランスは、目的によって 様々 目標 トレードオフ制御を考慮した解析アルゴリズム 6 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University (c) 二次利用 二次利用を想定していない実装 解析により得られた情報はメモリ上にのみ記憶される 別の解析での利用を考慮していたとしても、特定のプロ グラミング言語によるAPIを要求する 目標 二次利用を考慮し、その利用者への制約の少ない、解 析情報データベース 7 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 目的 (a) 効率、(b) トレードオフ制御、(c) 二次利用 を 考慮したプログラム静的解析手法及び、プログラム 解析フレームワークの構築に関する研究を行った (a)に重点を置き、プログラムスライス計算、エイリアス解 析、意味解析木構築の効率化手法をそれぞれ提案 (b)、(c)については、各効率化手法の中で議論 提案したプログラム解析手法に基づく、Javaを対象とす るプログラム解析フレームワークの構築 8 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 論文の構成 第1章. まえがき 第2章. プログラム依存グラフの節点集約による スライス計算の効率化 [1-1,1-3] → プログラムスライス計算の効率化 … (a),(b)に配慮 第3章. エイリアス情報のモジュール化による エイリアス解析の効率化 [1-2] → エイリアス解析の効率化 … (a),(b)に配慮 第4章. XMLデータベースを利用した プログラム解析の効率化 [1-6] → 意味解析木構築の効率化 … (a),(c)に配慮 第5章. むすび 9 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 節点集約によるスライス計算の効率化 [論文の2章] プログラムスライス 節点集約 依存関係の局所性を利用した節点集約法 節点分解を伴う節点集約法 Pascalスライスシステム - Osaka Slicing System (OSS) 評価 まとめ 10 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University プログラムスライス プログラムスライス: ある文のある変数(スライス基 準)の値に影響を与える可能性のある文の集合 1: b = 5; 2: a = b + b; 3: if(a > 0) { 4: c = a; 5: d = b; } スライス基準<5, b>に対するスライス 適用分野 プログラムデバッグ プログラム理解 11 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University PDGによるスライス計算 計算過程 … スライス計算のグラフ到達問題への置き換えによる Phase 1: 定義、参照変数の抽出 Phase 2: 依存関係解析 Phase 3: プログラム依存グラフ (PDG) の構築 節点: プログラム文 辺: プログラム文間の依存関係 Phase 4: PDGによるスライス抽出 12 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University PDGによるスライス計算(例) 1: b = 5; 2: a = b + b; 3: if(a > 0) { 4: c = a; a: 5: d = b; } b=5 b a=b+b a b if (a > 0) a d=b c=a b=5 b a=b+b a b if (a > 0) a d=b c=a 1: b = 5; 2: a = b + b; 3: if(a > 0) { 4: c = a; 5: d = b; } 13 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 節点集約 Phase 2: 依存関係解析 が最も解析コストを要する 節点集約: 通常各文の依存情報は対応するPDG 節点に保持させるが、複数文の依存情報を1つの PDG節点に保持させる PDGの節点数及び辺数の減少 (a) 効率 への配慮 14 解析アルゴリズムの効率化 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 集約の制御 節点集約アルゴリズムは、集約の程度を制御するた めのパラメータ limit (limit 0) を持つ limit を拡大: コストは減少、精度は低下 limit を縮小: コストは増加、精度は向上 bb = = 55 b =5;bb + + bb aa== a a b b=5 a=b+b a = b+b; a if (a (a > > 0) 0) if if (a > 0) { ba; a a,b b if (a > 0) a c= 集約 c = ad = b; } dd = = bb c = a d=b c=a 集約あり (limit = 0) )15 1) 集約なし Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 集約の応用 (2つの節点集約法) 依存関係の局所性を利用した節点集約法 (limit « ) 精度低下の少ない、時間コスト及び空間コスト削減 節点分解を伴う節点集約法 (limit = ) 精度低下のない、時間コスト削減 節点分解が必要であるため、空間コストは増加 (b) トレードオフ制御 への配慮 トレードオフ制御を考慮した解析アルゴリズム 16 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 依存関係の局所性を利用した節点集約法 依存関係の局所性: 集約対象となる文集合が持 つ、依存関係の類似性 局所性が強い文同士の集約では、精度低下が少ない b=5 b a=b+b a b if (a > 0) a 集約 d=b c=a 集約なし = 55 bb = = bb + + bb aa aa = if (a (a > > 0) 0) if b a a,b c=a dd = = bb c = a 集約あり (limit = 0) 1) 17 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 節点分解を伴う節点集約法 依存関係の分類とその抽出方針 手続き間 (繰り返し解析が必要): 集約後に抽出 手続き内 (繰り返し解析が不要): 分解後に抽出 b … b = 5; b=5 a=b+b a a = b+b; … = a; a … if (a > 0) { a b if (a > 0) a c = a; … d = b; 分解 c … = c; } c d=b c=a … 集約あり (limit = ) 集約なし 18 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University Pascalスライスシステム - Osaka Slicing System (OSS) - 対象言語: Pascal 開発 言語: C ツールキット: Tcl/Tk コード: 12,000行 19 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 評価 OSSに対してPascalプログラムを適用し、既存手法 との比較を行った 既存手法: 節点集約を行わない 提案手法: 節点集約(及び節点分解)を行う プログラム[概要] P1 [チケット予約] P2 [酒屋問題] P3 [小計算問題の集合] P4 [ソーティング] 行 手続き 333 14 429 18 449 30 831 22 20 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 考察 依存関係の局所性を利用した節点集約 解析コスト(時間): 5~30%の削減 解析コスト(空間): 5~40%の削減 解析精度: 1~3%の低下 節点分解を伴う節点集約 解析コスト(時間): 15~60%の削減 解析コスト(空間): 約10%の増加 解析精度: 低下はなし 21 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University まとめ 節点集約によるスライス計算効率化手法の提案 依存関係の局所性を利用した節点集約法 節点分解を伴う節点集約法 OSSによる提案手法の実装、及びその評価 (a) 効率、(b) トレードオフ制御 への配慮 今後の課題 ポインタ変数の存在するプログラムへの適用 大規模プログラムに対する評価実験 22 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University モジュール化によるエイリアス解析の効率化 [論文の3章] エイリアス AFGによるエイリアス解析 Javaエイリアス解析ツール - Java Alias Analysis Tool (JAAT) 評価 まとめ 23 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University エイリアス エイリアス: ある文のある式(エイリアス基準)と同一メ モリ領域を指す可能性のある式の集合 適用分野 1: Integer a, b, c; 2: a = new Integer(1); 3: b = new Integer(2); 4: System.out.println(b); 5: c = a; 6: System.out.println(c); エイリアス基準<6, c>に対するエイリアス コンパイラ最適化 スライス計算の前処理 プログラムデバッグ、プログラム理解 24 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University エイリアス解析手法における問題点 (1/2) エイリアス解析全般における問題点 スケーラビリティ: 実行順に従ってプログラム全体を解析 しなければならないため、大規模プログラムへの適用にお けるコストは膨大なものになる 利用分野に適した解析手法: プログラムデバッグ、プログ ラム理解に利用する場合、求めるエイリアスのみを即座 に抽出できることが望まれる スケーラビリティに配慮するための、モジュール解析 エイリアスを効率よく抽出するための、オンデマンド解析 の重要性 25 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University エイリアス解析手法における問題点 (2/2) OOプログラムに対するエイリアス解析における問題点 インスタンスを区別した解析: 同一クラスのインスタンスが 属性に関するエイリアス情報を共有する方式では、解析 精度が低くなる しかし、単純にインスタンスの数だけエイリアス情報を生成 してしまうと多大な空間コストが必要になるため、インスタン スを区別した解析は実現されてない エイリアスを効率よく抽出するための、オンデマンド解析 の重要性 26 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University AFGによるエイリアス解析 (方針) 方針: 2フェーズ方式 Phase 1: メソッド内エイリアス解析 (モジュール解析) メソッド単位に解析結果が保持される インスタンス共通のエイリアス情報 の抽出 Phase 2: メソッド間エイリアス解析 (オンデマンド解析) メソッド単位の解析結果を結びつける インスタンス独自のエイリアス情報 の抽出 (a) 効率 への配慮 解析アルゴリズムの効率化 27 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University AFGによるエイリアス解析 (計算過程) 計算過程 … エイリアス解析のグラフ到達問題への置き換えによる Phase 1: エイリアスフローグラフ (AFG) の構築 … メソッド内エイリアス解析 節点: 参照型の式 辺: 式間のエイリアス関係 Phase 2: AFGによるエイリアス計算 … メソッド間エイリアス解析 28 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University AFGによるエイリアス解析 (例: 単純式) [Phase 1 ~ Phase 2] 1: Integer a, b, c; 2: a = new Integer(1); 3: b = new Integer(2); 4: System.out.println(b); 5: c = a; 6: System.out.println(c); a new Integer(1) b new Integer(2) c a new Integer(1) b new Integer(2) b c a c 1: Integer a, b, c; 2: a = new Integer(1); b 3: b = new Integer(2); 4: System.out.println(b); a 5: c = a; 29 c 6: System.out.println(c); Software Engineering Research Group, Graduate School of Engineering Science, Osaka University AFGによるエイリアス解析 (例: 限定式) [Phase 2: “b.result()”] Step 1: bに関するエイリアス計算 エイリアス: A(b) Step 2: A(b)に関する情報の抽出 型: Calcクラス メソッド: Calc::Calc(), Calc::add(), Calc::result() Test {3: result()に関するエイリアス計算 Step class public class Calc { Calc a = new Integer i; Calc(); Calc b = new {i = new public Calc() Integer(0); } Calc(); public void inc() { Integer c; 1); i = new Integer(i.intValue() + Test() { } a.inc(); public void add(int c) { b.add(1); c = c); i = new Integer(i.intValue() + b.result(); } } 30 public Integer result() } Software Engineering Research{return(i);} Group, Graduate School of Engineering Science, Osaka University AFGによるエイリアス解析 (アルゴリズム) アルゴリズム: フェーズごとに定義可能 Phase 1: メソッド内エイリアス解析 → AFG構築アルゴリズム Phase 2: メソッド間エイリアス解析 → AFG探索アルゴリズム (変更が容易) (b) トレードオフ制御 への配慮 トレードオフ制御を考慮した解析アルゴリズム 31 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University Javaエイリアス解析ツール - Java Alias Analysis Tool (JAAT) - 対象言語: Java 開発 言語: C++ ツールキット: GTK-コード: 32,000行 32 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 評価 JAATに対しJavaプログラムを適用し、提案手法の 有効性を検証 プログラム サンプルプログラム 関連するクラスライブラリ [概要] ファイル 1 行 915 ファイル 802 行 114,887 [テキストエディタ] (0.1%) (0.8%) (99.9%) (99.2%) 47 16,703 815 115,977 (5.5%) (12.6%) (94.5%) (87.4%) 129 18,775 267 33,847 (32.6%) (35.7%) (67.4%) (64.3%) 242 32,037 825 119,564 (22.7%) (21.1%) (77.3%) (78.9%) TextEditor WeirdX [Xサーバ] ANTLR [構文解析生成] DynamicJava [Javaインタプリタ] 33 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 考察 (1/3) 解析コスト(時間) Phase 1: AFG構築: モジュール化により、前もってクラス ライブラリを解析しておくことができる サンプルプログラムに対するエイリアス解析において、クラ スライブラリ全体を再解析する必要はない プログラム TextEditor WeirdX ANTLR DynamicJava サンプルプログラム[sec] 関連するクラスライブラリ[sec] 0.001 100 14 101 12 56 23 110 34 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 考察 (2/3) Phase 2: AFGによるエイリアス計算: オンデマンド解析を 採用しているため、メソッド間のエイリアス解析はその都 度行う必要があるが、そのコストは十分に小さい プログラム TextEditor [ms] 0.65 WeirdX 0.29 ANTLR 0.17 DynamicJava 0.07 35 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 考察 (3/3) 解析精度(エイリアス集合の平均要素数) 既存手法: インスタンスを区別しない解析 提案手法: インスタンスを区別した解析 提案手法による解析精度の向上を確認 プログラム TextEditor WeirdX ANTLR DynamicJava 区別する[個] 区別しない[個] 4.42 8.31 15.37 24.54 5.94 9.16 18.77 17.19 36 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University まとめ モジュール化によるエイリアス解析効率化手法の提案 2フェーズで構成 (モジュール解析、オンデマンド解析) AFGを利用 JAATによる提案手法の実装、及びその評価 (a) 効率、(b) トレードオフ制御 への配慮 今後の課題 AFGデータベースの構築 例外処理、スレッドへの対応 37 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University むすび (a) 効率、(b) トレードオフ制御、(c) 二次利用 を 考慮した3つのプログラム静的解析手法の提案 節点集約による スライス計算の効率化手法 … (a),(b) エイリアス情報のモジュール化による エイリアス解析の効 率化手法 … (a),(b) XMLデータベースを利用した プログラム解析の効率化手 法 … (a),(c) Javaプログラム解析フレームワーク JAFの構築 38 Software Engineering Research Group, Graduate School of Engineering Science, Osaka University
© Copyright 2024 ExpyDoc