/
オブジェクト 指向 オブジェクト 指向

オブジェクト 指向 - PowerPoint Presentation

quorksha
quorksha . @quorksha
Follow
342 views
Uploaded On 2020-08-29

オブジェクト 指向 - PPT Presentation

プログラムに対するメソッド呼び出しパターン違反の 検出手法 井上研究室  山田 吾郎 メソッド呼び出しパターンと は メソッド定義中に頻出するメソッド呼び出し系列 ID: 811453

close open piyo read open close read piyo hoge fuga

Share:

Link:

Embed:

Download Presentation from below link

Download The PPT/PDF document "オブジェクト 指向" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

オブジェクト指向プログラムに対するメソッド呼び出しパターン違反の検出手法

井上研究室 

山田 吾郎

Slide2

メソッド呼び出しパターンとはメソッド定義中に頻出するメソッド呼び出し系列メソッド呼び出し系列は, 以下の要素からなる

メソッド名

制御構造

(if, while, ...)パターンの中には,実装を行う上で守るべきルールを表しているものがある

特別研究発表会

2

open();

:read(); :close();

open(); :read(); :close();

open(); :read(); :close();

open(); :read(); :close();

メソッド定義1

メソッド定義2

メソッド定義n-1

メソッド定義n

・・・

Slide3

パターン違反とは パターンに違反したメソッド呼び出し系列

パターンに違反しているメソッド呼び出し系列は欠陥を含んでいる可能性がある

特別研究発表会

3

open();

:

read(); :close();

open(); :read(); : :

メソッド定義1メソッド定義2メソッド定義n-1

メソッド定義n・・・

open(); :read();

:close();

open();

:read(); :

close();

close

欠落している

Slide4

パターン違反の検出手法相関ルール(association rule)の確信度Cを用いる相関ルール

 

P1

⇒P2パターンP1, P2について,

あるメソッド定義中でP1が出現するとき,P2も出現

するというルール確信度C: P1が出現するとき,

P2も出現する条件付確率

確信度が1.0でなく,任意の閾値以上であればパターン違反を検出相関ルールに反しているメソッド定義がパターン違反特別研究発表会

4C( P

1 ⇒ P2

)=P

1の出現するメソッド定義

P

1,

P

2

ともに出現するメソッド定義

Slide5

パターン違反の検出例

2

つのパターン

P1 = {open, read}P2 = {open, read, close}

特別研究発表会

5

open();

:read(); :close();

open(); :read(); : :

メソッド定義1メソッド定義2メソッド定義99

メソッド定義100・・・

open(); :read();

:close();

open();

:read(); :

close();

パターン違反

C

(

P

1

P

2

)

=            =

  

P

1

の出現するメソッド定義   

100

P

1

,

P

2

ともに出現するメソッド定義  

99

Slide6

本研究の動機オブジェクト指向プログラムに対し,パターン違反を用いた欠陥検出を行った研究は確認できていない過去の適用例は,C言語で記述されたプログラムのみ

オブジェクト指向

プログラムである

Java言語に適用し,欠陥検出における有効性を確認する特別研究発表会

6

Slide7

適用にあたっての問題点と解決方法オブジェクト指向言語ではメソッド名だけでメソッドを特定できないC言語では関数名のみで関数を識別できるJava

言語では同名のメソッドが複数存在する

オーバーロード,クラス階層

欠陥検出において検出漏れが起こる可能性があるメソッド呼び出しに関連する型を考慮レシーバオブジェクト     引数

特別研究発表会

7

someClass.someMethod(arg1, arg2 );

Slide8

型を考慮することによる効果の例メソッド名のみ考慮する場合{x.open, x.read}

{a.open, a.read}

と同一視パターン{open, read}の出現メソッド定義数が増加

確信度C が減少

閾値を下回ると検出漏れ

型も考慮する場合{x.open, x.read}と{a.open, a.read}を区別することができる特別研究発表会

8a.open()

;a.read();a.close()

;a.open()

;a.read()

;a.

close();

a.

open

()

;

a.

read()

;

a.

close()

;

a.

open

()

;

a.

read()

;

a.

close()

;

a.

open

()

;

a.

read()

;

a.

close()

;

a.

open

()

;

a.

read()

;

:

x.

open

()

;

:

x.

close()

;

x.

open

()

;

:

x.

close()

;

x.

open

()

;

:

x.

close()

;

x.

open

()

;

:

x.

close()

;

x.

open

()

;

x.

read(); :

型A

型A

型X

型X

型A

型A

型A

パターン違反

Slide9

実験目的オブジェクト指向プログラムに対する有効性の評価欠陥を検出できるか,またその検出数を確認型を考慮することの有効性の評価

型を考慮することで,考慮しない場合に検出できなかった欠陥を検出できるか調査

欠陥を含まないパターン違反を削減できるか確認

特別研究発表会

9

Slide10

実験方法対象Javaで開発されたプログラムEclipse JDT

