高 杰, 趙逢禹, 劉 亞
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院, 上海 200093)
軟件測(cè)試是指使用人工或自動(dòng)的手段來(lái)運(yùn)行或測(cè)定某個(gè)軟件系統(tǒng)的過(guò)程,其目的在于檢驗(yàn)它是否滿足規(guī)定的需求或弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別[1],科學(xué)應(yīng)用測(cè)試方法可以盡可能地避免軟件在運(yùn)行過(guò)程中出現(xiàn)各種故障問(wèn)題[2]。軟件測(cè)試的核心任務(wù)之一就是構(gòu)建測(cè)試用例集。但軟件規(guī)模的擴(kuò)大會(huì)導(dǎo)致測(cè)試用例集會(huì)變得復(fù)雜龐大,若對(duì)其分類和約簡(jiǎn),會(huì)節(jié)省測(cè)試的時(shí)間和資源消耗。因此,測(cè)試用例集的約簡(jiǎn)旨在最大限度地減少執(zhí)行的測(cè)試用例的數(shù)量。
測(cè)試用例約簡(jiǎn)的研究可以分為兩類,一類是基于模型的測(cè)試用例約簡(jiǎn)[3],如:通過(guò)構(gòu)建多優(yōu)化目標(biāo)模型,提出了不同的基于多優(yōu)化目標(biāo)的測(cè)試用例集約簡(jiǎn)算法[4]。建模過(guò)程復(fù)雜,且該嚴(yán)重依賴于模型設(shè)計(jì)的好壞;另一類是貪心算法、啟發(fā)式算法等基于人工智能技術(shù)的測(cè)試用例約簡(jiǎn)。由于這些算法過(guò)早收斂、優(yōu)化效率低的局限性,不斷有學(xué)者對(duì)其進(jìn)行改進(jìn),如:針對(duì)傳統(tǒng)貪婪算法存在過(guò)擬合的問(wèn)題,提出了一種基于貝葉斯網(wǎng)絡(luò)模型的黑匣子測(cè)試選擇方法[5],該方法可以確保僅將黑盒測(cè)試之間的強(qiáng)關(guān)系用于測(cè)試選擇,達(dá)到減少測(cè)試用例冗余的目的,而且該方法對(duì)于過(guò)度擬合更為健壯。但這種算法的效果仍取決于初始的測(cè)試用例集;應(yīng)用二分K-means聚類算法對(duì)回歸測(cè)試的測(cè)試用例集約簡(jiǎn),以白盒測(cè)試的路徑覆蓋為準(zhǔn)則,對(duì)每個(gè)測(cè)試用例進(jìn)行量化,使每個(gè)用例變成一個(gè)點(diǎn)[6]。以黑盒測(cè)試的功能需求數(shù)作為聚類數(shù),在聚類結(jié)果的每一簇中,按照離中心點(diǎn)的距離排序,依次從每一簇中選擇測(cè)試用例,直至滿足所有測(cè)試需求,得到約簡(jiǎn)的測(cè)試用例集。
本文認(rèn)為不論是采用模型的方法還是采用貪心、啟發(fā)式算法等方法,基于路徑覆蓋的測(cè)試用例約簡(jiǎn)是基本的方法,為了獲取測(cè)試用例的執(zhí)行路徑,必須計(jì)算關(guān)鍵變量的狀態(tài)。此外,約簡(jiǎn)后的測(cè)試用例集能否與原測(cè)試用例集具有相同的錯(cuò)誤檢測(cè)率對(duì)測(cè)試用例約簡(jiǎn)至關(guān)重要[7]。本文提出一種基于謂詞和關(guān)鍵狀態(tài)變量分析的測(cè)試用例約簡(jiǎn)方法,旨在減少測(cè)試用例的冗余,提高測(cè)試效率,降低測(cè)試成本,并與原測(cè)試用例集具有相同的錯(cuò)誤檢測(cè)率。
本文將影響謂詞表達(dá)式中判斷條件的變量稱為關(guān)鍵狀態(tài)變量。在程序運(yùn)行過(guò)程中,程序傳遞的參數(shù)的值會(huì)影響謂詞表達(dá)式中的判斷條件,而謂詞表達(dá)式中的判斷條件的結(jié)果會(huì)影響程序運(yùn)行的路徑。關(guān)鍵狀態(tài)變量包括以下3種參數(shù):
(1) 程序運(yùn)行過(guò)程中傳遞給方法的參數(shù);
(2)程序中影響謂詞表達(dá)式中的判斷條件的輸入或讀取的成員變量;
(3) (1)、(2)中經(jīng)過(guò)一系運(yùn)算之后所得到的新參數(shù)。
通過(guò)代碼來(lái)說(shuō)明本文所定義的關(guān)鍵狀態(tài)變量。
代碼1關(guān)鍵狀態(tài)變量定義范例。
1.int compute(int x)
2.{
3. intd= 7;
4. if(d> 3)
5.{
6.x= 2 *x;
7. }else
8.{
9.x=x*x;
10.}
11. inta,b,c;
12.b=x/ 2;
13.a=b;
14.c=a* 3;
15. if(a!= 0)
16.{
17. return 1;
18. }
19. return 0;
20.}
在代碼1范例中,有x,a,b,c,d這5個(gè)變量,其中x是傳入的參數(shù),a,d是謂詞判斷中的參數(shù),而a的值是由b賦予的。因此,本文認(rèn)為x,a,b,d是關(guān)鍵狀態(tài)變量。
本文利用抽象語(yǔ)法樹(shù)(Abstract Syntax Tree, AST) 來(lái)獲取關(guān)鍵狀態(tài)變量。抽象語(yǔ)法樹(shù)是程序源代碼的抽象語(yǔ)法結(jié)構(gòu)的樹(shù)狀表現(xiàn)形式。
不同的計(jì)算機(jī)高級(jí)語(yǔ)言都提供了抽象語(yǔ)法樹(shù)的處理包。本文所做的研究以C代碼為實(shí)驗(yàn)對(duì)象,C語(yǔ)言中的gcc編譯器可以構(gòu)造抽象語(yǔ)法樹(shù)。
通過(guò)在程序源代碼的抽象語(yǔ)法樹(shù)中搜索不同的節(jié)點(diǎn)類型得到關(guān)鍵狀態(tài)變量。其具體步驟是:首先在抽象語(yǔ)法樹(shù)中找到這些節(jié)點(diǎn)類型,針對(duì)不同的節(jié)點(diǎn)類型做不同的處理,最終將滿足本文定義的所有關(guān)鍵狀態(tài)變量添加到關(guān)鍵狀態(tài)變量集合中。
測(cè)試用例集約簡(jiǎn)的目的是去除測(cè)試用例中冗余的、無(wú)法發(fā)現(xiàn)程序缺陷的測(cè)試用例,從而減少測(cè)試成本,提高測(cè)試效率。
本文所提出的測(cè)試用例約簡(jiǎn)方案主要有6步:
(1) 測(cè)試用例聚類。本文所提出的測(cè)試用例約簡(jiǎn)方法與代碼執(zhí)行的路徑和關(guān)鍵狀態(tài)變量密切相關(guān)。因此,要將測(cè)試用例按其測(cè)試的功能以及輸入?yún)?shù)的參數(shù)列表聚類,聚類成若干個(gè)不同的測(cè)試用例集。
(2)查找每類測(cè)試用例集對(duì)應(yīng)的源代碼。針對(duì)聚類后的每類測(cè)試用例集,根據(jù)測(cè)試的功能與輸入?yún)?shù)的型構(gòu)確定被測(cè)程序的程序源代碼。
(3)代碼預(yù)處理。程序源代碼中的每個(gè)文件可能會(huì)有多個(gè)方法,每個(gè)方法中的局部變量可能會(huì)出現(xiàn)多次賦值和使用的情況。
例如代碼2所示的代碼中,當(dāng)程序執(zhí)行執(zhí)行到第11行的條件判斷語(yǔ)句時(shí),x的值并不能確定,可能會(huì)取第5行的x,也可能會(huì)取第8行的x,即同一個(gè)變量在不同的情況下可能會(huì)被賦予不同的值。為了解決這種情況,本文對(duì)代碼進(jìn)行了預(yù)處理,保證每個(gè)變量對(duì)應(yīng)一個(gè)值。
代碼2代碼預(yù)處理示例
1.int compute(intx)
2. {
3. if(x> 3)
4. {
5.x= 2 *x;
6. }else
7. {
8.x=x*x;
9. }
10. …
11. if(x> 10)
12. {
13. inty=x;
14. }
15. }
對(duì)代碼中的變量進(jìn)行預(yù)處理就是針對(duì)同一變量可能會(huì)被賦予不同值的變量換成不同的變量名。代碼2中示例代碼經(jīng)預(yù)處理后的結(jié)果如代碼3所示。
代碼3代碼預(yù)處理結(jié)果示例
1.int compute(intx)
2. {
3. if(x> 3)
4. {
5.x1= 2 *x;
6. }else
7. {
8.x2=x*x;
9. }
10. …
11. if (x1> 10)
12. {
13. inty=x1;
14. }else if
15. {
16. inty=x2;
17. }
18.}
(4)基于抽象語(yǔ)法樹(shù)的信息提取。利用高級(jí)語(yǔ)言中所提供的技術(shù)構(gòu)建程序源代碼的抽象語(yǔ)法樹(shù)。獲取抽象語(yǔ)法樹(shù)中的每個(gè)節(jié)點(diǎn)信息,從而找到代碼中的關(guān)鍵狀態(tài)變量、關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式以及謂詞表達(dá)式中的判斷條件,并將它們分別添加到相應(yīng)的集合中。
(5)構(gòu)建測(cè)試用例關(guān)聯(lián)矩陣。測(cè)試用例集中的每個(gè)測(cè)試用例對(duì)應(yīng)測(cè)試用例關(guān)聯(lián)矩陣的一行信息,多個(gè)測(cè)試用例構(gòu)成了測(cè)試用例關(guān)聯(lián)矩陣。測(cè)試用例關(guān)聯(lián)矩陣用M表示,M矩陣中每一行對(duì)應(yīng)一個(gè)測(cè)試用例的輸入?yún)?shù)、關(guān)鍵狀態(tài)變量、關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式和謂詞表達(dá)式中的判斷條件,形式化表示為式(1):
Mi=(ti,
(1)
其中,ti表示測(cè)試用例中第i個(gè)測(cè)試用例的輸入?yún)?shù),V表示關(guān)鍵狀態(tài)變量的集合,E表示關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式集合,C表示謂詞表達(dá)式中的條件判斷的集合。
(6)測(cè)試用例約簡(jiǎn)。本文采用的測(cè)試用例約簡(jiǎn)準(zhǔn)則是:任意二個(gè)測(cè)試用例ti,tk,如果對(duì)應(yīng)的謂詞表達(dá)式中的條件判斷的邏輯值完全相同,即
該約簡(jiǎn)方案的整體流程框架,如圖1所示。
圖1 約簡(jiǎn)方法流程框架
在圖1所示的流程圖中,主要有二個(gè)重要的算法:
(1)在抽象語(yǔ)法樹(shù)中獲取關(guān)鍵狀態(tài)變量;
(2)在測(cè)試用例關(guān)聯(lián)矩陣中查找并移除等效的測(cè)試用例,實(shí)現(xiàn)測(cè)試用例約簡(jiǎn)。
任何一個(gè)C程序文件都可以轉(zhuǎn)換為抽象語(yǔ)法樹(shù)的樹(shù)狀結(jié)構(gòu),任意一個(gè)包括一個(gè)變量和一個(gè)方法的C程序文件的樹(shù)形結(jié)構(gòu),如圖2所示。利用抽象語(yǔ)法樹(shù)中提供的方法可以獲取樹(shù)中的各個(gè)節(jié)點(diǎn)。
為獲取關(guān)鍵狀態(tài)變量、關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式以及謂詞表達(dá)式中的判斷條件,需要從抽象語(yǔ)法樹(shù)中找到與其相關(guān)的3類節(jié)點(diǎn):params節(jié)點(diǎn)、IfStatement節(jié)點(diǎn)以及ExpressionStatement節(jié)點(diǎn)。針對(duì)這3類不同的節(jié)點(diǎn)分別找出關(guān)鍵狀態(tài)變量、關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式和謂詞表達(dá)式中的判斷條件集合,并分別將其添加到相應(yīng)的集合。算法1給出了獲取關(guān)鍵狀態(tài)變量集合、關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式集合以及謂詞表達(dá)式中的判斷條件集合的算法。
圖2 抽象語(yǔ)法樹(shù)
算法1基于抽象語(yǔ)法樹(shù)的信息提取算法
輸入預(yù)處理后的程序源代碼的抽象語(yǔ)法樹(shù)。
輸出關(guān)鍵狀態(tài)變量集合keyVariable,關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式集合comExpression,謂詞表達(dá)式中的判斷條件集合conExpression。
(1)算法以root為根節(jié)點(diǎn);
(2)初始化關(guān)鍵狀態(tài)變量集合keyVariable = null,關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式集合comExpression = null,謂詞表達(dá)式中的判斷條件集合conExpression=null,根root入隊(duì)enqueue(root);
(3) 循環(huán)queue中的元素。取出隊(duì)首元素,如果為空,轉(zhuǎn)(8),算法結(jié)束,否則轉(zhuǎn)(4);
(4)如果該節(jié)點(diǎn)的節(jié)點(diǎn)類型是IfStatement,找到該節(jié)點(diǎn)下的表達(dá)式,并將該節(jié)點(diǎn)添加到謂詞表達(dá)式中的判斷條件集合conExpression中,并將該節(jié)點(diǎn)下的變量放入一個(gè)set集合中;
(5)如果該節(jié)點(diǎn)的節(jié)點(diǎn)類型是VariableDeclaration或者params或者Identifier,并且該變量在(4)的set中出現(xiàn)過(guò),將該節(jié)點(diǎn)添加到關(guān)鍵狀態(tài)變量集合keyVariable中;
(6)如果該節(jié)點(diǎn)的節(jié)點(diǎn)類型是BinaryExpression或者CallExpression或者UnaryExpression。繼續(xù)向下判斷,若該節(jié)點(diǎn)包括符號(hào)“<”,“>”,“<=”,“>=”,“!=”,“==”,找到該節(jié)點(diǎn)下的表達(dá)式,并將該節(jié)點(diǎn)添加到謂詞表達(dá)式中的判斷條件集合conExpression中;若該節(jié)點(diǎn)包括符號(hào)“=”,找到該節(jié)點(diǎn)下的表達(dá)式,并將該節(jié)點(diǎn)添加到關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式集合comExpression中;
(7)如果該節(jié)點(diǎn)的節(jié)點(diǎn)類型不屬于以上節(jié)點(diǎn),則把該節(jié)點(diǎn)的子節(jié)點(diǎn)入隊(duì);
(8) 算法結(jié)束。
通過(guò)算法1可以獲取測(cè)試用例關(guān)聯(lián)矩陣M中的關(guān)鍵狀態(tài)變量集合、關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式集合以及謂詞表達(dá)式中的判斷條件集合。
3.2.1 構(gòu)建測(cè)試用例關(guān)聯(lián)矩陣
測(cè)試用例關(guān)聯(lián)矩陣的列由關(guān)鍵狀態(tài)變量集合、關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式集合以及謂詞表達(dá)式中的判斷條件集合中的每個(gè)元素組成,每個(gè)測(cè)試用例的輸入值、關(guān)鍵狀態(tài)變量集合、關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式集合以及謂詞表達(dá)式中的判斷條件集合構(gòu)成測(cè)試用例關(guān)聯(lián)矩陣的每一行,n個(gè)測(cè)試用例構(gòu)成了測(cè)試用例關(guān)聯(lián)矩陣。圖3給出了一個(gè)測(cè)試用例關(guān)聯(lián)矩陣示例。
圖3 測(cè)試用例關(guān)聯(lián)矩陣示例
構(gòu)造測(cè)試用例關(guān)聯(lián)矩陣的輸入可以概括為:測(cè)試用例集T={t1,t2,t3,…,tm},由算法1中得到的關(guān)鍵狀態(tài)變量集合、關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式集合以及謂詞表達(dá)式中的判斷條件集合,其數(shù)學(xué)表達(dá)式為式(1)。
在圖3的示例中,t1,t2,t3,t4表示4個(gè)測(cè)試用例,每個(gè)測(cè)試用例有3個(gè)輸入?yún)?shù):a、b、c;a1=a*2和a2=c*3表示代碼中的計(jì)算表達(dá)式;a-b>4,a1>5,a2>2則表示謂詞表達(dá)式中的判斷條件。
3.2.2 測(cè)試用例約簡(jiǎn)算法
根據(jù)本文所提出的測(cè)試用例約簡(jiǎn)準(zhǔn)則對(duì)測(cè)試用例關(guān)聯(lián)矩陣進(jìn)行約簡(jiǎn),算法2給出了測(cè)試用例關(guān)聯(lián)矩陣的約簡(jiǎn)描述。
算法2測(cè)試用例關(guān)聯(lián)矩陣中測(cè)試用例的約簡(jiǎn)
輸入測(cè)試用例關(guān)聯(lián)矩陣M
輸出約簡(jiǎn)后的測(cè)試用例關(guān)聯(lián)矩陣M'
(1)for eachito row // row是測(cè)試用例關(guān)聯(lián)矩陣的行數(shù)
(2) for eachj=i+ 1 to row
(3) 如果第i行和第j行的測(cè)試用例對(duì)應(yīng)的謂詞表達(dá)式中的判斷條件集合中的每一列的結(jié)果值都相同,表示第i行和第j行的測(cè)試用例具有相同或相似的功能,保留第i行的測(cè)試用例
(4) end for
(5) end for
本文選擇了西門(mén)子測(cè)試用例集中4個(gè)程序作為實(shí)驗(yàn)對(duì)象來(lái)驗(yàn)證本文所提出的測(cè)試用例約簡(jiǎn)的方法。為了評(píng)估本文所提出的方法的有效性,將本文算法與傳統(tǒng)HGS算法和貪心算法(Greedy, G算法)從約簡(jiǎn)率作對(duì)比和分析。約簡(jiǎn)率的計(jì)算公式(2)。
(2)
其中:|OriginalTestSuite|表示原測(cè)試用例集中測(cè)試用例數(shù)量,|T*|表示約簡(jiǎn)后測(cè)試用例集中測(cè)試用例的數(shù)量,約簡(jiǎn)率越大則約簡(jiǎn)程度越高。
西門(mén)子測(cè)試用例集中4個(gè)程序的程序集信息如見(jiàn)表1。schedule2是優(yōu)先級(jí)調(diào)度器;tcas是防止航空器空中相撞系統(tǒng)[8];print_tokens和print_tokens2主要用于詞法分析。
表1 西門(mén)子程序集信息
實(shí)驗(yàn)的具體方案:
(1) 按不同的功能及輸入?yún)?shù)的參數(shù)列表分別將四個(gè)開(kāi)源程序中的測(cè)試用例集進(jìn)行聚類,確定每一類測(cè)試用例集所對(duì)應(yīng)的程序源代碼;
(2)將對(duì)應(yīng)的程序源代碼預(yù)處理,將預(yù)處理后的源代碼轉(zhuǎn)換成抽象語(yǔ)法樹(shù),再使用本文所提出的算法1獲取關(guān)鍵狀態(tài)變量集合、關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式集合以及謂詞表達(dá)式中的判斷條件集合;
(3)構(gòu)建測(cè)試用例與關(guān)鍵狀態(tài)變量集合、關(guān)鍵狀態(tài)變量的計(jì)算表達(dá)式集合以及謂詞表達(dá)式中的判斷條件集合的測(cè)試用例關(guān)聯(lián)矩陣,再計(jì)算測(cè)試用例關(guān)聯(lián)矩陣中每一項(xiàng)所對(duì)應(yīng)的值,最后根據(jù)測(cè)試用例約簡(jiǎn)準(zhǔn)則對(duì)其進(jìn)行約簡(jiǎn)。
實(shí)驗(yàn)結(jié)果如圖4所示,可以看出本文所提出的算法可以有效的減少原測(cè)試用例集數(shù)量。
圖4 3種算法的測(cè)試用例約簡(jiǎn)率
3種算法約簡(jiǎn)后的測(cè)試用例數(shù)量見(jiàn)表2。
表2 約簡(jiǎn)后測(cè)試用例的數(shù)量
通過(guò)對(duì)西門(mén)子測(cè)試用例集中4個(gè)開(kāi)源程序自帶的測(cè)試用例集進(jìn)行實(shí)驗(yàn),本文所提算法對(duì)每個(gè)程序中的原測(cè)試用例數(shù)量都有不同程度程度的減少,測(cè)試用例數(shù)量的約簡(jiǎn)率還與原測(cè)試用例集中冗余測(cè)試用例數(shù)量的多少相關(guān)。
本文所提出的方法在保證測(cè)試用例集完整性的基礎(chǔ)上減少了測(cè)試用例的數(shù)量。實(shí)驗(yàn)中針對(duì)約簡(jiǎn)掉的每個(gè)測(cè)試用例都經(jīng)過(guò)了人工檢測(cè),通過(guò)對(duì)比測(cè)試用例關(guān)聯(lián)矩陣中的測(cè)試用例,判斷測(cè)試用例關(guān)聯(lián)矩陣中存在與被約簡(jiǎn)的測(cè)試用例的每一列對(duì)應(yīng)的值都是相同的,運(yùn)行被約簡(jiǎn)的測(cè)試用例,進(jìn)一步證實(shí)了這些測(cè)試用例集確實(shí)不能檢測(cè)到程序中存在的缺陷。但本文算法涉及到的步驟相對(duì)較多,會(huì)增加計(jì)算方面的開(kāi)銷。
測(cè)試用例的約簡(jiǎn)是軟件測(cè)試中一項(xiàng)非常重要的工作,約簡(jiǎn)測(cè)試用例可以極大地減少測(cè)試成本,因此對(duì)測(cè)試用例約簡(jiǎn)的研究具有十分重要的意義。
本文提出一種基于謂詞分析和關(guān)鍵狀態(tài)變量的測(cè)試用例約簡(jiǎn)方法,主要考慮了變量對(duì)測(cè)試路徑的影響,提出一種基于謂詞分析和關(guān)鍵狀態(tài)變量的測(cè)試用例約簡(jiǎn)方法,主要考慮了變量對(duì)測(cè)試路徑的影響。該方法通過(guò)捕獲源代碼中與關(guān)鍵狀態(tài)變量相關(guān)語(yǔ)句和謂詞表達(dá)式中的判斷條件之間的關(guān)系來(lái)構(gòu)造測(cè)試用例和關(guān)鍵狀態(tài)變量、關(guān)鍵狀態(tài)變量計(jì)算表達(dá)
式以及謂詞表達(dá)式中判斷條件之間的測(cè)試用例關(guān)聯(lián)矩陣,并提出了測(cè)試用例約簡(jiǎn)的準(zhǔn)則,根據(jù)該準(zhǔn)則對(duì)測(cè)試用例集進(jìn)行約簡(jiǎn)。實(shí)驗(yàn)結(jié)果表明,本文所提出的約簡(jiǎn)策略可以對(duì)原測(cè)試用例集的數(shù)量進(jìn)行約簡(jiǎn),而且并沒(méi)有降低原測(cè)試用例集的錯(cuò)誤檢測(cè)率,但增加了計(jì)算開(kāi)銷。
基于代碼分析的測(cè)試用例約簡(jiǎn)所涉及測(cè)試路徑以及本文所提的關(guān)鍵狀態(tài)變量、謂詞表達(dá)式中的判斷條件等因素,是一個(gè)十分復(fù)雜的問(wèn)題,如果程序中包含程序間調(diào)用、數(shù)據(jù)庫(kù)交互等更加復(fù)雜的場(chǎng)景,研究方案仍需要進(jìn)一步完善。另外,文本所做的驗(yàn)證實(shí)驗(yàn)只是在西門(mén)子測(cè)試用例套件中選取的四個(gè)程序所自帶的測(cè)試數(shù)據(jù)集上完成的,這4個(gè)程序的源代碼規(guī)模較小,本方法的有效性還需要進(jìn)行大規(guī)模的實(shí)驗(yàn)加以驗(yàn)證。