プログラムの静的解析手法の効率化と 解析フレームワークの構築

Download Report

Transcript プログラムの静的解析手法の効率化と 解析フレームワークの構築

プログラム静的解析手法の効率化と
解析フレームワークの構築に関する研究
大阪大学 大学院基礎工学研究科
情報数理系専攻 ソフトウェア科学分野
大畑 文明
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