動的解析情報を利用した Javaプログラムからの シーケンス図の作成 谷口考治†,石尾隆†,神谷年洋‡, 楠本真二†,井上克郎† †大阪大学大学院情報科学研究科 ‡科学技術振興機構さきがけ 2015/11/6 情報処理学会 全国大会 発表の流れ  背景と動機   提案する手法     オブジェクト指向プログラムの理解支援 実行履歴の取得と圧縮 圧縮結果を元にした図の作成 適用実験 まとめと今後の課題 2015/11/6 情報処理学会 全国大会 研究の背景  オブジェクト指向プログラム  複数のオブジェクト間で相互にメッセージをやり取 りすることによってプログラムが動作する クラスB B-1 C-1 クラスA A-1 オブジェクト 2015/11/6 メッセージ クラスC D-1 クラスD 情報処理学会 全国大会 C-2 研究の背景  オブジェクト指向プログラムの動作を理解するう えでの問題点  1つの機能を実現するために、複数のオブジェクトが 協調して動作する   動的に決定する要素が多い   実際にメソッドを実行するオブジェクトが動的に決まる等 メッセージ通信が複雑になる  2015/11/6 複数のオブジェクトの動作を追いながら全体を理解しなけれ ばない オブジェクト数が増加するにつれて、メッセージ通信の回数 が増え、より複雑になる 情報処理学会 全国大会 研究目的と動機  オブジェクト指向プログラムの理解支援  プログラムの動的解析から、オブジェクト間のメッセー ジ通信を、UMLのシーケンス図の形式で表現する A-1 B-1 C-1 C-2 D-1 シーケンス図 2015/11/6 情報処理学会 全国大会.

Download Report

Transcript 動的解析情報を利用した Javaプログラムからの シーケンス図の作成 谷口考治†,石尾隆†,神谷年洋‡, 楠本真二†,井上克郎† †大阪大学大学院情報科学研究科 ‡科学技術振興機構さきがけ 2015/11/6 情報処理学会 全国大会 発表の流れ  背景と動機   提案する手法     オブジェクト指向プログラムの理解支援 実行履歴の取得と圧縮 圧縮結果を元にした図の作成 適用実験 まとめと今後の課題 2015/11/6 情報処理学会 全国大会 研究の背景  オブジェクト指向プログラム  複数のオブジェクト間で相互にメッセージをやり取 りすることによってプログラムが動作する クラスB B-1 C-1 クラスA A-1 オブジェクト 2015/11/6 メッセージ クラスC D-1 クラスD 情報処理学会 全国大会 C-2 研究の背景  オブジェクト指向プログラムの動作を理解するう えでの問題点  1つの機能を実現するために、複数のオブジェクトが 協調して動作する   動的に決定する要素が多い   実際にメソッドを実行するオブジェクトが動的に決まる等 メッセージ通信が複雑になる  2015/11/6 複数のオブジェクトの動作を追いながら全体を理解しなけれ ばない オブジェクト数が増加するにつれて、メッセージ通信の回数 が増え、より複雑になる 情報処理学会 全国大会 研究目的と動機  オブジェクト指向プログラムの理解支援  プログラムの動的解析から、オブジェクト間のメッセー ジ通信を、UMLのシーケンス図の形式で表現する A-1 B-1 C-1 C-2 D-1 シーケンス図 2015/11/6 情報処理学会 全国大会.

動的解析情報を利用した
Javaプログラムからの
シーケンス図の作成
谷口考治†,石尾隆†,神谷年洋‡,
楠本真二†,井上克郎†
†大阪大学大学院情報科学研究科
‡科学技術振興機構さきがけ
2015/11/6
情報処理学会 全国大会
1
発表の流れ

背景と動機


提案する手法




オブジェクト指向プログラムの理解支援
実行履歴の取得と圧縮
圧縮結果を元にした図の作成
適用実験
まとめと今後の課題
2015/11/6
情報処理学会 全国大会
2
研究の背景

オブジェクト指向プログラム

複数のオブジェクト間で相互にメッセージをやり取
りすることによってプログラムが動作する
クラスB
B-1
C-1
クラスA
A-1
オブジェクト
2015/11/6
メッセージ
クラスC
D-1
クラスD
情報処理学会 全国大会
C-2
3
研究の背景

オブジェクト指向プログラムの動作を理解するう
えでの問題点

