• 沒有找到結果。

2. 相關研究

2.5. 資料探勘技術

本研究的分析對象為真實世界的專案,其程式量可預期地將會十分龐大,而傳統的 統計計數也將因此無法清楚描繪此工作,故在此使用 資料探勘(data mining)的技術於程式 分析上。[26]認為資料探勘指的是:

“…extracting or mining knowledge from large amounts of data…"

我們若將程式本體視為大量資料(large amounts of data),那麼 extracting knowledge 則是研 究動機中稱:尋找開發過程中未揭露之資訊。因此在適當的演算法設計下,使用資料探 勘技術自動化地產生專案文件為一可行之方法。資料探勘內含多種方法,視各應用領域 而決定使用一種或多種方法,其中 association rule 相關之方法是用以分析資料內各元件 之相關性,本文將採用此方法進行研究。

2.5.1. ASSOCIATION ANALYSIS

而本研究目的在於探討程式中各元件之間的相互關係,因此若使用 Association Analysis 應為可行,而目前已有一些研究[2, 3, 5, 6, 27, 28]使用該技術,該方法較易實作,

且參數調整與結果上只需兩個參數(support 及 confidence),結果易於表達,但是用於程式 分析上有其缺點,原因是程式分析中需注意到事件發生之順序。

舉例來說,在 C 語言中 malloc 函式之使用必在 free 函式之前,否則記憶體配置會被 破壞,而該方法恰缺少元件間前後關係的表達,在此例中 association analysis 可找出 malloc 及 free 函式之共同出現性,但無法說明 free 在 malloc 之前或之後。

2.5.2. SEQUENTIAL PATTERN

為解決前後次序之問題,有另外的研究如[29]等,其方法根基於 association rule 上,

進一步地解決此問題,不過目前尚未發現有論文將其應用於程式分析上。

舉例來說,假設有一程式,其內容如圖 7 所示,經編譯後執行,假設執行時可完整 測試各個 execution path(即各種 condition),則結果可整理成表 3 之內容,其中第一欄 sequence 表示不同次的 execution path,而 order 表示當中的執行次序,在此以一次的 function 為一單位,而最後的 Item 項則是該次 function call 中含有的 progam element,包含回傳值、

函式名稱以及所使用之參數。

Enter function

if (condition_1) then A( );

B( );

else if (condition_2) then C(D);

A( );

E = F(G );

else if (condition_3) then G = A(H);

else if (condition_4) then A();

E = I(G);

B();

else if (condition_5) then B();

Exit function

圖 7 Sequential Pattern 示範程式

表 3 轉換為 Sequential Pattern 格式

sequence Order Item

1 1 A

1 2 B

2 1 C, D

2 2 A

2 3 E, F, G

3 1 A, G, H

4 1 A

4 2 E, I, G

4 3 B

5 1 B

資料整理結束後,設定閥值(threshold)以過濾發生頻率過低之 element,並再次轉換 資料使各 element 對映至一集合(表 4)。再經過轉換,如表 5 所示。

表 4 element mapping Large Itemsets Mapped To

(A) 1

(E) 2

(G) 3

(E G) 4

(B) 5

表 5 Transformation in Sequential Pattern

Sequence id Original Sequence Transformed sequence After Mapping 1 <(A) (B)> <{(A)} {(B)}> <{1} {5}>

2 <(C D) (A) (E F G)> <{(A)} {(E) (G) (E G)}> <{1} {2, 3, 4}>

3 <(A G H)> <{(A) (G)})> <{1, 3}>

4 <(A) (E G) (B)> <{(A)} {(E) (G) (E G)} {(B)}> <{1} {2, 3, 4} {5}>

5 <(B)> <{(B)}> <{5}>

再將此轉換後的 sequence,置入 candidate selection 的過程,假設 threshold 為2,即 suport 值需大於二 。

圖 8 candidate selection

最後的得出 sequence 為<1 2>、<1 3>、<1 4>、<1 5>,對映回原本的表示法則是<(A) (E)>、

<(A) (G)>、<(A) (E G)>、<(A) (B)>。其中因為(E G)包含(E)且包含(G),則<(A) (E G)>即可 表示出<(A) (E)>、<(A) (G)>,故可削去。最後得<(A) (E G)>、<(A) (B)>,後者可解釋為 當使用函式呼叫 A 後常伴隨函式呼叫 B。

Sequence Support

<1> 4

<2> 2

<3> 2

<4> 2

<5> 3 Large 1-sequence

Sequence Support Large 2-sequence

Sequence Support

<1 2 3> 0

<1 2 4> 0

<1 2 5> 1 Large 3-sequence

相關文件