パターン違反とみなす確信度の閾値は

0.9

型を考慮する場合としない場合,2通りの実験を行う

特別研究発表会

10

行数

ファイル数メソッド数 334,5951,654

9,668

Slide11

実験結果とその評価 欠陥の検出数型を考慮した場合に

,

192のパターン違反から1つの欠陥が検出された型を考慮することの有効性検出された欠陥は,

型を考慮した場合のみ発見されたパターン違反が64.7%に削減された

そのうち65.1%が欠陥を含んでいた

特別研究発表会

11

型を考慮しない型を考慮パターン260121パターン違反

456295欠陥を含むパターン違反0192

欠陥01

Slide12

検出された欠陥について

P1={

writeU1, writeU2, writeU1, writeU2

}P2={problemReporter, ...}

特別研究発表会

12

writeU1(NameAndTypeTag); writeU2(nameIndex);}index = … = currentIndex++;

if (index > 0xFFFF){ ….problemReporter().noMoreAvailableSpaceInConstantPool(…);}writeU1

(MethodRefTag); writeU2(classIndex);org.eclipse.jdt.internal.compiler.codegen.ConstantPool

31のメソッド定義中

1つのみ欠落

C

( P

1

P

2

)

P

1

の出現するメソッド定義

P

1

,

P

2

ともに出現するメソッド定義

Slide13

まとめと今後の課題まとめオブジェクト指向プログラムに対し,パターン違反を用いた欠陥検出を行った適用に際し, 精度を高めるため型情報を用いた

欠陥の検出に成功し,型情報を用いる有効性も確認した

今後の課題

他のプログラムへの適用他の欠陥検出ツールとの比較

特別研究発表会

13

Slide14

ご清聴ありがとうございました特別研究発表会

14

Slide15

メソッド呼び出しパターンの抽出特別研究発表会

15

Slide16

検出漏れの原因相関ルールの左辺が原因型を考えなかった場合パターンP1{writeU1, writeU2, ...}は49のメソッド定義に出現

19

は異なるレシーバオブジェクトからの呼び出し

確信度Cは0.61

閾値を下回った型を考えた場合パターン

P1は31のメソッド定義に出現確信度

Cは0.97

特別研究発表会16

Slide17

型を考慮することによる効果(2/2)メソッド名のみ考慮する場合

a.close

x.closeを区別できない型も考慮する場合

x.closeが異なる型から呼び出されているため,異なるメソッドと認識

特別研究発表会

17

a.open();

:a.close();

a.open(); :

a.close();a.

open()

; :

a.close();

a.

open

()

;

:

a.

close()

;

a.

open

()

;

:

a.

close()

;

A

A

a.

open

()

;

:

x.

close()

;

A

X

パターン違反

Slide18

概要目的オブジェクト指向プログラムからの欠陥(バグ)検出背景

メソッド呼び出しパターンのパターン違反を元に欠陥を検出する研究がある

ただし対象は

C言語オブジェクト指向プログラムでも欠陥はみつかるのか?結論

適用実験を行い, 有効性の確認をした

特別研究発表会

18

Slide19

パターン違反とは (2/2)サブパターンと元のパターンで出現インスタンスの差分が少数そのメソッド定義に出現するサブパターンのインスタンスがパターン違反

特別研究発表会

19