1つの機能を実現するために、複数のオブジェクトが
協調して動作する


動的に決定する要素が多い


実際にメソッドを実行するオブジェクトが動的に決まる等
メッセージ通信が複雑になる

2015/11/6
複数のオブジェクトの動作を追いながら全体を理解しなけれ
ばない
オブジェクト数が増加するにつれて、メッセージ通信の回数
が増え、より複雑になる
情報処理学会 全国大会
4
研究目的と動機

オブジェクト指向プログラムの理解支援

プログラムの動的解析から、オブジェクト間のメッセー
ジ通信を、UMLのシーケンス図の形式で表現する
A-1
B-1
C-1
C-2
D-1
シーケンス図
2015/11/6
情報処理学会 全国大会
5
シーケンス図作成手順
解析対象となる機能に対応した入力を決定
実行履歴の取得
1.
2.
プログラムを動作させメソッド呼び出しの実行履
歴を取得

実行履歴を解析
3.
冗長な情報を圧縮

4.
シーケンス図生成
2015/11/6
情報処理学会 全国大会
6
Step2:実行履歴の取得

実行履歴


「メソッドの開始」イベントで以下の情報を記録





2015/11/6
「メソッドの開始」と「メソッドの終了」の2つのイベント系列
メソッドの呼び出しを受けたオブジェクトのID
パッケージ名・クラス名
メソッド名
引数の型
Java仮想マシン・プロファイラインタフェース(JVMPI)
を用いて実装
情報処理学会 全国大会
7
実行履歴の例
Gemini(0).main(java/lang/String){
GeneralManager(44753296).GeneralManager(java/lang/String){
MDI(44736792).MDI(java/lang/String,GeneralManager){
MDI(49860968).initComponents(){
MDI(49860968).initMenuBar(){
MDI$2(44662040).MDI$2(MDI){
}
MDI$3(44666320).MDI$3(MDI){
}
MDI$4(44682200).MDI$4(MDI){
}
}
MDI$1(44734832).MDI$1(MDI){
ccfinder/CCFinderManager(44820192).CCFinderManager(java/awt/Container){
}
}
}
ccfinder/CCFinderManager(44820192).CCFinderManager(java/awt/Container){
パッケージ名
2015/11/6
クラス名
オブジェクトID
メソッド名
情報処理学会 全国大会
引数の型
8
Step3:実行履歴の解析

Step2で取得した実行履歴はループ内のメソッド呼び
出しを全て記録している


実行履歴の繰り返し部分を発見し、圧縮する必要が
ある




2015/11/6
これら全てをシーケンス図中に示すのは冗長
プログラム中のループに相当する繰り返し部分を可能な限り
発見
情報の損失を少なく
図として表現しやすく
展開して元の実行履歴も参照できるようにする
情報処理学会 全国大会
9
提案する圧縮ルール




2015/11/6
R1 : 同一部分系列の繰り返し
R2 : オブジェクトが異なる(ただし同一クラスの)系列
の繰り返し
R3 : 欠損を含む系列の繰り返し
R4 : 再帰構造
情報処理学会 全国大会
10
R1:同一部分系列の繰り返し

実行履歴中の完全に同一な繰り返しを圧縮
A(1).a(){
B(2).b(){
C(3).c(){
}
}
D(4).d(){
}
B(2).b(){
C(3).c(){
}
}
D(4).d(){
}
・・・
}
2015/11/6
A(1).a(){
B(2).b(){
C(3).c(){
}
}
D(4).d(){
}
}
情報処理学会 全国大会
n
11
R2:オブジェクトが異なる系列の
繰り返し

オブジェクトのみが異なる繰り返しを圧縮
A(1).a(){
B(2).b(){
C(3).c(){
}
}
D(4).d(){
}
B(5).b(){
C(3).c(){
}
}
D(7).d(){
}
・・・
}
2015/11/6
A(1).a(){
B(*).b(){
C(3).c(){
}
}
D(*).d(){
}
}
情報処理学会 全国大会
n
12
R3:欠損を含む系列の繰り返し

呼び出し構造の一部が欠けている繰り返しを圧縮
A(1).a(){
B(2).b(){
C(3).c(){
}
}
D(4).d(){
}
B(2).b(){
}
D(4).d(){
}
・・・
}
2015/11/6
A(1).a(){
B(2).b(){
? C(3).c(){
}
}
D(4).d(){
}
}
情報処理学会 全国大会
n
13
R4:再帰構造

再帰構造を圧縮

再帰構造全体を簡潔に表現できるように組み替える
A(1).a(){
A(2).a(){
A(3).a(){
B(4).b(){
}
}
B(5).b(){
}
}
B(6).b(){
}
}

2015/11/6
A(*).a(){
recursive A(*).a(){
}
B(*).b(){
}
}
再帰の階層差を緩和することで、この手法以降に適用する繰り
返し圧縮ルールの効果が高くなる
情報処理学会 全国大会
14
Step4:シーケンス図の作成


実行履歴を元にシーケンス図を作成
圧縮時に付加された情報もシーケンス図
中に記録
2015/11/6
情報処理学会 全国大会
15
A(1).a(){
B(2).b(){
}
}
A[1]
B[2]
a()
b()
2015/11/6
情報処理学会 全国大会
16
A(1).a(){
B(2).b(){
}
B(2).b(){
}
}
A(1).a(){
B(2).b(){
}
}
A[1]
2
B[2]
a()
b()
2
2015/11/6
情報処理学会 全国大会
17
A(1).a(){
B(2).b(){
}
B(3).b(){
}
}
A(1).a(){
B(*).b(){
}
}
A[1]
2
B[2,3]
a()
b()
2
2015/11/6
情報処理学会 全国大会
18
A(1).a(){
B(2).b(){
C(4).c(){
}
}
B(3).b(){
}
}
A(1).a(){
B(*).b(){
? C(4).c(){
2
}
}
}
A[1]
B[2,3]
C[4]
a()
b()
? c()
2
2015/11/6
情報処理学会 全国大会
19
A(1).a(){
A(1).a(){
B(2).b(){
}
}
B(2).b(){
}
}
A(1).a(){
recursive A(1).a(){
}
B(2).b(){
}
}
A[1]
B[2]
a()
a()
2015/11/6
b()
情報処理学会 全国大会
20
適用実験

対象とするプログラムと実行履歴を取得した機能

jEdit:フリーのテキストエディタ


Gemini:コードクローン分析ツール


日にち指定、スケジュール記述
LogCompactor:このツールの実行履歴圧縮部


ファイル指定、クローン解析、クローン情報表示
Scheduler:スケジュール管理ツール


テキストファイルの読み込み
実行履歴の読み込み、表示、R2の実行
次の順序で圧縮ルールを適用し、それぞれのルールを適用後の実
行系列の長さを計測した

2015/11/6
R4→R1→R2→R3
情報処理学会 全国大会
21
圧縮結果(1/2)
jEdit
250,000
228,764
Gemini
250,000
217,351
200,000
208,360
150,000
150,000
100,000
100,000
50,000
50,000
57,365
16,889
16,510
0
圧縮前
R4
R1
R2
0
R3
圧縮前
Scheduler
5,000
4,500
4,000
3,500
3,000
2,500
2,000
1,500
1,000
500
0
205,483
200,000
178,128
4,398
R4
R1
1,954
1,762
R2
R3
208
105
R2
R3
LogCompactor
14,000
4,398
3,995
12,000
11,994
10,000
8,874
8,426
8,000
6,000
4,000
238
147
2,000
0
圧縮前
2015/11/6
R4
R1
R2
R3
圧縮前
情報処理学会 全国大会
R4
R1
22
圧縮結果(2/2)
jEdit-2
18,000
16,889
Gemini-2
16,510
2,500
16,000
2,000
14,000
1,954
1,762
12,000
1,500
10,000
8,000
1,000
6,000
4,000
500
2,000
0
R2
0
R3
R2
Scheduler-2
250
R3
LogCompactor-2
238
250
208
200
200
147
150
150
105
100
100
50
50
0
R2
2015/11/6
R3
0
R2
情報処理学会 全国大会
R3
23
シーケンス図作成
Schedulerの実行履歴から作成したシーケンス図
2015/11/6
情報処理学会 全国大会
24
まとめと今後の課題

オブジェクト指向プログラムの理解支援を目的として、
動的解析情報からシーケンス図を作成する手法を提
案し実装した



今後の課題



2015/11/6
考案した実行履歴圧縮手法により、実行履歴の大部分を圧
縮
圧縮結果からシーケンス図を作成
作成したシーケンス図の評価
実行履歴の分割
マルチスレッドへの対応
情報処理学会 全国大会
25