プログラム解析の効率化 に関する研究 大阪大学 大学院基礎工学研究科 情報数理系専攻 ソフトウェア科学分野 高田 智規 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 略歴 平成9年3月 大阪大学大学院基礎工学研究科 物理系専攻 情報 工学分野 博士前期課程修了 在学中はプログラムスライシングに関 する研究に従事 平成9年4月 日本電信電話株式会社 入社 平成9年8月 ヒューマンインタフェース研究所に配属 ビデオサーバの負 荷分散技術の研究・開発に従事 平成12年4月 西日本電信電話株式会社 大阪支店に異動 中規 模ERPパッケージのSI業務 平成13年10月 大阪大学大学院基礎工学研究科 情報数理系専 攻 博士後期課程入学 プログラムスライシングに関する研究に従事 平成14年5月 日本電信電話株式会社 サイバーソリューション研究 所に異動 ディジタルコンテンツの著作権管理に関する研究・開発に従 事 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 論文一覧 プログラム依存グラフの効率的な更新手法 電子情報通信学会論文誌 (1998) ⇒ 2章 制限された動的情報を用いたプログラムスライシング手法の提案 電子情報通信学会論文誌(2002) ⇒ 3章 制限された動的情報を用いたブロック単位スライシング手法の提案 電子情報通信学会論文誌(投稿中) ⇒ 4章 ソースコード解析ツール開発支援システムの試用 電子情報通信学会論文誌(1997) Dependence-Cache Slicing: A Program Slicing Method Using Lightweight Dynamic Information, 10th IEEE International Workshop on Program Comprehension (2002/6 発表予定) Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 発表内容 プログラム解析概要 プログラム依存グラフの効率的な更新手法 プログラムが変更された場合に、プログラム依存グラフを 再計算することなく、部分的に更新する手法 準動的解析を用いたスライシング手法 静的解析情報と動的解析情報を組み合わせた効率的 なスライシング手法 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University プログラム解析概要 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University デバッグ作業におけるプログラム解析 ソフトウェア開発において、デバッグ・テスト・保守 フェーズにおける比重はソフトウェアの大規模化に伴 い増加している デバッグ効率向上へのアプローチ 文間の依存関係解析によって特定の文に関連のあ る文を抽出 依存関係解析はオーバヘッドが大きい ↓ 解析の効率化が重要 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University プログラムスライス 注目した文に影響を与える(受ける)文の集合 プログラム開発における様々なフェーズで利用可能 ⇒ 特にデバッグフェーズ 開発作業の効率化を実現 1 program Square_Cube(input, output); 2 var a, b, c, d : integer; 3 function Square(x : integer) : integer; 4 begin 5 Square := x * x 6 end; 7 function Cube(x : integer) : integer; 8 begin 9 Cube := x * x * x 10 end; 11 begin 12 writeln(``Squared Value ?''); 13 readln(a); 14 writeln(``Cubed Value ?''); 15 readln(b); 16 writeln(``Select Feature! Square: 0 Cube: 1''); 17 readln(c); 18 if c = 0 then 19 d := Square(a) 20 else 21 d := Cube(b); 22 if d < 0 then 23 d := -1 * d; 24 writeln(d) 25 end. 1 program Square_Cube(input, output); 2 var a, b, c, d : integer; 3 function Square(x : integer) : integer; 4 begin 5 Square := x * x 6 end; 7 function Cube(x : integer) : integer; 8 begin 9 Cube := x * x * x 10 end; 11 begin 12 writeln(``Squared Value ?''); 13 readln(a); 14 writeln(``Cubed Value ?''); 15 readln(b); 16 writeln(``Select Feature! Square: 0 Cube: 1''); 17 readln(c); 18 if c = 0 then 19 d := Square(a) 20 else 21 d := Cube(b); 22 if d < 0 then 23 d := -1 * d; 24 writeln(d) 25 end. Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University フォールト位置特定におけるプログラムスライス 実験1 スライス利用 スライスなし 被験者 A1 A2 A3 B1 B2 B3 デバッグ時 間(分) 119 128 120 154 175 120 149.7 122.3 実験2 スライスなし スライス利用 被験者 A1 A2 A3 B1 B2 B3 デバッグ時 間(分) 118 126 155 131 92 120 133.0 114.3 西松 顕, 西江 圭介, 楠本 真二, 井上 克郎: ``フォールト位置特定における プログラムスライスの実験的評価'', 電子情報通信学会論文誌, Vol.J82-D-I, No.11, pp. 1336--1344 (1999). Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University スライスの応用 フォールト位置特定 プログラム再利用 プログラム理解 プログラム合成 プログラム編集 プログラム簡素化 など Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University スライスの分類 静的スライシング プログラムを静的に(実行なしに)解析 動的スライシング 特定の入力に基づき解析 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 静的スライシング プログラムを静的に(実行なしに)解析 全ての入力データを仮定 依存関係を基にプログラム依存グラフ(Program Dependence Graph, PDG)を構築 PDG辺を辿ることによりスライスを計算 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 依存関係 制御依存関係 ある文の実行有無が他の条件式の判定結果に依存 s1: if a=0 then s2: b :=1; s1 s2 データ依存関係 変数の定義-参照関係 s3: a := 1; s4: writeln(a); s3 a s4 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University プログラム依存グラフ 依存関係を表したグラフ 節点 文を表す 文 条件式 特殊節点 (関数境界解析等) 辺 文間の依存関係を表す データ依存辺 制御依存辺 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University PDGの例 1 program Square_Cube(input, output); 2 var a, b, c, d : integer; 3 function Square(x : integer) : integer; 4 begin 5 Square := x * x 6 end; 7 function Cube(x : integer) : integer; 8 begin 9 Cube := x * x * x 10 end; 11 begin 12 writeln(``Squared Value ?''); 13 readln(a); 14 writeln(``Cubed Value ?''); 15 readln(b); 16 writeln(``Select Feature! Square: 0 Cube: 1''); 17 readln(c); 18 if c = 0 then 19 d := Square(a) 20 else 21 d := Cube(b); 22 if d < 0 then 23 d := -1 * d; 24 writeln(d) 25 end. Main Square writeln(“Sq.. readln(a) x-para writeln(“Cu.. x readln(b) a Square := x * x a Square Square-exit Cube x-para x writeln(“Sel.. readln(c) if c=0 Square d d := Cube(b) b Cube := x*x*x Cube-exit b d := Square(a) if d<0 Cube c d d d := -1 * d d Cube writeln(d) d Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 静的スライスの例 1 program Square_Cube(input, output); 2 var a, b, c, d : integer; 3 function Square(x : integer) : integer; 4 begin 5 Square := x * x 6 end; 7 function Cube(x : integer) : integer; 8 begin 9 Cube := x * x * x 10 end; 11 begin 12 writeln(``Squared Value ?''); 13 readln(a); 14 writeln(``Cubed Value ?''); 15 readln(b); 16 writeln(``Select Feature! Square: 0 Cube: 1''); 17 readln(c); 18 if c = 0 then 19 d := Square(a) 20 else 21 d := Cube(b); 22 if d < 0 then 23 d := -1 * d; 24 writeln(d) 25 end. Main Square writeln(“Sq.. readln(a) x-para writeln(“Cu.. x readln(b) a Square := x * x a Square Square-exit Cube x-para x writeln(“Sel.. readln(c) if c=0 Square d d := Cube(b) b Cube := x*x*x Cube-exit b d := Square(a) if d<0 Cube c d d d := -1 * d d Cube writeln(d) d スライシング基準 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 動的スライシング プログラムをある入力データで実行する 注目した文に実際に影響を与えた文の集合 プログラムの実行系列を基に動的依存グラフ (Dynamic Dependence Graph, DDG)を作成し、 グラフの辺を辿ることにより抽出 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 動的スライスの例 1 program Square_Cube(input, output); 2 var a, b, c, d : integer; 3 function Square(x : integer) : integer; 4 begin 5 Square := x * x 6 end; 7 function Cube(x : integer) : integer; 8 begin 9 Cube := x * x * x 10 end; 11 begin 12 writeln(``Squared Value ?''); 13 readln(a); 14 writeln(``Cubed Value ?''); 15 readln(b); 16 writeln(``Select Feature! Square: 0 Cube: 1''); 17 readln(c); 18 if c = 0 then 19 d := Square(a) 20 else 21 d := Cube(b); 22 if d < 0 then 23 d := -1 * d; 24 writeln(d) 25 end. Square Main writeln(“Sq.. readln(a) x-para writeln(“Cu.. x readln(b) a Square := x * x a Square Square-exit Cube writeln(“Sel.. readln(c) if c=0 Square c d := Square(a) d if d<0 d writeln(d) 入力 a=2, b=1, c=0 の場合 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 静的・動的スライシングの特徴 静的スライシング 動的スライシング プログラムの実行を伴わない 長所 プログラムの実行が必須 長所 有効な入力データが無い場 合でも解析可能 短所 全ての入力データを仮定した 安全な近似が必要 配列変数・ポインタ等の正確 な解析ができない 配列・ポインタ等も正確に解 析可能 短所 実行時オーバヘッドが大きい 実行時間、メモリ空間etc. Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University プログラム依存グラフの 効率的な更新手法 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University デバッグフェーズにおけるスライス利用 ソース変更 実行 デバッグ終了 解析(PDG計算) 大規模プログラムにおいては 解析のオーバーヘッドが大きい スライス計算 フォールト位置特定 プログラムに変更が加えられ た際に、プログラム全体を再 解析することなしにPDGを更新 する手法が必要。 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 提案手法 PDG中の依存辺を基に変数の定義情報を復元 し、変更後の依存関係を計算することで、変更の 影響を受ける部分のみを更新 1. 制御依存辺更新 2. 関数内データ依存辺更新 3. 関数間影響解析 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 諸定義 対象言語 スカラ型のみからなる手続き型言語(Pascalサブセット) PDG 通常のPDGに加え、フロー辺(実行順序を示す辺)を持 つグラフを対象とする Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 基本方針 制御依存関係は構文解析から更新 PDGのDD辺は解析時に変数の定義情報を基にし て引かれている. ⇒ 変更前のPDG中のDD辺から,変数の定義情 報の一部を復元することが可能. r v s 到達定義<r,v> これを利用し、変更後のデータ依存関係を求め依 存辺を更新 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 提案するアルゴリズム 関数内解析アルゴリズム 文の削除 文の追加 文の修正 (基本的には削除+追加) 関数間解析アルゴリズム 他関数に与える影響を解析 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 削除アルゴリズム アルゴリズムDeleteVertex 入力: 削除する節点s 出力: 更新されたPDG 1. sで定義されている各変数vについて DD ← DD ∪ {r v t | r ∈ PreDef(s,v), t ∈ target(s,v)} 2. DD ← DD – {r v s | r ∈ source(s,v)} – {s v t | t ∈ target(s,v)} 3. FLOW ← FLOW ∪ { p → n | p ∈ prev(s), n ∈ next(s) } – { r → s | r ∈ prev(s) } – { s → t | t ∈ target(s) } 4. 節点s自身を削除 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 共通アルゴリズム アルゴリズムFindPreDef (前定義節点の発見) 入力: 節点s , 変数v 出力: 前定義節点集合PreDef(s,v) 1. PreDef(s,v) ← φ 2. c ∈ prev(s) なる各cに対して以下を順に実行 a. cにおいてvが定義されていれば PreDef(s,v) ← PreDef(s,v) ∪ c b. cにおいてvが参照されていれば PreDef(s,v) ← PreDef(s,v) ∪ source(c,v) c. cにおいてvが定義・参照ともにされていなければ、c←prev(c)とし て2a.以下を実行 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 定義 文sから文tへの変数vに関するデータ依存辺 s v t 文sから文tへのフロー辺 s→t 文sからフロー辺を逆方向に辿った節点集合 prev(s) 文sからフロー辺を順方向に辿った節点集合 next(s) 文sから変数vに関してデータ依存辺を逆方向に辿った節点集合 source(s,v) 文sから変数vに関してデータ依存辺を順方向に辿った節点集合 target(s,v) Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 削除アルゴリズム s1 s1: readln(x,y); s2: max := x; s3: if x>y then s4: max := x else s5: max := y; s6: writeln(max); 1. 2. 3. 4. readln(x,y) s2 x r x x y y max := x s3 max if x>y s4 s5 直前にmaxを定義している文r、 max := x max := y s sからDDを辿った文tを発見 rからtへDDを追加 s6 t max 直前の文と直後の文間にフ max writeln(max) ロー辺を追加 sおよび関連する文を削除 DD CD Flow Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 挿入アルゴリズム アルゴリズムInsertVertex 1. 2. 入力: 挿入する節点s, prev(s), next(s) 出力: 更新されたPDG FLOW ← FLOW ∪ { p → s | p ∈ prev(s) } ∪ { s → n | n ∈ next(s) } – { p → n | p ∈ prev(s), n ∈ next(s) } sで定義している各変数vすべてについて以下を実行 a. 各r∈PreDef(s,v), t∈target(r,v)に対して、vを定義しないようなパス s, … , t が存在すれば、以下を実行 i. ii. 3. DD ← DD ∪ { s v t } 任意のr ∈ PreDef(s,v)に対してvを定義しないようなパスr, …, tが存在しなけれ ば、 DD ← DD – { r v t | r ∈ PreDef(s,v)} sで参照している各変数uすべてについて、 DD ← DD ∪ { r u s | r ∈ PreDef(s,v) } Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 挿入アルゴリズム s1 s1: readln(x,y); s2: max := x; s3: if x>y then max := x else s5: max := y; s6: writeln(max); 1. 2. 3. 4. 5. readln(x,y) s2 x x y y max := x x s3 max if x>y s5 挿入する節点およびCDを作成 max := x max := y フロー辺引きなおし maxを参照する文を探索しDDを s6 max 追加 max writeln(max) 挿入により不要となるDD削除 参照する変数のDD追加 DD CD Flow Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 修正アルゴリズム アルゴリズムModifyVertex 1. 2. 3. 入力: 節点s, 変更後の定義変数集合V’, 変更後の参照変数集合U’ 出力: 更新されたPDG FLOW ← FLOW v ∈ V – V’ に対して、 DD ← DD ∪ { r v t | r ∈ PreDef(s,v), t ∈ target(s,v) } – { s v t | t ∈ target(s,v) } v’ ∈ V’ – V に対して、 1. 各r∈PreDef(s,v’), t∈target(r,v’)に対して、vを定義しないようなパスr,…,tが存在す れば以下を実行 1. 2. 4. 5. DD ← DD ∪ { s v’ t } 任意のr∈PreDef(s,v’)に対して、v’を定義しないようなパスr,…,tが存在しなければ、 DD ← DD – { r v’ t | t ∈ PreDef(s,v) } u ∈ U – U’ に対して、 DD ← DD – { r u s | r∈PreDef(s,u) } u’ ∈ U’ – U に対して、 DD ← DD ∪ { r u’ s | r∈PreDef(s,u’)} Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 関数間解析 1. 関数内変更を実行 2. 変更した関数内で「必ず定義される」「定義される 可能性がある」「参照される可能性がある」変数の 集合を計算 3. 他の関数に与える影響を計算し、変化があれば 依存辺を追加・削除(各関数の値が収束するまで 繰り返す) Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 実験 Pascalスライシングシステムに実装 削除 約1060行 挿入 約570行 実行結果 単位:秒 SparcStation20上 50行 100行 250行 430行 PDG再計算 0.08 0.35 1.42 16.61 削除 <0.01 <0.01 0.01 0.07 挿入・変更 <0.01 <0.01 0.01 0.05 単一関数 複数関数 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University まとめ プログラムが変更された際に、プログラム全体を再解 析することなく、PDGを更新する手法を提案 実験により、PDG更新に要する時間を大幅に短縮 できることを確認 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 準動的情報を用いたプログラ ムスライシング手法 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 静的スライシングと動的スライシング 解析コスト 静的 < 動的 実行系列の保存 : 高コスト(実行時) 実行系列の解析 : 高コスト(解析時) スライスサイズ 静的 > 動的 静的スライシングでは全ての入力値を仮定 動的スライシングでは1種類のトレースを対象 実際の実行データを収集できるため、配列添字やポイン タ解析も可能 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 静的情報と動的情報の結合 静的解析情報 + 準動的解析 動的解析情報 効率的かつ効果的な解析 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 準動的解析 準動的解析のアプローチ 動的に 経路情報 を収集 コールマークスライシング (既存手法) 動的に データ依存関係 を収集 依存キャッシュスライシング Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University コールマークスライシング 依存関係 制御依存関係 データ依存関係 実行依存関係 ED(Execution Dependence) ある文が実行されなければ、別の文は決して実行されない 実行時、関数呼び出し文が実行されたかどうか (コールマーク)をセット コールマークとEDを基に、実行されなかった文を PDGから除外 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University コールマークスライシングの特長 実行されない文がスライスから除外される ⇒ 静的スライスより小さな(正確な)スライス 簡単なフラグと容易に計算できるCEDで実現可能 ⇒ 実装が容易 実行時に収集する情報は呼び出し文が実行された かどうかのみ ⇒ 実行時オーバヘッドの増加が少ない Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University コールマークスライシングの限界 配列・ポインタ・構造体変数の正確性は静的スライ シングと同等 ? ? 1: 2: 3: 4: 5: 6: a[0]:=0; a[1]:=3; readln(b); a[b]:=2; ? c:=a[0]+4; writeln(c); Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 依存キャッシュスライシング データ依存関係に着目した準動的スライシング手法 制御依存関係 構文解析で容易に解析可能 ⇒ 静的に解析 データ依存関係 静的に正確な解析は困難 ⇒ 簡単なキャッシュを用い、動的に解析 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 依存キャッシュスライスの計算 1. 実行前解析: 節点と制御依存辺のみからなる PDGのサブセットPDGDSを構築。変数にキャッシュ を用意 2. 実行時解析: 変数が定義されれば、キャッシュに 文を設定。変数が参照されれば、キャッシュに保持 されている文からデータ依存辺を追加 3. 実行後解析: なし 4. スライス計算: PDGDSの辺を辿りスライスを抽出 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University アルゴリズムの概要 1. 2. 3. 静的制御依存関係解析 PDGの部分グラフPDGDSを静的に生成する. まず,静的スライシングで利用するPDGと同様,文または制御文に対応する節点 を用意する.そして,文間に制御依存関係が存在すれば,対応する節点間に制 御依存辺を引く.ただし,PDGDSにデータ依存辺は加えない. 動的データ依存関係解析 対象プログラムをある入力データで実行する. 実行の際,次節で示すデータ依存関係抽出アルゴリズムに基き,動的なデータ依 存関係を計算し,PDGDSにデータ依存辺を追加する.プログラム実行が終了した 時点で,PDGDSの完成となる. PDGDSによるスライス計算 PDGDSを用いて,静的スライシングと同様の方法でスライス計算を行う. 例えば,スライシング基準(sc, v)に関する依存キャッシュを抽出する場合,まず,sc に対応する節点から制御依存辺およびvに関するデータ依存辺を逆向きに辿るこ とで到達可能な節点集合を導出する.そして,この節点集合に対応する文が求 めるスライスとなる. Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 動的データ依存関係抽出アルゴリズム 入力 PDGBL: 部分的に生成されブロック化されたPDG P: 対象プログラム I: Pへの入力 作業変数 P中の各変数vに対する依存キャッシュC(v) 出力 OUT: 入力Iに対するプログラムPの実行の出力 PDGBL: 完成したPDG アルゴリズム本体 1. P中の各静的変数vに対し, C(v) := Φ 2. Pが停止するまで以下を繰り返し実行する { Pを入力Iで最初から停止するまで文ごとに実行 } a) Iに関して,Pの次の一文sを実行 b) sで使用(参照)される各変数uについて, C(u) ≠Φかつ,データ依存辺 C(u) u sが存在しなければPDGBL にC(u) u sを追加する. c) sで定義される各変数wについて,C(w) := s Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University データ依存関係収集 キャッシュ内容 Input: b=0 b a[0] c 1: 2: 3: 4: 5: 6: a[0]:=0; a[1]:=3; readln(b); a[b]:=2; c:=a[0]+4; writeln(c); a[0] a[1] s1 s4 s2 b c s3 s5 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University データ依存関係収集(2) キャッシュ内容 Input: b=1 a[0] b c 1: 2: 3: 4: 5: 6: a[0]:=0; a[1]:=3; readln(b); a[b]:=2; c:=a[0]+4; writeln(c); a[0] a[1] s1 s2 s4 b c s3 s5 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 依存キャッシュスライスの特長 簡単なキャッシュを用いることで、動的なデータ依存 関係を収集 ⇒ 効率的かつ効果的なスライス 既存環境にキャッシュおよびDD辺構築機能を追加 することで実装可能 ⇒ 実装が容易 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 実験 3つのプログラム P1: カレンダー P2:酒屋問題 P3:酒屋問題(拡張版) について、 静的スライス コールマークスライス 依存キャッシュスライス 動的スライス を計算 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 実験結果~スライスサイズ 行 187 166 182 162 200 static 180 call-mark 160 dependence-cache 140 dynamic 120 100 80 61 60 40 20 21 17 15 5 16 8 5 0 P1 P2 P3 静的 > CM >> DC > 動的 P2・P3では配列変数を使用しているため顕著 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 実験結果~実行時解析時間 時間 6000 (ms) 5000 4000 3000 206464 static 4540 call-mark 4731 4700 4834 dependence-cache dynamic 2000 1000 0 47 47 51 174 P1 43 43 45 P2 P3 静的 ≒ CM ≒ DC << 動的 DCは僅かな実行時オーバヘッド増加で解析可能 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University まとめ 準動的手法を用いたスライシング手法 「依存キャッ シュスライシング」 を提案 スライスサイズは静的スライシングより小さく、動的ス ライシングより大きい 僅かな実行時オーバヘッドで、配列・ポインタ等を正 確に解析可能 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University むすび Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University まとめ プログラム中の文間の依存関係解析に関して,解析を効率 化するための手法を提案した. プログラムに変更が加えられた際の再解析を効率化し,インタラク ティブなデバッグ作業を実現するプログラム依存グラフの効率的な 更新手法 静的解析情報と動的解析情報を組み合わせた準動的解析手法 を用いることにより,現実的な実行時オーバヘッドで高精度のプロ グラムスライスを抽出できる依存キャッシュスライシング手法 提案手法についてそれぞれの有効性を確認 ↓ デバッグ作業の効率化、ソフトウェア開発の生産性向上 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University 今後の研究方針 作業者によるデバッグ作業における実験を通した評 価 実プログラムへの適用 PDG更新 … エイリアス解析等への対応 依存キャッシュスライシング … 他言語への実装 オブジェクト指向プログラムへの適用 継承・動的束縛などオブジェクト指向独自の概念への 対応 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
© Copyright 2025 ExpyDoc