(江蘇自動(dòng)化研究所 連云港 222061)
軍用軟件大多采用基于構(gòu)件的設(shè)計(jì)方法,同一類型的軍用軟件具有很大的相似性,彼此之間具有很高的關(guān)聯(lián)性和繼承性[1~6]。因此,針對(duì)當(dāng)前軍用軟件測試存在的困難,可以從對(duì)測試用例的復(fù)用方面進(jìn)行考慮[7]。測試用例的復(fù)用不僅解決了測試人員經(jīng)驗(yàn)不足的問題,又能節(jié)省測試用例開發(fā)的時(shí)間、精力和財(cái)力,從而能夠最大限度的提高測試用例的使用效率,降低測試時(shí)間,提高測試效率。
文獻(xiàn)[8]提出一種根據(jù)用戶行為計(jì)算已有測試用例的復(fù)用能力方法。張娟等提出了一種基于測試用例套的復(fù)用度量計(jì)算方法,并實(shí)現(xiàn)計(jì)算過程的自動(dòng)化[9]。路曉麗等構(gòu)建了一個(gè)支持測試用例共享和復(fù)用的測試用例資產(chǎn)庫[10]。陳平等提出一種從軟件測試需求層面提取測試用例的方法[11]。文獻(xiàn)[12]和[13]提出基于案例推理的測試用例復(fù)用機(jī)制,并使用類比推理的方法進(jìn)行測試用例的復(fù)用。以上文獻(xiàn)有關(guān)軟件測試用例復(fù)用的研究主要局限在某一個(gè)方面,缺乏復(fù)用過程的系統(tǒng)研究,而且,測試用例復(fù)用的準(zhǔn)確率不高?;谶@些局限和軍用軟件系統(tǒng)的特點(diǎn),本文研究潛在語義的測評(píng)文檔生成算法,并在此基礎(chǔ)上提出一種系統(tǒng)的測試用例復(fù)用策略,從語義層次對(duì)測試用例進(jìn)行檢索復(fù)用。
本文從軍用軟件的描述、所屬行業(yè)、所屬領(lǐng)域、運(yùn)行平臺(tái)、開發(fā)語言、測試需求及需求對(duì)應(yīng)的測試用例角度對(duì)被測軟件進(jìn)行形式化描述。為了方便測試用例的復(fù)用,本文建立測試需求和測試用例的映射關(guān)系。在測試用例復(fù)用時(shí),可以根據(jù)軟件之間測試需求的相似度而計(jì)算出測試用例的可復(fù)用性,從而建立從軟件到測試需求,從測試需求到測試用例的復(fù)用關(guān)系。
在表1列出的軍用軟件屬性信息集合中,軟件概述和查詢索引是測試復(fù)用階段較為重要的兩個(gè)信息。其中,軟件概述主要是對(duì)軍用軟件的功能、目標(biāo)等進(jìn)行描述。本文用軟件體系結(jié)構(gòu)中提到的REBOOT模型對(duì)軟件概述進(jìn)行抽象描述[14]。該模型用有限維信息空間的術(shù)語組合從若干刻面的綜合角度來刻畫一個(gè)軟件。查詢索引主要使用軟件的標(biāo)簽或能表示軟件的關(guān)鍵字。本文用一個(gè)五元組(標(biāo)簽1,標(biāo)簽2,標(biāo)簽3,標(biāo)簽4,標(biāo)簽5)來描述軟件的查詢索引。另外,附件信息描述了軟件所對(duì)應(yīng)的測試說明文檔的路徑。如果在測試用例復(fù)用階段,有相似度極高的軟件,可以直接進(jìn)行測試說明文檔復(fù)用。這樣,既節(jié)省了復(fù)用的時(shí)間,而且復(fù)用程度極高。
表1 典型軍用軟件屬性信息集合
對(duì)已存在軍用軟件測試用例描述時(shí),將軍用軟件的功能進(jìn)行細(xì)化,這樣有利于功能點(diǎn)對(duì)應(yīng)的測試用例的充分表示。本文首先從軍用軟件到配置項(xiàng),從配置項(xiàng)到功能模塊的思路對(duì)軍用軟件的功能進(jìn)行細(xì)分。每一個(gè)功能可以表示為多個(gè)功能點(diǎn)。為了提高測試用例復(fù)用的準(zhǔn)確率及效率,本文將功能點(diǎn)用通用的自然語言進(jìn)行規(guī)范化描述,從而使每一個(gè)功能點(diǎn)均能準(zhǔn)確、完整地表示出軟件的功能,這樣,也有利于提高測試需求到測試用例的匹配。在實(shí)際軟件測試過程中,一個(gè)功能點(diǎn)對(duì)應(yīng)多個(gè)測試用例,一個(gè)測試用例也可以對(duì)應(yīng)多個(gè)功能點(diǎn),在測試用例規(guī)范化時(shí),盡量保證可復(fù)用測試用例之間的獨(dú)立性。這樣,有利于提高測試的復(fù)用程度。對(duì)測試用例進(jìn)行規(guī)范化時(shí),一個(gè)可復(fù)用測試用例按照表2所列的測試用例數(shù)據(jù)屬性描述。功能點(diǎn)描述和查詢索引是測試用例檢索機(jī)制重要的兩個(gè)信息。在對(duì)軍用軟件的功能點(diǎn)進(jìn)行描述時(shí),本文通過一個(gè)三元組(所屬軟件,功能模塊,功能點(diǎn))來描述功能點(diǎn)。查詢索引主要使用相關(guān)軟件功能點(diǎn)的關(guān)鍵詞來表示,也可以說是相關(guān)軟件的標(biāo)簽。本文用一個(gè)多元組(標(biāo)簽1,標(biāo)簽2,標(biāo)簽3,標(biāo)簽4……標(biāo)簽n)來描述查詢索引,這樣,在測試用例復(fù)用時(shí),可根據(jù)功能點(diǎn)描述與查詢索引相結(jié)合進(jìn)行測試用例匹配。
表2 測試用例數(shù)據(jù)屬性信息
在測試用例復(fù)用前,需要對(duì)測試文本進(jìn)行預(yù)處理。在預(yù)處理階段,首先將測試文本轉(zhuǎn)化為測試文本-關(guān)鍵詞矩陣。在采用中科院分詞系統(tǒng)ICTCLAS進(jìn)行分詞時(shí),在用戶詞典中添加一些測試相關(guān)術(shù)語、專業(yè)性詞語等。當(dāng)測試文本經(jīng)過分詞程序時(shí),就會(huì)去除相關(guān)的停用詞,然后統(tǒng)計(jì)各個(gè)關(guān)鍵詞的詞頻并進(jìn)行相關(guān)計(jì)算,最終將被測軟件的測試需求向量 可 表 示 為R=R(T1,W1;T2,W2…Ti,Wi;… ;Tn,Wn),可簡記為R=R(W1,W2…Wi…,Wn),其中1<i<n,Ti是被測軟件的測試需求文本中第i個(gè)特征項(xiàng),Wi為Ti的權(quán)重;可復(fù)用測試用例的測試需求向量可表示為CR=CR(T1,W1;T2,W2…Ti,Wi;…;Tn,Wn),其中1<i<n,Ti是可復(fù)用測試用例測試需求文本中第i個(gè)特征項(xiàng),Wi為Ti的權(quán)重;可復(fù)用測試用例的查詢索引向量可表示為CK=CK(T1,W1;T2,W2…Ti,Wi;…;Tn,Wn) ,其中1<i<n,Ti是可復(fù)用測試用例的查詢索引中第i個(gè)特征項(xiàng),Wi為Ti的權(quán)重?;谔卣髟~的測試文本相似度計(jì)算公式見式(1)。
其中,α,β為調(diào)和參數(shù),SimVSM(R,C)為被測軟件的某一測試需求與測試用例基于關(guān)鍵字的相似度,SimVSM(R,CR)為被測軟件的某一測試需求與可復(fù)用測試用例對(duì)應(yīng)的功能點(diǎn)描述基于關(guān)鍵字的相似度,SimVSM(R,CK)為被測軟件的某一測試需求與可復(fù)用測試用例查詢索引基于關(guān)鍵字的相似度。
其次,將被測軟件的測試需求文本-關(guān)鍵詞矩陣、可復(fù)用測試用例的測試功能點(diǎn)描述文本-關(guān)鍵詞矩陣及查詢索引-關(guān)鍵詞矩陣轉(zhuǎn)化為被測軟件的測試需求文本-主題矩陣、可復(fù)用測試用例的功能點(diǎn)描述文本-主題矩陣及查詢索引-主題矩陣。本文主要利用測試文本的潛在語義進(jìn)行相似度計(jì)算,所以,首要目標(biāo)就是進(jìn)行LDA建模。而LDA主題模型是一個(gè)分層的貝葉斯模型,其包含文本、主題和關(guān)鍵詞三個(gè)層次結(jié)構(gòu),同時(shí)也是一種生成主題概率模型[15]。
在LDA建模時(shí),LDA主題模型生成一個(gè)測試文本的算法如下。
Step1:針對(duì)測試數(shù)據(jù)集中的文本,根據(jù)Dirichlet分布Dir(α)得到文本中特征詞對(duì)應(yīng)主題的多項(xiàng)式分布參數(shù)θ;
Step2:根據(jù)泊松分布計(jì)算每篇測試文本中包含的特征詞數(shù)量N=Poisson(ξ);
Step3:對(duì)于每一個(gè)主題z,根據(jù)Dirichlet分布Dir(β)的到主題對(duì)應(yīng)的多項(xiàng)式分布參數(shù)φ~Dir(β);
Step4:針對(duì)數(shù)據(jù)集中每個(gè)文本中的特征詞w:
1)根據(jù)多項(xiàng)式分布Multi(θ)得到特征詞對(duì)應(yīng)的主題zi;
2)根據(jù)多項(xiàng)式分布Multi(φ)生成單詞w。
通過潛在語義分析,被測軟件的測試需求主題向量可表示為RT=RT(t1,t2,…ti…,tn),其中1<i<n,ti是被測軟件的測試需求文本對(duì)應(yīng)的第i個(gè)主題;可復(fù)用測試用例的測試需求主題向量可表示為CRT=CRT(t1,t2,…ti…,tn),其中1<i<n,ti是可復(fù)用測試用例的測試需求文本對(duì)應(yīng)的第i個(gè)主題;可復(fù)用測試用例的查詢索引向量可表示為CKT=CKT(t1,t2,…ti…,tn),其中,ti是可復(fù)用測試用例的查詢索引對(duì)應(yīng)的第1<i<n i個(gè)主題?;谥黝}的測試文本相似度計(jì)算公式見式(2)。
其中,χ,φ為調(diào)和參數(shù),SimLDA(R,C)為被測軟件的某一測試需求與測試用例的主題相似度,SimLDA(R,CR)為被測軟件的某一測試需求與可復(fù)用測試用例對(duì)應(yīng)的功能點(diǎn)的主題相似度,SimLDA(R,CK)為被測軟件的某一測試需求與可復(fù)用測試用例查詢索引的主題相似度。
基于潛在語義的測試用例復(fù)用框架如圖1所示。使用2.1節(jié)被測軟件描述模型及2.2節(jié)測試用例的描述模型對(duì)已測試的軟件及其對(duì)應(yīng)的測試用例進(jìn)行規(guī)范化處理,并將這些數(shù)據(jù)收集到測試用例庫,進(jìn)行合理的分類、管理和維護(hù)。然后,依據(jù)測試用例庫,采用測試用例復(fù)用檢索機(jī)制層層遞近,從總體到局部的策略進(jìn)行測試用例復(fù)用。具體算法如下。
圖1 測試用例復(fù)用框架
輸入?yún)?shù)集:{被測軟件的所屬行業(yè)、所屬領(lǐng)域、運(yùn)行環(huán)境信息、被測軟件查詢索引、測試類型、被測軟件的功能點(diǎn)描述、m、a、n、μ},其中m為可復(fù)用軟件集1中的軟件數(shù)量閾值,n為備選可復(fù)用測試用例的個(gè)數(shù);
輸出結(jié)果集:{被測軟件測試需求對(duì)應(yīng)的備選可復(fù)用測試用例}。
Step1:根據(jù)被測軟件的所屬行業(yè)、所屬領(lǐng)域、運(yùn)行環(huán)境過濾、生成已存在的可復(fù)用軟件集合,其中所屬行業(yè)、所屬領(lǐng)域、運(yùn)行環(huán)境的表示比較固定,匹配過程中采用字符串匹配技術(shù)即利用字符串的Contains(String str)方法。如果所屬行業(yè)、所屬領(lǐng)域、運(yùn)行環(huán)境中至少兩個(gè)匹配成功,就可以將可復(fù)用軟件放到備選可復(fù)用軟件集1中;
Step2:針對(duì)備選可復(fù)用軟件集合1,根據(jù)被測軟件的查詢索引,將每一個(gè)軟件的查詢索引轉(zhuǎn)化為矩陣表示,即軟件-關(guān)鍵詞矩陣,定義閾值a,然后利用余弦相似度公式計(jì)算被測軟件與備選可復(fù)用軟件的相似度,將相似度大于給定閾值的可復(fù)用軟件放到備選可復(fù)用軟件集2中;
Step3:針對(duì)備選可復(fù)用軟件集2的每一個(gè)軟件,根據(jù)被測軟件所要復(fù)用的測試用例的測試類型,對(duì)每一個(gè)軟件對(duì)應(yīng)的測試用例進(jìn)行過濾,得到可復(fù)用測試用例集1;
Step4:首先將被測軟件的測試需求和可復(fù)用測試用例集1的每一個(gè)測試用例的功能點(diǎn)描述文本通過中文分詞工具進(jìn)行預(yù)處理,經(jīng)過特征提取后構(gòu)建特征空間即將測試需求文本和功能點(diǎn)描述轉(zhuǎn)化為特征向量,其次將可復(fù)用測試用例集1的每一個(gè)測試用例的查詢索引都轉(zhuǎn)化為矩陣表示,即測試用例-關(guān)鍵詞矩陣;
Step5:利用3.1節(jié)LDA主題模型測試文本生成算法,將被測軟件的測試需求文本-關(guān)鍵詞矩陣、可復(fù)用測試用例的測試功能點(diǎn)描述文本-關(guān)鍵詞矩陣及查詢索引-關(guān)鍵詞矩陣轉(zhuǎn)化為被測軟件的測試需求文本-主題矩陣、可復(fù)用測試用例的功能點(diǎn)描述文本-主題矩陣及查詢索引-主題矩陣。然后利用式(1)和式(2)相結(jié)合計(jì)算被測軟件的測試需求與可復(fù)用測試用例的相似度,公式見式(3):
其中,η,γ為調(diào)和參數(shù),Sim(R,C)為被測軟件的某一測試需求與測試用例的相似度,SimVSM(R,C)為被測軟件的某一測試需求與可復(fù)用測試用例基于關(guān)鍵字的相似度,SimLDA(R,C)為被測軟件的某一測試需求與可復(fù)用測試用例的主題相似度;
Step6:針對(duì)計(jì)算得到的被測軟件測試需求與可復(fù)用測試用例的相似度值,采用選擇排序算法對(duì)可復(fù)用測試用例進(jìn)行排序。由于一個(gè)測試需求可能對(duì)應(yīng)若干個(gè)測試用例,此時(shí)需要將排序前Top n的測試用例放到備選可復(fù)用測試用例集中,形成被測軟件測試需求-備選可復(fù)用測試用例矩陣。通過測試用例復(fù)用檢索算法得到被測軟件測試需求-備選可復(fù)用測試用例矩陣后,然后,從被測軟件需求對(duì)應(yīng)的備選測試用例集人工選擇相應(yīng)測試用例,然后根據(jù)測試用例模板生成相應(yīng)的測試用例。
在測試用例復(fù)用過程中,根據(jù)被測軟件的測試需求及查詢索引,從測試用例庫中選擇相應(yīng)的測試用例。而評(píng)價(jià)測試用例復(fù)用效果的是復(fù)用的準(zhǔn)確率,即測試需求對(duì)應(yīng)測試用例的有效性。所以本實(shí)驗(yàn)主要關(guān)注測試用例復(fù)用的準(zhǔn)確率。
假設(shè)某一個(gè)軟件有N個(gè)測試需求,如果在用例復(fù)用時(shí),復(fù)用得到的總用例數(shù)為M個(gè),第i個(gè)測試需求匹配到正確的用例數(shù)為ni個(gè),則測試復(fù)用的準(zhǔn)確率為
本文利用3.2節(jié)的基于潛在語義的測試用例復(fù)用方法進(jìn)行仿真實(shí)驗(yàn),實(shí)驗(yàn)的數(shù)據(jù)為已完成測評(píng)的相對(duì)獨(dú)立的軟件,分別為某專用網(wǎng)管系統(tǒng)、某作戰(zhàn)指揮系統(tǒng)、某數(shù)字集群系統(tǒng)及某多功能航行器軟件,每個(gè)軟件對(duì)應(yīng)的測試用例如表3所示。
表3 軟件對(duì)應(yīng)的測試用例數(shù)
本實(shí)驗(yàn)利用基于VSM的測試用例復(fù)用方法和本文提出的基于潛在語義的測試用例復(fù)用方法進(jìn)行仿真實(shí)驗(yàn)。為了保證實(shí)驗(yàn)的一致性,所有參數(shù)設(shè)置一致。分別將某專用網(wǎng)管系統(tǒng)、某作戰(zhàn)指揮系統(tǒng)、某數(shù)字集群系統(tǒng)及某多功能航行器軟件作為被測對(duì)象作用在兩種測試用例復(fù)用方法上,實(shí)驗(yàn)結(jié)果如表4所示。
表4 對(duì)比實(shí)驗(yàn)結(jié)果
通過表4列出的實(shí)驗(yàn)結(jié)果和式(4)計(jì)算出兩種方法在不同實(shí)驗(yàn)對(duì)象上的準(zhǔn)確率,如圖2所示。通過兩種復(fù)用方法的對(duì)比試驗(yàn),本文提出的方法的準(zhǔn)確率明顯高于傳統(tǒng)的基于VSM的測試用例復(fù)用方法,而且通過表4可以看出,在測試用例召回?cái)?shù)量方面,本文提出的基于潛在語義的測試用例復(fù)用方法比傳統(tǒng)的基于VSM的測試用例復(fù)用方法分別多出354個(gè)、300個(gè)、269個(gè)、752個(gè)。通過實(shí)驗(yàn)結(jié)果驗(yàn)證了本文提出的測試用例復(fù)用方法在準(zhǔn)確率和測試用例召回?cái)?shù)量方面的有效性。
圖2 不同測試用例復(fù)用方法匹配測試用例的準(zhǔn)確率
本文通過構(gòu)建被測軟件與測試用例的模型,建立測試需求與測試用例的關(guān)聯(lián)性,從潛在語義的層面對(duì)測試需求和測試用例進(jìn)行建模、解析,從而達(dá)到測試用例復(fù)用的目的,并通過仿真實(shí)驗(yàn)驗(yàn)證了本文提出的基于潛在語義的測試用例復(fù)用方法的有效性??傊疚牡难芯吭诶碚撋暇哂袆?chuàng)新性,在實(shí)際測試項(xiàng)目中具有可行性。但隨著測試用例的積累,測試用例的數(shù)量級(jí)驚人,下一步考慮引入數(shù)據(jù)挖掘技術(shù)優(yōu)化測試用例檢索時(shí)間。