method1(){

:

hoge();

:

fuga(); : piyo(); :

method2(){ :

hoge(); : fuga(); : piyo(); :

method3(){ :

hoge(); :

fuga(); :

piyo(); :

method4(){

:

hoge();

:

fuga();

:

piyo();

:

method5(){

:

hoge();

:

:

:

piyo();

:

fuga()

?

パターン違反

パターン違反は欠陥を示す場合がある

Slide20

パターン違反の検出例以下2つのパターンの信頼度Cを求めるパターンA={hoge, piyo}パターン

B={hoge, fuga, piyo}

特別研究発表会

20

method1(){

:

hoge();

: fuga(); :

piyo(); :

method2(){ : hoge(); : fuga(); :

piyo(); :

method3(){ :

hoge(); :

fuga(); : piyo();

:

method4(){

:

hoge();

:

fuga();

:

piyo();

:

method5(){

:

hoge();

:

:

:

piyo();

:

パターン違反

Slide21

パターン違反の検出手法相関ルール(association rule)の信頼度Cを用いる相関ルール

:

パターン

A, Bについて, あるメソッド定義中でAのインスタンスが存在する時B

のインスタンスも同時に存在するというルール. A

⇒Bと書く

パターン違反は次のように定義される

信頼度Cが次の式を満たす相関ルールRがあるとき m≦C<1.0(m:ユーザ定義の閾値)Rの左辺と右辺の出現メソッド定義の差集合に出現する左辺のインスタンスがパターン違反

特別研究発表会21

Slide22

メソッド呼び出しパターンとはソースコード中に頻出するメソッド呼び出し系列メソッド呼び出し系列は, 以下の要素からなるメソッド名

制御構造

(if, while,

...)インスタンスパターンに一致するメソッド呼び出し系列である

特別研究発表会

22

if

(!buffer.isEditable()) {

textArea.getToolkit().beep(); return;}

パターン[ IF, isEditable, beep, ENDIF ] (テキスト編集ソフトJEdit中に25回出現)

Slide23

パターン違反の検出手法(2/2)信頼度が1.0ではない十分大きな値の相関ルールは, ルールが成立しない箇所にパターン違反が存在することを示すしかし

,

オブジェクト指向プログラムへの適用事例はまだない

特別研究発表会

23

Slide24

背景(2/2)しかし, 適用対象のプログラムはいずれもC言語近年普及しているオブジェクト指向型言語のプログラムに適用した例はない

特別研究発表会

24

Slide25

提案手法(3/3)特別研究発表会

25

既存手法

提案手法

メソッド名のみでマイニング

⇒同一パターンと判断

a.close((X)y)

は異なるメソッドであり

, 欠陥である可能性があるにもかかわらず検出されない

引数の型を考慮⇒異なるパターンと認識a.close((X)y) をパターン違反として検出できる

a.open((T)x);:a.close(

(X)y);

a.

open((T)x)

;:a.close(

(M)y

)

;

a.

open(

(T)x

)

;

:

a.

close(

(M)y

)

;

a.

open(

(T)x

)

;

:

a.

close(

(M)y

)

;

a.

open(

(T)

x

)

;

:

a.

close(

(X)

y

)

;

a.

open(

(T)x

)

;

:a.close((M)y);a.open((T)x);

:a.

close(

(M)y

)

;

a.

open(

(T)

x

)

;

:

a.

close(

(M)

y

)

;

Slide26

評価実験Javaプログラムを対象に2通りの実験を行った型を考慮しない従来の手法をそのまま適用

型を考慮する

提案手法

次の2点で評価を行う欠陥は見つかるのかオブジェクト指向プログラムにおいてもパターン違反による欠陥検出は有効か確かめる

型を考慮する利点はあるのか

提案手法の有効性を確かめる特別研究発表会

26

Slide27

提案手法により期待できる効果(1/2)特別研究発表会

27

既存手法

a.

hoge

()

;

:

x.piyo();

提案手法メソッド名のみで

パターン違反検出⇒同一メソッドと判断x.piyo() は欠陥である可能性があるにもかかわらずパターン違反として検出されず, 検出漏れが起こる

メソッド呼び出しに関連の型を考慮⇒異なるメソッドと認識

x.piyo() をパターン違反として検出できる

a.

hoge()

;

:

a.

piyo()

;

a.

hoge

()

;

:

a.

piyo()

;

a.

hoge

()

;

:

a.

piyo()

;

a.

hoge

()

;

:

x.

piyo()

;

a.

hoge

()

;

:

a.

piyo()

;

a.

hoge

()

;

:

a.

piyo()

;

a.

hoge

()

;

:

a.

piyo()

;

A

A

A

X

A

A

A

X

Slide28

実験対象と設定項目対象: Eclipse JDT(Java Development Tools)信頼度Cの閾値

:

0.8特別研究発表会

28

Slide29

提案手法により期待できる効果(2/2)特別研究発表会

29

既存手法

a.

open

()

;

:

a.close();

a.open ();:a.close ();

提案手法・x.open(), x.close() をサブパターンと誤認識

⇒相関ルールの信頼度が低下⇒a.open(), a.close()

がパターン違反として検出されず, 検出漏れが起こる

・x.open(),x.close()

を別のパターンと認識⇒a.open(), a.close() をパターン違反として検出できる

a.

open()

;

:

a.

close()

;

a.

open()

;

:

a.

close()

;

a.

open()

;

a.

hoge()

;

a.

close()

;

a.

open

()

;

:

a.

close()

;

a.

open

()

;

:

a.

close()

;

a.

open

()

;

a.hoge()

;a.close()

;

a.

open()

;

:

a.

close()

;

a.

open()

;

:

a.

close()

;

x

.

open()

;

:

x.

close()

;

a.

open

()

;

:

a.close ();a.open ()

;:a.close ();x.open ()

;:x.close ();

Slide30

パターン違反の検出手法相関ルール(association rule)の確信度Cを用いる相関ルール

 

P1

⇒P2パターンP1, P2について,

あるソースコード中でP1が出現するとき,P2も

存在するというルール確信度C: P1が出現するとき,

P2も出現する条件付確率確信度が

1.0でなく,任意の閾値以上であればパターン違反特別研究発表会30

open(); :read(); :close();

open(); :read(); : :

ソースコード1ソースコード2ソースコード99

ソースコード100

・・・

open();

:read(); :

close();

open();

:

read();

:

close();

P2

 

99

のソースコードで出現

P1

 

100

のソースコードで出現

Related Contents


Next Show more