夏傳林,鄭 巍,譚莉娟,王小良
(1.南昌航空大學(xué) 軟件學(xué)院,江西 南昌 330063; 2.南昌航空大學(xué) 軟件測評中心,江西 南昌 330063)
測試用例復(fù)用是從已有的多個(gè)項(xiàng)目中尋找相似的測試用例,故而這些項(xiàng)目的測試場景要相似,而本文所有項(xiàng)目中的測試用例大部分是對硬件接口的測試,所以具有復(fù)用的可行性。測試用例是保證軟件測試質(zhì)量的關(guān)鍵,一個(gè)好的測試用例有利于發(fā)現(xiàn)更多的軟件缺陷[1-4],從而縮短軟件開發(fā)周期,提高測試效率。在軟件測試過程中,可以修改高度相似的測試用例,以減少測試用例設(shè)計(jì)的工作量[5,6]。測試用例復(fù)用成功的關(guān)鍵就是找到用戶真實(shí)需要的測試用例,并推薦給用戶。目前,涉及測試用例復(fù)用的研究較少,大部分工作都集中在構(gòu)建測試用例庫,以此達(dá)到測試用例復(fù)用的目的。但是,此類方法僅使用了基于關(guān)鍵字的檢索模型,在靈活性和復(fù)用率方面仍有所欠缺。
針對上述問題,本文提出了一種基于知識圖譜的測試用例復(fù)用方法(test case reuse based on knowledge graph,TCRKG),TCRKG通過對項(xiàng)目測試文檔數(shù)據(jù)進(jìn)行處理,抽取出和測試用例有關(guān)的項(xiàng)目、測試項(xiàng)、測試用例、測試記錄、問題報(bào)告單等基礎(chǔ)特征。本文主要包括3個(gè)核心內(nèi)容:構(gòu)建測試用例知識圖譜、改進(jìn)樸素貝葉斯分類模型、測試用例相似度計(jì)算。根據(jù)專家經(jīng)驗(yàn)和測試文檔對本體進(jìn)行設(shè)計(jì),構(gòu)建測試用例圖譜,替換傳統(tǒng)的測試用例庫。為了使測試用例復(fù)用模型更加靈活,對改進(jìn)的樸素貝葉斯分類器設(shè)置了常用的多種問題模板,相比于決策樹、邏輯回歸、支持向量機(jī)等分類方法,樸素貝葉斯在時(shí)間花費(fèi)、泛化性能上更適合本文的應(yīng)用場景。最后在實(shí)驗(yàn)中驗(yàn)證了該方法能夠有效提高測試用例復(fù)用,找到軟件缺陷。
本文主要是通過構(gòu)建知識圖譜的方法來對測試用例復(fù)用進(jìn)行研究,因此相關(guān)工作主要分為測試用例復(fù)用研究和知識圖譜。
測試用例的設(shè)計(jì)和編寫需要花費(fèi)大量的時(shí)間,而測試用例復(fù)用能夠大大節(jié)約時(shí)間,提高效率[7,8]。從本質(zhì)上來講,測試用例復(fù)用就是從已有的測試用例中找出用戶真實(shí)需要的測試用例。
近年來,出現(xiàn)了一些新的針對測試用例的方法研究,Zhang等提出了一種基于控件遍歷的測試方法,能夠基于深度優(yōu)先算法自動(dòng)生成測試用例,并且該方法能夠增強(qiáng)測試用例的復(fù)用性[9]。Ge等提出了一種基于線性融合和項(xiàng)目結(jié)合的用戶協(xié)同過濾算法[10],該算法雖然可以更有效地提高測試用例推薦精度,但存在計(jì)算成本高,泛化性能差的問題。Tong等利用本體對測試用例進(jìn)行復(fù)用,提供了靈活的查詢需求[11],卻缺少測試用例相關(guān)的上下文內(nèi)容,沒有對問題報(bào)告單、測試記錄等和測試用例極其相關(guān)的內(nèi)容進(jìn)行研究。綜上所述,以上方法很難從海量數(shù)據(jù)中挖掘測試用例的特征以達(dá)到精準(zhǔn)復(fù)用的目的,不能獲得測試用例的上下文環(huán)境。
知識圖譜是由谷歌(Google)公司正式向外界發(fā)布,自此,知識圖譜正式走入大眾視野。知識圖譜本質(zhì)上是語義網(wǎng)的知識庫,由節(jié)點(diǎn)和邊組成,節(jié)點(diǎn)表示實(shí)體,邊表示實(shí)體與實(shí)體之間的關(guān)系。知識圖譜可以分為通用知識圖譜和領(lǐng)域知識圖譜。例如通用知識圖譜有DBpedia、YAGO、Freebase等;領(lǐng)域知識圖譜有地理信息領(lǐng)域知識圖譜[12]、中醫(yī)藥知識圖譜等。
知識圖譜的應(yīng)用場景主要有智能搜索、智能問答、智能推薦、情報(bào)分析。Pedro Szekely等利用網(wǎng)絡(luò)數(shù)據(jù)構(gòu)建知識圖譜[13],用來打擊人口販賣。Feng-Lin Li等將知識圖譜應(yīng)用到電子商務(wù)領(lǐng)域[14],有助于理解用戶需求,回答售前問題和生成解釋文本。Sen Hu等通過子圖匹配知識圖譜來回答自然語言問題[15],可以有效地解決歧義問題。測試用例復(fù)用也可以看成是一種智能推薦,用戶提出問題,通過知識圖譜來找尋答案?;谥R圖譜的智能搜索可以直接給出知識卡片而不是給出相關(guān)的鏈接序列。在知識圖譜的幫助下,檢索引擎可以將搜索關(guān)鍵詞映射到知識圖譜中匹配度較高的一個(gè)測試用例上,最后以知識卡片的形式展現(xiàn)給用戶。
在本節(jié)中,首先介紹整個(gè)測試用例復(fù)用模型框架流程,然后對本文3個(gè)核心內(nèi)容:構(gòu)建知識圖譜、改進(jìn)樸素貝葉斯分類模型、相似度計(jì)算依次進(jìn)行介紹。
圖1展示了測試用例復(fù)用的整個(gè)流程,包括3個(gè)核心部分。
圖1 測試用例復(fù)用模型
(1)構(gòu)建測試用例知識圖譜:構(gòu)建測試用例知識圖譜是本文方法的前提,其過程主要是依據(jù)專家經(jīng)驗(yàn)結(jié)合項(xiàng)目文檔數(shù)據(jù)對本體進(jìn)行設(shè)計(jì),從半結(jié)構(gòu)化的文檔數(shù)據(jù)中提取出測試用例、測試記錄、問題報(bào)告單等相關(guān)的數(shù)據(jù),最后填充實(shí)體構(gòu)建知識圖譜。
(2)改進(jìn)樸素貝葉斯分類模型:本文設(shè)計(jì)了常用的多種問題模板,每種問題模板都有很多問題樣例。首先同種問題模板中的問題樣例高度相似,不同種類的問題模板也有一定的相似度,這就會引發(fā)一種情況,如果某種問題模板的問題樣例數(shù)量特別多,那么其所對應(yīng)的特征也很多,最后通過樸素貝葉斯分類器來計(jì)算概率就會出現(xiàn)特征多的類別概率偏大,所占特征少的類別概率偏小。為了解決上述問題,本文提出了兩種方式來提高樸素貝葉斯分類的準(zhǔn)確率。其一,通過設(shè)置測試用例自定義的詞典;其二,通過給每種問題類別設(shè)置一個(gè)權(quán)值,從而提高模型分類的準(zhǔn)確率。
(3)測試用例相似度計(jì)算:通過樸素貝葉斯分類之后可以確定問題模板類別,然后就是通過知識圖譜尋找用戶需要的答案。問題模板分為兩類,一種是可以直接從知識圖譜中找到答案,例如,功能測試有多少測試用例;一種是需要通過相似度計(jì)算才可以得到答案。用戶可以輸入一個(gè)或多個(gè)測試用例屬性的內(nèi)容、關(guān)鍵字等,通過這些與知識圖譜中的測試用例進(jìn)行相似度比較,具體計(jì)算方法在2.4節(jié)中闡述。
構(gòu)建知識圖譜主要包括3個(gè)步驟:
(1)特征提?。罕疚臉?gòu)建知識圖譜的數(shù)據(jù)來源主要是項(xiàng)目測試文檔,屬于半結(jié)構(gòu)化數(shù)據(jù),依據(jù)專家經(jīng)驗(yàn)和測試用例的特征,從半結(jié)構(gòu)化數(shù)據(jù)中提取出和測試用例相關(guān)的特征數(shù)據(jù)[16,17],最終將數(shù)據(jù)轉(zhuǎn)為結(jié)構(gòu)化數(shù)據(jù),測試用例設(shè)計(jì)樣例見表1。
表1 測試用例設(shè)計(jì)樣例
(2)本體構(gòu)建:本體是用于描述一個(gè)領(lǐng)域的數(shù)據(jù)集合,屬于知識圖譜的模式層。在測試用例的本體設(shè)計(jì)中,本文采用七步法進(jìn)行構(gòu)建。圖2中展示了核心本體,包括測試用例信息、項(xiàng)目、測試項(xiàng)、測試項(xiàng)明細(xì)、測試記錄和問題報(bào)告單等數(shù)據(jù),能夠更加全面覆蓋測試用例的關(guān)鍵信息。
圖2 測試用例核心本體
(3)生成圖譜:圖3為部分測試用例知識圖譜,圖中共有5種顏色的圓,每一種顏色表示一種實(shí)體,實(shí)體與實(shí)體之間的連線表示兩者的關(guān)系,實(shí)體的屬性在圖中沒有顯示出來。通過測試用例知識圖譜,可以很清晰看到項(xiàng)目、測試項(xiàng)、測試用例、問題報(bào)告單之間的關(guān)聯(lián),以及測試用例的分布、缺陷的分布。在測試用例復(fù)用中,就能夠優(yōu)先匹配到那些能夠發(fā)現(xiàn)軟件缺陷的測試用例。
圖3 部分測試用例知識圖譜
測試用例復(fù)用模型不僅應(yīng)該能夠檢索到用戶需要的測試用例,還能夠找到和測試用例相關(guān)聯(lián)的信息。針對這個(gè)問題,本文通過使用樸素貝葉斯分類模型,來更好滿足用戶各種問題需求。
為了提高樸素貝葉斯的準(zhǔn)確率,本文通過兩種方式對其進(jìn)行改進(jìn):設(shè)置測試用例自定義的詞典,來提升關(guān)鍵詞的識別;對類別進(jìn)行加權(quán),減少模型過擬合。
在訓(xùn)練樸素貝葉斯分類模型之前,需要自定義詞典和設(shè)置好問題模板。如表2所示列出了自定義詞典添加的內(nèi)容,詞典中添加的每種內(nèi)容都必需有唯一的詞性。如此,利用分詞工具才能準(zhǔn)確的將用戶輸入的內(nèi)容進(jìn)行分詞,并且能夠識別出自定義詞典中的內(nèi)容。
表2 自定義詞典
本文設(shè)置了14種常用問題模板,每種問題模板都有很多問題樣例,用來模型訓(xùn)練。經(jīng)過樸素貝葉斯分類確定輸入的是哪種問題模板后,其中有13種是可以直接生成查詢語句從知識圖譜中檢索答案,而另一種則需要通過測試用例相似度計(jì)算來匹配。
問題模板集合C={y1,y2,…,y14}, 表示14種問題模板,I={I1,I2,…,In} 是輸入集合,每一個(gè)元素是一個(gè)待分類項(xiàng),Ii={x1,x2,…,xm} (i=1,2,…,n),Ii表示當(dāng)前用戶輸入的內(nèi)容,每個(gè)x為一個(gè)特征屬性。對Ii分詞后會得到每個(gè)Ii的特征屬性x, 不同的Ii對應(yīng)x的數(shù)量也不相同。
首先通過分詞將所有問題模板中的樣例進(jìn)行分詞得到k維向量,然后開始訓(xùn)練模型。根據(jù)條件概率可得到式(1)
(1)
為得到當(dāng)前Ii所屬類別,需要對每種類別設(shè)置一個(gè)權(quán)值w={w1,w2,…,w14},w∈(0,1), 通過式(2)來計(jì)算
P(yt|Ii)=max{P(y1|Ii)w1,P(y2|Ii)w2,…,P(y14|Ii)w14}
(2)
式(2)中為當(dāng)前Ii屬于哪種類別,則求出Ii在14種問題模板當(dāng)中的所有概率,對每個(gè)類別計(jì)算P(yt), 選擇概率最大的類別作為Ii的類別。式(1)中,因?yàn)榉帜笇τ谒蓄悇e為常數(shù),所以只需將分子最大化即可
P(Ii|yt)P(yt)=P(x1|yt)P(x2|yt)…P(xm|yt)P(yt)
(3)
對每個(gè)類別計(jì)算P(Ii|yt)P(yt), 以P(Ii|yt)P(yt) 作為Ii所屬的類別。
Mu等提出了基于文本相似性對測試用例復(fù)用進(jìn)行研究[18],但沒有考慮將輸入內(nèi)容分解對應(yīng)到每個(gè)屬性上。本文經(jīng)過改進(jìn)的樸素貝葉斯分類模型處理后,會從14種問題模板中找到概率最高的一個(gè)作為其真實(shí)類別。用戶可以輸入測試用例的多種屬性內(nèi)容,根據(jù)這些屬性在知識圖譜中找到一個(gè)大致范圍的測試用例集,最終計(jì)算相似度來確定結(jié)果。
測試用例集合M={M1,M2,…,Mn}, 測試用例屬性Sk,S={S1,S2,…,Sk}, 屬性對應(yīng)的權(quán)重w={w1,w2,…,wk}。 將測試用例所有屬性進(jìn)行分詞,然后進(jìn)行onehot編碼,則tik表示測試用例Mi在屬性Sk上onehot編碼為1的數(shù)量,從而可以將相似度計(jì)算轉(zhuǎn)化為式(4)中的相似值
(4)
N(Mr,Mi)是指測試用例Mr(用戶輸入的內(nèi)容)和測試用例集合中的Mi的相似值
N=max{N(Mr,M1),N(Mr,M2),…,N(Mr,Mi)}
(5)
N就是測試用例集合M中N(Mr,Mi) 的最大值,此時(shí)的Mi就是找到相似度最大的測試用例。例如,圖4顯示了測試用例相似度計(jì)算的一個(gè)例子,其中圖4(b)是用戶輸入的數(shù)據(jù),可以根據(jù)用例標(biāo)識、用例描述、測試類型、需求追溯等多種屬性來計(jì)算測試用例的相似度。根據(jù)圖4(b)中的信息,找到用戶需要的測試用例,也就是從知識圖譜中找出相似度最大的測試用例。從圖4(b)中可以看出用例描述屬性中的關(guān)鍵字“指令”、“故障”、“命令”的多個(gè)屬性特征都與圖4(a)相同,雖然關(guān)鍵字“發(fā)送”在圖4(a)和圖4(b)中的用例描述中都能找到,但是該關(guān)鍵字是無效關(guān)鍵字,因?yàn)槠渖舷挛拿黠@不一致,所以在計(jì)算相似度時(shí)不會考慮該關(guān)鍵字。根據(jù)式(4)和式(5),求得圖4(b)、圖4(a)之間的相似度為12.34%,大于圖4(b)、圖4(c)之間的相似度4.98%。
圖4 測試用例相似度計(jì)算示例
在本節(jié)中,首先對實(shí)驗(yàn)數(shù)據(jù)進(jìn)行介紹,然后描述實(shí)驗(yàn)的評價(jià)指標(biāo),最后對實(shí)驗(yàn)結(jié)果進(jìn)行分析。
本文實(shí)驗(yàn)中的所有數(shù)據(jù)來源均為南昌航空大學(xué)軟件學(xué)院軟件測評中心,擁有64個(gè)軟件項(xiàng)目,23 212個(gè)測試用例。數(shù)據(jù)格式為半結(jié)構(gòu)化的測試文檔,最終將半結(jié)構(gòu)化的數(shù)據(jù)轉(zhuǎn)為結(jié)構(gòu)化的數(shù)據(jù)。
為了更加全面的評價(jià)TCRKG,本文從3個(gè)方面對模型進(jìn)行評價(jià)。首先是模型的準(zhǔn)確度,要精準(zhǔn)找到用戶想要復(fù)用的測試用例,問題模板的精度就非常重要,因?yàn)槟鞘钦业胶玫臏y試用例的關(guān)鍵,因此本文通過3個(gè)廣泛使用的指標(biāo):精確度(Precision)、召回率(Recall)和F1測量標(biāo)準(zhǔn)來對問題模板匹配的精度進(jìn)行評價(jià),并將改進(jìn)后的樸素貝葉斯與改進(jìn)前的樸素貝葉斯進(jìn)行性能對比。其次,為了檢測知識圖譜的效率,通過和傳統(tǒng)構(gòu)建測試用例庫的方法進(jìn)行比較,通過檢索時(shí)間,和搜索復(fù)雜度兩個(gè)指標(biāo)來進(jìn)行評價(jià)。最后,為了檢驗(yàn)本文中TCRKG在實(shí)踐中的有效性,設(shè)置A、B兩個(gè)對照組,分別對4個(gè)軟件S1,S2,S3,S4進(jìn)行軟件測試,A組使用本文中的測試用例復(fù)用方法,作為對照組,B組使用傳統(tǒng)測試用例庫的方法。最終以測試用例復(fù)用數(shù)量,和找到缺陷的個(gè)數(shù)作為評價(jià)指標(biāo)。
3.3.1 模型精度
圖5、圖6、圖7顯示了樸素貝葉斯分類模型改進(jìn)前和改進(jìn)后的Precision、Recall、F1值的對比。就精確度而言,從圖5中可以看出樸素貝葉斯改進(jìn)后的精確度都要優(yōu)于改進(jìn)前的精確度,樸素貝葉斯分類改進(jìn)前精確度平均為90.05%,改進(jìn)后為94.09%,精確度平均提高了4%。圖6中樸素貝葉斯改進(jìn)后的召回率都要大于改進(jìn)前的召回率,樸素貝葉斯分類改進(jìn)前召回率平均為76.60%,改進(jìn)后為83.76%,召回率平均提高了7%。圖7中樸素貝葉斯改進(jìn)后的F1都要大于改進(jìn)前的F1,樸素貝葉斯分類改進(jìn)前召回率平均為82.84%,改進(jìn)后為88.51%,F(xiàn)1值平均提高了6%。從整體上來看,模板5和模板12的Precision、Recall、F1值都偏低,其原因是因?yàn)槟0?和模板12的樣例數(shù)量相比于其它模板的數(shù)量要少很多,所以導(dǎo)致這兩種問題模板所占特征偏少。因此本文通過自定義詞典和給問題類別加權(quán)值的方法對樸素貝葉斯進(jìn)行改進(jìn),有效改善了此類問題對分類結(jié)果的影響,并且整體性的提高了樸素貝葉斯的分類性能。
圖5 精確度對比
圖6 召回率對比
圖7 F1值對比
綜上所述,通過添加自定義詞典和給問題類別設(shè)置權(quán)值的方法可以有效解決問題模板樣例數(shù)量相差較大所帶來的影響,并且可以有效提高樸素貝葉斯分類模型的準(zhǔn)確率,為提高測試用例復(fù)用奠定了基礎(chǔ)。
3.3.2 檢索效率
為了驗(yàn)證知識圖譜的檢索效率,本文從復(fù)雜度和時(shí)間消耗兩個(gè)方面進(jìn)行對比,復(fù)雜度是指兩種方案解決同一個(gè)問題數(shù)據(jù)庫需要進(jìn)行多少步驟。對14種問題模板分別進(jìn)行5次實(shí)驗(yàn),將5次實(shí)驗(yàn)的平均數(shù)據(jù)作為時(shí)間消耗值。
圖8和圖9展示了傳統(tǒng)用例庫與知識圖譜檢索復(fù)雜度比較,為了更加直觀比較兩種方法復(fù)雜度的大小,本文將傳統(tǒng)用例庫每種問題模板的復(fù)雜度都?xì)w一化到1,然后知識圖譜的復(fù)雜度以傳統(tǒng)用例庫復(fù)雜度大小為基準(zhǔn),復(fù)雜度越大,表示執(zhí)行步驟越多,效率越低??梢钥闯觯瑐鹘y(tǒng)測試用例庫的復(fù)雜度都比知識圖譜的復(fù)雜度大,這就間接表明通過知識圖譜進(jìn)行檢索的效率高。
圖8 傳統(tǒng)用例庫復(fù)雜度
圖9 知識圖譜復(fù)雜度
圖10 傳統(tǒng)用例庫與知識圖譜檢索時(shí)間消耗比較
綜上所述,無論是從復(fù)雜度還是從時(shí)間消耗來看,基于知識圖譜的方法檢索效率都要優(yōu)于基于傳統(tǒng)測試用例庫的方法。
3.3.3 實(shí)踐對比
為了檢測TCRKG在實(shí)際中的使用效果,由軟件測評中心組織測試人員測試4個(gè)軟件S1,S2,S3,S4,設(shè)置A、B對照組對4個(gè)軟件進(jìn)行測試。為了盡可能排除測試人員所帶來的影響,A、B兩組人員都是同年級學(xué)生,本科接受課程教育相同。A組為使用基于知識圖譜復(fù)用方法,作為對照組,B組是基于傳統(tǒng)用例庫的方法。
圖11顯示了兩種方法測試用例復(fù)用數(shù)量的對比,A組明顯比B組復(fù)用的測試用例要多,平均高于B組20%~30%。
圖11 測試用例復(fù)用數(shù)量
如圖12所示,展示了S1,S2,S3,S4這4個(gè)軟件的真實(shí)缺陷數(shù)量和基于傳統(tǒng)用例庫、基于知識圖譜復(fù)用方法測試到正確的缺陷數(shù)量。4個(gè)軟件的缺陷類型主要為接口問題和功能問題缺陷,其中90%的缺陷都在以往的測試中被典型測試用例發(fā)現(xiàn)過。A組測試出將近2/3的真實(shí)缺陷數(shù)量,而B組測試出的數(shù)量在1/3~2/3之間。不僅如此,由于A組使用的是基于本文中的復(fù)用模型,可以更加準(zhǔn)確復(fù)用需要的測試用例,而B組只能根據(jù)少量關(guān)鍵字進(jìn)行匹配,不能精準(zhǔn)找到用戶需要的測試用例,所以在耗時(shí)方面,A組大約只使用了B組一半的時(shí)間。通過實(shí)踐對比,驗(yàn)證了本文的測試用例復(fù)用方法確實(shí)能夠減少測試人員花費(fèi)的時(shí)間,并且提高了軟件缺陷的發(fā)現(xiàn)率。
圖12 缺陷數(shù)量對比
綜上所述,通過A、B兩組對4個(gè)軟件S1,S2,S3,S4進(jìn)行測試的對照實(shí)驗(yàn)來看,A組也就是本文中基于知識圖譜的測試用例復(fù)用方法能夠復(fù)用更多的測試用例,發(fā)現(xiàn)更多的軟件缺陷。
針對傳統(tǒng)測試用例復(fù)用方法的不足,本文提出了一種基于知識圖譜的測試用例復(fù)用方法。該方法首先利用已有文檔提取結(jié)構(gòu)化數(shù)據(jù),構(gòu)建知識圖譜,從而獲得了與測試用例相關(guān)的上下文信息;然后在測試用例匹配過程中,基于樸素貝葉斯分類模型和問題模板,明確用戶的檢索意圖;最后利用相似度計(jì)算確定最佳的測試用例。實(shí)驗(yàn)結(jié)果表明,TCRKG比傳統(tǒng)測試用例復(fù)用方法具有更高的推薦準(zhǔn)確度。TCRKG不僅能夠挖掘測試用例的潛在信息,還能將傳統(tǒng)用例庫中孤立的測試用例進(jìn)行關(guān)聯(lián),達(dá)到“1+1>2”的效果。而本研究的不足點(diǎn)就是沒有考慮測試用例的語義信息,在進(jìn)行相似度計(jì)算的時(shí)候沒有將測試用例的語義信息考慮在內(nèi)。所以我們下一步工作就是將測試用例的語義信息加入到知識圖譜中。