Transcript 変数表
エイリアス関係を考慮した
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構築対象の選択を可能にすることでのコスト削減
平成拾伍年弐月拾八日
二○○二年度修士論文発表会
拾九
終劇