シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための...

24
シシシシシシシシシシシシシシシシシシシシシシシシシシシシシシシシシ シシシシ シシシシシシ ○ シシ シシ , シシシシ , シシシシ シシシシ

description

シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法. ○山田 吾郎 , 吉田則裕 , 井上克郎 大阪大学. 概要. ソースコードを解析し , 品質の低い部分を自動的に特定する研究がある 本研究はソースコードの自動解析による欠陥  ( バグ ) 検出を目的としている メソッド呼び出しパターンの抽出 シーケンシャルパターンマイニングを用いる メソッド呼び出しパターンのパターン違反検出 パターン違反は欠陥を含む可能性が高い オブジェクト指向プログラムに対するパターン違反検出手法の提案 適用実験として欠陥検出における有効性を評価. - PowerPoint PPT Presentation

Transcript of シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための...

Page 1: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための

欠陥検出手法

○ 山田 吾郎 , 吉田則裕 , 井上克郎

大阪大学

Page 2: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

概要

ソースコードを解析し , 品質の低い部分を自動的に特定する研究がある本研究はソースコードの自動解析による欠陥 ( バグ ) 検出を目的としている

メソッド呼び出しパターンの抽出シーケンシャルパターンマイニングを用いる

メソッド呼び出しパターンのパターン違反検出パターン違反は欠陥を含む可能性が高い

オブジェクト指向プログラムに対するパターン違反検出手法の提案

適用実験として欠陥検出における有効性を評価

2

Page 3: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

目次

背景メソッド呼び出しパターンシーケンシャルパターンマイニングパターン違反

提案手法オブジェクト指向言語に適用する際の問題点とその解決方法

実験提案手法と既存手法の比較

まとめ

3

Page 4: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

メソッド呼び出しパターンとは

メソッド定義で頻出するメソッド呼び出し系列メソッド呼び出し系列は , 以下の要素からなる

メソッド名 , 制御構造 (if, while, ...)シーケンシャルパターンマイニングにより抽出パターンの中には,実装を行う上で守るべきルールを表しているものがある

4

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

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

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

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

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

メソッド定義 n-1

メソッド定義 n

・・・

Page 5: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

メソッド呼び出しパターン抽出までの流れ

1. ソースコードを入力2. ソースコードからメソッド呼び出し系列を抽出

3. メソッド呼び出し系列に対しシーケンシャルパターンマイニングを適用

4. メソッド呼び出しパターンを出力5

method1(){ int i; open(); if (…){ read(); } close();}

open#IFread#END-IFclose

Page 6: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

多数の系列から頻出する部分系列を抽出する手法系列 : 順序を考慮するデータの集合

メソッド呼び出しパターンではメソッド呼び出しと制御構造

部分系列 : 系列の任意の要素を , 順序を保存したまま取り出すことでできる系列

PrefixSpan アルゴリズム [1] を使用

系列

シーケンシャルパターンマイニングとは

6

[1]Pei, J., Han, J., Mortazavi-Asl, B., Pinto., H., Chen, Q., Dayal, U. and Hsu, M.-C.: PrefixSpan: Mining Sequential Patterns Efficiently by Prefix-Projected PatternGrowth, Proc. of ICDE 2001, Heidelberg, Germany, pp.215–224 (2001).

a b c d e

部分系列

a c e部分系列ではな

a ce

Page 7: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

系列の集合

PrefixSpan アルゴリズム概要

入力系列の集合シーケンシャルパターンの出現数の最小値シーケンシャルパターンの長さの最小値

出力シーケンシャルパターン

系列中での出現位置

7

[abcd][aeade

]

[dafb][acd]

出現数 2 以上

長さ 2 以上

[ab]:2[ac]:2[ad]:2

[cd]:2[acd]:2

Page 8: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

パターン違反とは

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

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

8

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

open(); :read(); : :

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

メソッド定義 n-1

メソッド定義 n

・・・

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

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

close が欠落してい

Page 9: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

パターン違反の検出手法 (1/2)

相関ルール (association rule) の確信度 C を用いる

相関ルール  P1⇒P2パターン P1, P2 について , あるメソッド定義中で P1 が出現するとき, P2 も出現するというルール

確信度 C: P1 が出現するとき, P2 も出現する条件付確率

9

C( P1 ⇒ P2 )=

P1 の出現するメソッド定義数P1, P2 ともに出現するメソッド定義数

Page 10: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

パターン違反の検出手法 (2/2)

確信度が 1.0 でなく,ある閾値以上であればパターン違反として検出

