本發(fā)明屬于軟件測(cè)試技術(shù)領(lǐng)域,且特別是有關(guān)于一種回歸測(cè)試用例自動(dòng)分類方法,該方法用于降低回歸測(cè)試能耗,提高回歸測(cè)試自動(dòng)化效率。
背景技術(shù):
軟件測(cè)試是一項(xiàng)保障軟件質(zhì)量與可靠性的重要活動(dòng)。由于適應(yīng)性維護(hù)、完善性維護(hù)與改正性維護(hù)等原因,軟件處于動(dòng)態(tài)演化而非靜態(tài)存在。軟件一旦發(fā)生變化就需要回歸測(cè)試(regressiontesting)被測(cè)軟件,以確保新的變化沒有對(duì)軟件產(chǎn)生副作用?;貧w測(cè)試已被實(shí)踐證實(shí)是軟件開發(fā)與維護(hù)過(guò)程中代價(jià)最昂貴的活動(dòng)之一,占了軟件維護(hù)階段總費(fèi)用的50%,總測(cè)試預(yù)算的80%。軟件的復(fù)雜性以及回歸測(cè)試高昂的測(cè)試代價(jià)對(duì)軟件測(cè)試與維護(hù)人員提出了新的挑戰(zhàn),有效地降低回歸測(cè)試能耗,提高回歸測(cè)試的效率已成為軟件工程研究領(lǐng)域和工業(yè)界亟待解決的問題。
與一般的軟件測(cè)試技術(shù)相同,回歸測(cè)試主要由三部分組成:構(gòu)造測(cè)試用例、執(zhí)行測(cè)試以及評(píng)判測(cè)試結(jié)果。其中,評(píng)判結(jié)果是通過(guò)比較運(yùn)行測(cè)試用例產(chǎn)生的輸出結(jié)果與預(yù)期的結(jié)果,作為測(cè)試通過(guò)與否的判斷,據(jù)此判定被測(cè)軟件的執(zhí)行行為是否符合規(guī)范。評(píng)估結(jié)果的過(guò)程正是借助測(cè)試預(yù)言(testoracle)加以實(shí)現(xiàn)的,即對(duì)于一個(gè)給定的測(cè)試用例作為輸入,運(yùn)行被測(cè)軟件,通過(guò)比較被測(cè)軟件的輸出與測(cè)試預(yù)言的一致性判定被測(cè)軟件執(zhí)行行為的正確性。
回歸測(cè)試背景下,無(wú)論是在演化的軟件版本上運(yùn)行已有的測(cè)試用例,還是運(yùn)行新增的測(cè)試用例,都需要基于測(cè)試預(yù)言檢驗(yàn)被測(cè)軟件的運(yùn)行是否正確。然而,測(cè)試預(yù)言的構(gòu)建是非常耗時(shí)耗力的工作。例如:驗(yàn)證醫(yī)學(xué)圖像分割軟件就需要利用醫(yī)生的專業(yè)知識(shí)構(gòu)建測(cè)試預(yù)言,據(jù)此判定分割的圖像是否正確。軟件演化使得歷史版本中的測(cè)試用例所對(duì)應(yīng)的測(cè)試預(yù)言在當(dāng)前版本上失效,這就需要基于演化的軟件版本為原有的測(cè)試用例重新構(gòu)造測(cè)試預(yù)言。同樣地,為滿足測(cè)試充分性要求增加新的測(cè)試用例時(shí)也需要為其構(gòu)造測(cè)試預(yù)言。在當(dāng)前的工業(yè)界,仍是借助手工方式產(chǎn)生測(cè)試預(yù)言。這不僅消耗更多的測(cè)試資源,而且很容易產(chǎn)生錯(cuò)誤。伴隨軟件的多樣性,以及規(guī)模的不斷增加,測(cè)試預(yù)言的自動(dòng)化技術(shù)遠(yuǎn)不能滿足實(shí)際需要。
傳統(tǒng)的回歸測(cè)試用例分類方法需要借助手工方式構(gòu)造測(cè)試預(yù)言,并借此判定測(cè)試用例的類別。這意味著回歸測(cè)試需要消耗更多的測(cè)試資源,嚴(yán)重影響軟件版本的發(fā)布進(jìn)度。在回歸測(cè)試背景下,如果不構(gòu)造測(cè)試預(yù)言而又能自動(dòng)判定測(cè)試用例的類別將大大地降低回歸測(cè)試能耗,提高回歸測(cè)試的效率。軟件演化為回歸測(cè)試提供了豐富的運(yùn)行時(shí)信息,主要包括測(cè)試用例的執(zhí)行剖面信息和執(zhí)行結(jié)果。收集這些信息并訓(xùn)練分類模型,從而自動(dòng)判定新增測(cè)試用例與原始測(cè)試用例在演化之后的軟件版本上的類別將大大降低回歸測(cè)試能耗,提高回歸測(cè)試效率。
隨著敏捷開發(fā)方法的不斷普及,軟件的回歸測(cè)試變得更加頻繁,回歸測(cè)試需要消耗更多的測(cè)試資源。這使得傳統(tǒng)的回歸測(cè)試用例分類方法已經(jīng)越來(lái)越不能滿足實(shí)際軟件回歸測(cè)試的需要。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明目的在于提供一種回歸測(cè)試用例自動(dòng)分類方法,解決目前存在的回歸測(cè)試通過(guò)手工構(gòu)造的測(cè)試預(yù)言對(duì)回歸測(cè)試用例分類低效率的問題,實(shí)現(xiàn)回歸測(cè)試用例的自動(dòng)化分類,以便更高效地開展軟件回歸測(cè)試,進(jìn)而提高軟件產(chǎn)品的質(zhì)量。
本方面的技術(shù)方案為:回歸測(cè)試用例自動(dòng)分類方法,基于控制流分析技術(shù)從原始的測(cè)試用例集合中選擇受待測(cè)軟件變化部分影響的測(cè)試用例子集;在歷史的軟件版本上運(yùn)行,通過(guò)動(dòng)態(tài)插樁技術(shù)自動(dòng)地獲得每一個(gè)測(cè)試用例的執(zhí)行剖面(profile),以構(gòu)建分支覆蓋向量,如果分支被覆蓋則在向量中的值為1,反之則為0;基于中的測(cè)試用例在軟件歷史版本上的運(yùn)行結(jié)果標(biāo)記測(cè)試用例的類別,如果測(cè)試用例能發(fā)現(xiàn)錯(cuò)誤,稱其為錯(cuò)誤的測(cè)試用例,置標(biāo)記n,反之稱為正確的測(cè)試用例,置標(biāo)記y;在當(dāng)前的軟件版本上運(yùn)行測(cè)試用例,并構(gòu)建該用例對(duì)應(yīng)的分支覆蓋向量,通過(guò)歐式距離函數(shù)計(jì)算對(duì)應(yīng)的分支覆蓋向量與中的測(cè)試用例對(duì)應(yīng)的分支覆蓋向量之間的距離,將該距離作為與中的測(cè)試用例之間的距離;基于權(quán)重的k近鄰算法確定測(cè)試用例所屬的類別。
為實(shí)現(xiàn)上述目標(biāo),本發(fā)明提出了一種回歸測(cè)試用例自動(dòng)分類方法,本方法具體步驟如下。
1)選擇受軟件變化影響的測(cè)試用例?;诳刂屏鞣治黾夹g(shù)為歷史軟件版本和當(dāng)前軟件版本分別構(gòu)建控制流圖和,以語(yǔ)句或者語(yǔ)句塊作為控制流圖中的節(jié)點(diǎn),以循環(huán)和判定作為連接節(jié)點(diǎn)的邊。確定控制流圖受軟件變化影響的邊,并為控制流圖中的邊增加編號(hào)。采用度優(yōu)先搜索的方式同步遍歷控制流圖和,以確定控制流圖中變化的節(jié)點(diǎn),與變化節(jié)點(diǎn)相鄰的邊則是受變化影響的分支,找出所有受變化影響的分支,并將其放在集合中。為控制流圖和中的邊增加編號(hào),目的是為了方便計(jì)算當(dāng)前軟件版本中的測(cè)試用例與歷史版本中的測(cè)試用例之間的距離。在控制流圖和中采用深度優(yōu)先搜索為兩個(gè)圖中的邊分別增加標(biāo)號(hào),相同的邊的標(biāo)號(hào)一致,標(biāo)記為,不同的邊分別標(biāo)記為和。選擇受軟件變化影響的測(cè)試用例子集,在歷史版本上運(yùn)行中的測(cè)試用例,并從中選擇遍歷集合的測(cè)試用例作為受待測(cè)軟件變化部分影響的測(cè)試用例子集。
2)待預(yù)測(cè)類別的測(cè)試用例與步驟1)產(chǎn)生的測(cè)試用例子集中的測(cè)試用例之間距離的計(jì)算。采用自動(dòng)化方式在歷史軟件版本上批量執(zhí)行,并聯(lián)合動(dòng)態(tài)插樁技術(shù)獲得運(yùn)行中的測(cè)試用例產(chǎn)生的剖面信息文件。分析獲得的剖面信息文件,并提取文件中的分支執(zhí)行頻率列為每一個(gè)測(cè)試用例構(gòu)造分支覆蓋向量,記為。在當(dāng)前的軟件版本上運(yùn)行測(cè)試用例,并為其構(gòu)造分支覆蓋向量,記為。如果一個(gè)分支執(zhí)行頻率大于0,則在分支覆蓋向量中該分支對(duì)應(yīng)的值是1,否則是0。計(jì)算測(cè)試用例與中的每一個(gè)測(cè)試用例之間的歐式距離,計(jì)算公式如下:
式中表示測(cè)試用例x與y之間的歐式距離,表示同時(shí)存在于和中的分支數(shù),表示僅存在于中的分支數(shù),表示僅存在于中的分支數(shù),和分別表示測(cè)試用例x和y對(duì)應(yīng)的分支覆蓋向量中的第分支的取值?;?imgfile="731055dest_path_image002.gif"wi="16"he="13"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/>中的測(cè)試用例在歷史版本上的運(yùn)行結(jié)果標(biāo)記測(cè)試用例的類別,如果測(cè)試用例能發(fā)現(xiàn)錯(cuò)誤,置標(biāo)記n,反之置標(biāo)記y。
3)回歸測(cè)試用例的自動(dòng)化分類。根據(jù)步驟2)產(chǎn)生的歐式距離值對(duì)中的測(cè)試用例進(jìn)行升序排序,再基于排序的結(jié)果從選取個(gè)最近距離的測(cè)試用例,并為選定的每一個(gè)測(cè)試用例分配權(quán)重,權(quán)重值為距離的倒數(shù),根據(jù)步驟2)產(chǎn)生的測(cè)試用例標(biāo)記信息分別計(jì)算出個(gè)測(cè)試用例標(biāo)記n和y的權(quán)重值之和,如果標(biāo)記n的權(quán)重和大于標(biāo)記y的權(quán)重和,那么待分類的測(cè)試用例屬于錯(cuò)誤的測(cè)試用例,否則屬于正確的測(cè)試用例。
進(jìn)一步,其中上述步驟1)的具體步驟如下:
步驟1)-1:起始狀態(tài);
步驟1)-2:按行讀取歷史軟件版本,進(jìn)行詞法分析,在此基礎(chǔ)上進(jìn)行語(yǔ)法分析,進(jìn)而構(gòu)造抽象語(yǔ)法樹,再將抽象語(yǔ)法樹生成控制流圖,圖中的節(jié)點(diǎn)表示基本代碼塊,節(jié)點(diǎn)間的有向邊代表控制路徑;
步驟1)-3:采用與步驟1)-2相同的方法,為當(dāng)前的軟件版本構(gòu)造控制流圖;
步驟1)-4:采用深度優(yōu)先搜索的策略同步遍歷控制流圖和,以確定控制流圖中變化的節(jié)點(diǎn),與變化的節(jié)點(diǎn)鄰接的邊作為受軟件變化影響的邊,并以此構(gòu)建受軟件變化影響的邊的集合,記為;
步驟1)-5:在控制流圖和中采用深度優(yōu)先搜索為兩個(gè)圖中的邊分別增加標(biāo)號(hào),相同的邊的標(biāo)號(hào)一致,標(biāo)記為,不同的邊分別標(biāo)記為和;
步驟1)-6:控制流圖中受軟件變化影響的邊集合構(gòu)建完畢,控制流圖和邊的標(biāo)號(hào)完畢;
步驟1)-7:讀取測(cè)試用例集合中的一個(gè)測(cè)試用例,并在歷史軟件版本上上運(yùn)行,如果該測(cè)試用例遍歷了一個(gè)屬于集合的元素,那么該測(cè)試用例即為受軟件變化影響的測(cè)試用例,將該用例保存到集合中;
步驟1)-8:重復(fù)執(zhí)行步驟1)-7,直到運(yùn)行完測(cè)試用例集合中的所有測(cè)試用例;
步驟1)-9:測(cè)試用例子集構(gòu)建完畢。
進(jìn)一步,其中上述步驟2)的具體步驟如下:
步驟2)-1:起始狀態(tài);
步驟2)-2:在歷史軟件版本中自動(dòng)注入動(dòng)態(tài)插樁代碼,并編譯;
步驟2)-3:從測(cè)試用例集合中讀取一個(gè)測(cè)試用例作為輸入,并自動(dòng)運(yùn)行,同時(shí)記錄測(cè)試用例的運(yùn)行結(jié)果;
步驟2)-4:重復(fù)執(zhí)行步驟2)-2、步驟2)-3,直到獲取了中的所有測(cè)試用例的剖面信息與運(yùn)行結(jié)果信息,并將其保存在磁盤中;
步驟2)-5:從磁盤中讀取保存的每一個(gè)剖面信息文件,分析獲得的剖面信息文件,并提取文件中的分支執(zhí)行頻率列為測(cè)試用例構(gòu)造分支覆蓋向量,記為,若頻率值大于0,則在分支覆蓋向量中該分支的取值為1,否則為0;
步驟2)-6:重復(fù)步驟2)-5,直到為中的所有測(cè)試用例構(gòu)造完分支覆蓋向量;
步驟2)-7:將中的所有測(cè)試用例對(duì)應(yīng)的分支覆蓋向量保存到文件中,該文件中的每一行包括測(cè)試用例的編號(hào)信息,以及測(cè)試用例對(duì)應(yīng)的分支覆蓋向量及測(cè)試用例的運(yùn)行結(jié)果;
步驟2)-8:在當(dāng)前軟件版本中自動(dòng)注入動(dòng)態(tài)插樁代碼,并編譯;
步驟2)-9:將待分類的測(cè)試用例作為輸入,自動(dòng)運(yùn)行,并獲得該用例的剖面信息,以此為基礎(chǔ)構(gòu)建分支覆蓋向量,記為;
步驟2)-10:使用步驟2)定義的公式計(jì)算測(cè)試用例與中的每一個(gè)測(cè)試用例之間的距離,并將距離信息保存在磁盤中;
步驟2)-11:根據(jù)步驟2)-7產(chǎn)生的測(cè)試用例集合中的每一個(gè)測(cè)試用例的運(yùn)行結(jié)果標(biāo)記測(cè)試用例的類別,如果測(cè)試用例的實(shí)際輸出結(jié)果與預(yù)先定義的結(jié)果不一致,那么該用例是一個(gè)錯(cuò)誤的測(cè)試用例,置標(biāo)記n,否則該用例是一個(gè)正確的測(cè)試用例,標(biāo)記為y;
步驟2)-12:待分類的測(cè)試用例與中的測(cè)試用例之間的距離計(jì)算完畢,測(cè)試用例集合中的測(cè)試用例類別標(biāo)記完畢。
進(jìn)一步;其中上述步驟3)的具體步驟如下:
步驟3)-1:起始狀態(tài);
步驟3)-2:讀取步驟2)-10產(chǎn)生的距離文件,根據(jù)距離值對(duì)測(cè)試用例集合中的測(cè)試用例進(jìn)行升序排序,從中選取具有最近距離的10個(gè)測(cè)試用例,并為這10個(gè)測(cè)試用例賦予權(quán)重,權(quán)重值為距離的倒數(shù);
步驟3)-3:根據(jù)步驟3)-2產(chǎn)生的10個(gè)測(cè)試用例的標(biāo)號(hào)分別計(jì)算n和y的權(quán)重和,如果標(biāo)號(hào)n的權(quán)重和大于y的權(quán)重和,那么待預(yù)測(cè)的測(cè)試用例的類別是n,否則為y;
步驟3)-4:回歸測(cè)試用例的分類完畢。
本發(fā)明基于運(yùn)行測(cè)試用例產(chǎn)生的剖面信息的相似性進(jìn)行回歸測(cè)試用例分類,大幅提高了軟件回歸測(cè)試的自動(dòng)化效率;本方法不僅適用于在演化之后的軟件版本上對(duì)原有測(cè)試用例進(jìn)行分類,同時(shí)也適用于針對(duì)演化之后的軟件版本新生成的測(cè)試用例的分類;本發(fā)明從測(cè)試用例剖面信息的收集、受軟件變化影響的回歸測(cè)試用例選擇,以及基于權(quán)重的k-近鄰方法對(duì)回歸測(cè)試用例進(jìn)行分類,均采用自動(dòng)化的方式進(jìn)行,整個(gè)過(guò)程不需要人工干預(yù),大大地提高了回歸測(cè)試的自動(dòng)化效率,從而更好地控制軟件產(chǎn)品的質(zhì)量。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例的一種回歸測(cè)試用例自動(dòng)分類方法的流程圖。
圖2為圖1中選擇受軟件變化影響的測(cè)試用例子集的流程圖。
圖3為圖1中計(jì)算待分類的測(cè)試用例與受軟件變化影響的測(cè)試用例子集距離的流程圖。
圖4為圖1中回歸測(cè)試用例分類的流程圖。
具體實(shí)施方式
為了更清晰的了解本發(fā)明的技術(shù)內(nèi)容,特舉具體實(shí)施例并配合所附圖式說(shuō)明如下。
圖1為本發(fā)明實(shí)施例的一種回歸測(cè)試用例分類方法的流程圖。
一種回歸測(cè)試用例分類方法,包括下列步驟。
s101選擇受軟件變化影響的測(cè)試用例子集的流程圖,基于控制流分析技術(shù)分別為歷史軟件版本和當(dāng)前軟件版本構(gòu)建控制流圖和,采用深度優(yōu)先搜索策略遍歷控制流圖和以確定圖中受軟件變化的邊集合,根據(jù)測(cè)試用例在歷史版本上的運(yùn)行信息確定測(cè)試用例集合中受軟件變化影響的測(cè)試用例子集。
s103計(jì)算待分類的測(cè)試用例與受軟件變化影響的測(cè)試用例子集中的測(cè)試用例之間的距離的流程圖。在歷史軟件版本上運(yùn)行測(cè)試用例子集中的測(cè)試用例,通過(guò)動(dòng)態(tài)插樁技術(shù)收集中的每一個(gè)測(cè)試用例產(chǎn)生的剖面信息,并且構(gòu)造分支覆蓋向量,同時(shí)基于運(yùn)行測(cè)試用例的結(jié)果標(biāo)記中的測(cè)試用例的類別,再在當(dāng)前軟件版本上運(yùn)行待分類的測(cè)試用例,并構(gòu)造分支覆蓋向量,最后基于步驟2)中定義的歐式距離函數(shù)計(jì)算測(cè)試用例與測(cè)試用例子集中的每一個(gè)測(cè)試用例之間的距離。
s105回歸測(cè)試用例自動(dòng)分類流程圖?;跍y(cè)試用例與測(cè)試用例子集中的每一個(gè)測(cè)試用例之間的距離對(duì)中的測(cè)試用例進(jìn)行升序排序,從中選擇具有最近距離的10個(gè)測(cè)試用例,并為這10個(gè)測(cè)試用例分配權(quán)重值,再基于10個(gè)測(cè)試用例的類別分別計(jì)算出類別n和y的權(quán)重和,最后根據(jù)n和y的權(quán)重和判定待預(yù)測(cè)的測(cè)試用例的類別。
圖2為選擇受軟件變化影響的測(cè)試用例子集的流程圖。讀取歷史軟件版本和當(dāng)前軟件版本軟件版本,進(jìn)行詞法與語(yǔ)法分析,進(jìn)而構(gòu)建控制流圖和。采用深度優(yōu)先搜索策略遍歷圖和,確定圖中受軟件變化影響的邊集合,并為圖和中的邊增加編號(hào)。在歷史軟件版本上運(yùn)行測(cè)試用例集合以確定受軟件變化影響的測(cè)試用例子集,具體步驟如下。
步驟1:起始狀態(tài);步驟2:按行讀取歷史軟件版本,進(jìn)行詞法分析,在此基礎(chǔ)上進(jìn)行語(yǔ)法分析,以構(gòu)造抽象語(yǔ)法樹,進(jìn)而將抽象語(yǔ)法樹轉(zhuǎn)換成控制流圖;步驟3:采用與步驟2相同的方法,為當(dāng)前的軟件版本構(gòu)造控制流圖;步驟4:采用深度優(yōu)先搜索的策略同步遍歷控制流圖和,以確定控制流圖中變化的節(jié)點(diǎn),與變化的節(jié)點(diǎn)鄰接的邊作為受軟件變化影響的邊,并以此構(gòu)建受軟件變化影響的邊的集合,記為;步驟5:采用深度優(yōu)先搜索策略遍歷控制流圖和過(guò)程中為兩個(gè)圖中的邊分別增加標(biāo)號(hào),相同的邊的標(biāo)號(hào)一致,標(biāo)記為,不同的邊分別標(biāo)記為和;步驟6:控制流圖中受軟件變化影響的邊集合構(gòu)建完畢,控制流圖和邊的標(biāo)號(hào)完畢;步驟7:讀取測(cè)試用例集合中的一個(gè)測(cè)試用例,并在歷史軟件版本上上運(yùn)行,如果該測(cè)試用例遍歷了一個(gè)屬于集合的元素,那么該測(cè)試用例即為受軟件變化影響的測(cè)試用例,將該用例保存到集合中;步驟8:重復(fù)執(zhí)行步驟1)-7,直到運(yùn)行完測(cè)試用例集合中的所有測(cè)試用例;步驟9:測(cè)試用例子集構(gòu)建完畢。
圖3為計(jì)算待分類的測(cè)試用例與受軟件變化影響的測(cè)試用例子集距離的流程圖。在歷史軟件版本上運(yùn)行測(cè)試用例子集,通過(guò)動(dòng)態(tài)插樁技術(shù)收集中的每個(gè)測(cè)試用例的剖面分析,構(gòu)造分支覆蓋向量,根據(jù)測(cè)試用例的運(yùn)行結(jié)果標(biāo)記測(cè)試用例的類別。在當(dāng)前軟件版本上運(yùn)行待分類的測(cè)試用例,通過(guò)動(dòng)態(tài)插樁技術(shù)收集的剖面信息,并構(gòu)造分支覆蓋向量。通過(guò)歐式距離函數(shù)計(jì)算測(cè)試用例與中的每一個(gè)測(cè)試用例之間的距離,并將其保存在磁盤中,具體步驟如下。
步驟1:起始狀態(tài);步驟2:在歷史軟件版本中自動(dòng)注入動(dòng)態(tài)插樁代碼,并編譯;步驟3:從測(cè)試用例集合中讀取一個(gè)測(cè)試用例作為輸入,并自動(dòng)運(yùn)行,同時(shí)記錄測(cè)試用例的運(yùn)行結(jié)果;步驟4:重復(fù)執(zhí)行步驟2、步驟3,直到獲取了中的所有測(cè)試用例的剖面信息與運(yùn)行結(jié)果信息,并將其保存在磁盤中;步驟5:從磁盤中讀取保存的每一個(gè)剖面信息文件,分析獲得的剖面信息文件,并提取文件中的分支執(zhí)行頻率列與分支編號(hào)列為測(cè)試用例構(gòu)造分支覆蓋向量,記為,向量中的每一個(gè)元素為一個(gè)map對(duì)象,其中分支編號(hào)作為對(duì)象的鍵,分支頻率作為其值,若頻率值大于0,則在分支覆蓋向量中該分支的取值為1,否則為0;步驟6:重復(fù)步驟5,直到為中的所有測(cè)試用例構(gòu)造完分支覆蓋向量;步驟7:將中的所有測(cè)試用例對(duì)應(yīng)的分支覆蓋向量保存到文件中,該文件中的每一行包括測(cè)試用例的編號(hào)信息,以及測(cè)試用例對(duì)應(yīng)的分支覆蓋向量;步驟8:在當(dāng)前軟件版本中自動(dòng)注入動(dòng)態(tài)插樁代碼,并編譯;步驟9:將待分類的測(cè)試用例作為輸入,自動(dòng)運(yùn)行,并獲得該用例的剖面信息,以此為基礎(chǔ)構(gòu)建分支覆蓋向量,記為;步驟10:使用步驟2)定義的公式計(jì)算測(cè)試用例與中的每一個(gè)測(cè)試用例之間的距離,并將距離信息保存在磁盤中;步驟11:根據(jù)步驟7產(chǎn)生的測(cè)試用例集合中的每一個(gè)測(cè)試用例的運(yùn)行結(jié)果標(biāo)記測(cè)試用例的類別,如果測(cè)試用例的實(shí)際輸出結(jié)果與預(yù)先定義的結(jié)果不一致,那么該用例是一個(gè)錯(cuò)誤的測(cè)試用例,置標(biāo)記n,否則該用例是一個(gè)正確的測(cè)試用例,標(biāo)記為y,將測(cè)試用例編號(hào)與測(cè)試用例的標(biāo)記信息保存在文件中;步驟12:待分類的測(cè)試用例與中的測(cè)試用例之間的距離計(jì)算完畢,測(cè)試用例集合中的測(cè)試用例類別標(biāo)記完畢。
圖4為回歸測(cè)試用例分類的流程圖。讀取待分類的測(cè)試用例與中測(cè)試用例的距離與中測(cè)試用例的標(biāo)號(hào)信息,通過(guò)基于權(quán)重的-近鄰算法對(duì)待分類的測(cè)試用例進(jìn)行分類,具體步驟如下。
步驟1:起始狀態(tài);步驟2:讀取待分類的測(cè)試用例與中測(cè)試用例的距離文件,將中的測(cè)試用例編號(hào)作為鍵,距離作為值,封裝為map對(duì)象,根據(jù)距離值對(duì)測(cè)試用例集合中的測(cè)試用例進(jìn)行升序排序,從中選取具有最近距離的10個(gè)測(cè)試用例,并為這10個(gè)測(cè)試用例賦予權(quán)重,權(quán)重值為距離的倒數(shù);步驟3:讀取用于保存中的測(cè)試用例的標(biāo)號(hào)信息文件,將測(cè)試用例作為鍵,測(cè)試用例的類別作為值,封裝為map對(duì)象,根據(jù)選定的10個(gè)測(cè)試用例的標(biāo)號(hào)信息分別計(jì)算出標(biāo)號(hào)n和y的權(quán)重和,如果標(biāo)號(hào)n的權(quán)重和大于y的權(quán)重和,那么待預(yù)測(cè)的測(cè)試用例的類別是n,否則為y;步驟4:回歸測(cè)試用例的分類完畢。
綜上所述,本發(fā)明解決了目前軟件回歸測(cè)試背景下依賴手工產(chǎn)生的測(cè)試預(yù)言對(duì)回歸測(cè)試用例進(jìn)行分類的自動(dòng)化效率不高的問題,該方法不需要構(gòu)造測(cè)試預(yù)言,僅利用測(cè)試用例運(yùn)行的歷史信息與軟件的演化信息對(duì)回歸測(cè)試用例進(jìn)行分類,不僅大幅提高了回歸測(cè)試的自動(dòng)化程度和運(yùn)轉(zhuǎn)效率,而且也降低了軟件回歸測(cè)試能耗,從而更好地控制軟件產(chǎn)品的質(zhì)量。