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