閾値はユーザが任意に指定

P1⇒P2 で,確信度が高いときの例

10

P1 P2

パターン違反

Page 11: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

パターン違反の検出例

2 つのパターンP1 = [open, read]P2 = [open, read, close]

11

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

open(); :read(); : :

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

メソッド定義 99 メソッド定義 100

・・・

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

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

パターン違反

C (P 1 ⇒ P 2)=                   

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

P1, P2 ともに出現するメソッド定義 =10

99

Page 12: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

目次

背景メソッド呼び出しパターンシーケンシャルパターンマイニングパターン違反

提案手法オブジェクト指向言語に適用する際の問題点とその解決方法

実験提案手法と既存手法の比較

まとめ

12

Page 13: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

本研究の動機

オブジェクト指向プログラムに対し,パターン違反を用いた欠陥検出を行った研究は確認できていない

過去の適用例は, C 言語で記述されたプログラムのみ

オブジェクト指向言語 Java で記述されたプログラムに適用し,欠陥検出における有効性を確認する

13

Page 14: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

適用にあたっての問題点と解決方法

オブジェクト指向言語ではメソッド名だけでメソッドを特定できない

C 言語では関数名のみで関数を識別できるJava 言語では同名のメソッドが複数存在する

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

欠陥検出において検出漏れが起こる可能性がある

メソッド呼び出しに関連する型を考慮

レシーバオブジェクト    引数の順序つき列14

someClass.someMethod(arg1, arg2 );

Page 15: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

型を考慮することによる効果

メソッド名のみ考慮する場合[x.open, x.read]を [a.open, a.read] と同一視パターン [open, read] の出現メソッド定義数が増加

確信度 C が減少 閾値を下回ると検出漏れ

型も考慮する場合[x.open, x.read]と [a.open, a.read] を区別可能

15

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();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

パターン違反

Page 16: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

作成したツールについて

提案手法を実装したツールを作成入力 :

ソースコードソースコードから抽出したメソッド呼び出しパターン (XML)

出力 :パターン違反の閲覧画面

パターン違反を生じている相関ルールソースコード上でのパターン違反の出現場所

16

パターン違反検出

Page 17: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

目次

背景メソッド呼び出しパターンシーケンシャルパターンマイニングパターン違反

提案手法オブジェクト指向言語に適用する際の問題点とその解決方法

実験提案手法と既存手法の比較

まとめ

17

Page 18: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

実験目的

オブジェクト指向プログラムに対する有効性の評価

欠陥を検出できるか,またその検出数を確認

型を考慮することの有効性の評価型を考慮することで,考慮しない場合に検出できなかった欠陥を検出できるか調査欠陥を含まないパターン違反を削減できるか確認

18

Page 19: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

実験方法 (1/2)

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

メソッド呼び出しパターンを,最小出現回数30 ,パターンの最小の長さを 4 として抽出パターン違反とみなす確信度の閾値は 0.9型を考慮する場合としない場合, 2通りの実験を行う

19

行数 ファイル数 メソッド数

334,595

1,654 9,668

Page 20: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

実験方法 (2/2)

以下の 4項目について比較パターン

抽出されたメソッド呼び出しパターンの総数

パターン違反検出されたパターン違反の総数

欠陥を示すパターン違反パターン違反を起こしているメソッド定義中に欠陥が含まれていたものの数

欠陥すべてのパターン違反の中から見つかった欠陥の総数

20

Page 21: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

実験結果とその評価

欠陥の検出数型を考慮した場合に , 192 のパターン違反から 1 つの欠陥が検出された

型を考慮することの有効性検出された欠陥は , 型を考慮した場合のみ発見されたパターン違反が 64.7% に削減されたそのうち 65.1% が欠陥を含んでいた

21

型を考慮しない 型を考慮

パターン 260 121パターン違反 456 295

欠陥を示すパターン違反

0 192

欠陥 0 1

Page 22: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

検出された欠陥について

P1=[writeU1, writeU2, writeU1, writeU2]P2=[problemReporter, ...]

22

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 ) =

P1 の出現するメソッド定義P1, P2 ともに出現するメソッド定義

Page 23: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

まとめと今後の課題

まとめオブジェクト指向プログラムに対し,パターン違反を用いた欠陥検出を行った

適用に際し , 精度を高めるため型情報を用いた

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

今後の課題他のプログラムへの適用他の欠陥検出ツールとの比較共通の親クラスの探索脆弱性に関する欠陥の検出

23

Page 24: シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法

ご清聴ありがとうございました

24