動的情報を利用した
Download
1 / 16

動的情報を利用した Java スライスシステム   ~メソッド間動的データ依存関係の適用 と ユーザインターフェース部の試作~ - PowerPoint PPT Presentation


  • 99 Views
  • Uploaded on

動的情報を利用した Java スライスシステム   ~メソッド間動的データ依存関係の適用 と ユーザインターフェース部の試作~. 藤井 将人 井上研究室. 背景. ソフトウェアの大規模化,複雑化 テスト工程のコストが増大 フォールトの検出・位置の特定・修正 フォールト位置の特定を効率よく行える一手法     プログラムスライス プログラムスライス: プログラム中の,ある変数に対して影響を与える文の集合. a=7. データ依存関係. 1: a=7; 2: b=m(a); 3: max=a; 4: if (a>b) 5: max=b;

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 動的情報を利用した Java スライスシステム   ~メソッド間動的データ依存関係の適用 と ユーザインターフェース部の試作~' - agrata


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

動的情報を利用したJavaスライスシステム  ~メソッド間動的データ依存関係の適用 と ユーザインターフェース部の試作~

藤井 将人

井上研究室


背景

  • ソフトウェアの大規模化,複雑化

  • テスト工程のコストが増大

    • フォールトの検出・位置の特定・修正

  • フォールト位置の特定を効率よく行える一手法     プログラムスライス

  • プログラムスライス: プログラム中の,ある変数に対して影響を与える文の集合


a=7

データ依存関係

1: a=7;

2: b=m(a);

3: max=a;

4: if (a>b)

5: max=b;

6: print(max);

m1: int m(int x){

m2: return x-3}

1: a=7;

2: b=m(a);

3: max=a;

4: if (a>b)

5: max=b;

6: print(max);

m1: int m(int x){

m2: return x-3}

b=m(a)

a=7

制御依存関係

b=m(a)

if (a>b)

max=a;

if (a>b)

max=b

print(max)

max=b

print(max)

m(int x)

m(int x)

return x-3

return x-3

プログラムスライス計算手順

  • 依存関係解析

    • データ依存関係解析

    • 制御依存関係解析

  • プログラム依存グラフ(PDG)構築

    • 節点: 文,条件節

    • 辺: 節点間の依存関係

  • PDG探索

    • スライス基準に対応する節点から辺を逆向きにたどる

1: a=7;

2: b=m(a);

3: max=a;

4: if (a>b)

5: max=b;

6: print(max);

m1: int m(int x){

m2: return x-3}


Javaスライスシステム

  • システム概要

    • 依存関係解析部

      • DCスライス

        • データ依存関係解析:動的

        • 制御依存関係解析:静的

                   +

      • メソッド間データ依存関係解析:動的

        • メソッド間データ依存関係:

            メソッド呼び出し文と各メソッドとの依存関係

    • ユーザインターフェース(GUI)部

      • スライス結果を表示


ユーザインターフェース

  • スライス基準を指定し、スライス結果を表示

  • 主な機能

    • スライスにあたる文の背景に色を挿入

    • GUI内からプログラムのコンパイル・実行が可能

    • 複数のファイルにわたるプログラムに対応

開発言語:  Java

サイズ:

 約3100行


B(){

 ・・

c=M(b);

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

int M(int x){

 ・・

return m;

}

B(){

 ・・

c=M(b);

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

int M(int x){

 ・・

return m;

}

int M(int x){

 ・・

return m;

}

依存関係の存在しない,

メソッドBもスライスに含まれる

Calling-Contextを考慮した解析を行うことで,

スライスサイズを削減できる

手法提案の背景

  • Calling-Context(呼び出し経路)を特定できない問題


提案手法

  • メソッド間データ依存関係解析を動的に行う

    • メソッド間データ依存関係: 

         メソッド呼び出し文と各メソッドとの依存関係

  • アルゴリズム概要

    • PDG構築時に,メソッド間データ依存辺に実行履歴(index)を付加する

    • indexに沿ってPDGを探索する


index=4

index=9

index=5

index=6

main(){

・・

g=5;

A();

B();

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

int M(int x){

 ・・

return m;

}

4

5

8

6

9

7

履歴付加アルゴリズム

  • indexを用意

    1.呼び出し,returnのたびに依存辺にindexをインクリメントして付加

    2.他のメソッドの変数を直接参照するときはindexをインクリメントせずに付加

index=3

main(){

・・

g=5;

A();

B();

・・

}

main(){

・・

g=5;

A();

B();

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

int M(int x){

 ・・

return m;

}

int M(int x){

 ・・

return m;

}

B(){

 ・・

c=M(b);

・・

}

4


main(){

・・

g=5;

A();

B();

・・

}

main(){

・・

g=5;

A();

B();

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

int M(int x){

 ・・

return m;

}

B(){

 ・・

c=M(b);

・・

}

4

5

8

8

4

6

9

9

7

7

スライスに含まれない=Calling-Context解決

履歴付きPDG探索アルゴリズム

  • index値に沿って探索

    • 探索可能な依存辺のうち,最後にたどった履歴付き依存辺のindex値より小さく,かつ最大値をもつような依存辺だけをたどる

int M(int x){

 ・・

return m;

}

B(){

 ・・

c=M(b);

・・

}


Sortプログラム

 再帰呼び出し

 ループ

241行

評価実験

  • 提案手法をJavaスライスシステムに実装

  • 比較手法

    • メソッド間依存辺にだけ履歴をつける手法(本提案手法)

    • すべての依存辺に履歴をつける手法(all)

      • 辺を引くたびにindexをインクリメントする

      • indexが小さい辺を探索

    • 履歴をつけない手法(DCスライス)


まとめと今後の課題

  • まとめ

    • 動的にメソッド間データ依存関係を解析する手法の提案

    • スライスシステムにおけるGUI部の試作

  • 今後の課題

    • 本提案手法の有効性の評価

    • ループ・再帰呼び出しの存在するプログラムに対する解析の効率化


スライスの有効性

  • 拡張酒屋問題プログラムにおける,(941行)に対する

    スライス評価実験


実験結果

プログラム1

 メソッド呼び出し

21行

プログラム2

 ループ

32行


main(){

・・

g=5;

A();

B();

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

int M(int x){

 ・・

return m;

}

int M(int x){

 ・・

return m;

}

B(){

 ・・

c=M(b);

・・

}

呼び出し経路を特定できないため,

メソッドBも探索される

Calling-Contextを考慮した解析を行うことで,

スライスサイズを削減できる

手法提案の背景

  • Calling-Context問題:

main(){

・・

g=5;

A();

B();

・・

}

A(){

 ・・

k=g;

a=M(k);

print(a);

・・

}

int M(int x){

 ・・

return m;

}

B(){

 ・・

c=M(b);

・・

}


GUI

オープンファイル名

   +

解析ファイル名

メニューバー

ファイル

ツールバー

実行結果

ファイル情報


ad