萬進勇,史涯晴,黃 松,羅浩榕
(陸軍工程大學指揮控制工程學院,江蘇南京 210001)
隨著軍隊現代化建設進程加快推進,越來越多的軍事軟件應用到軍事活動中,因而對這些軍事軟件的質量要求越來越高。軟件測試作為裝備試驗鑒定中的重要一環,對裝備質量起到保駕護航的作用,同時也對測試效率要求越來越高。軟件測試是程序的一種執行過程,是在軟件生命周期中一項十分重要且復雜的工作,是軟件可靠性保證的有效方法。研究表明,軟件測試占用軟件開發過程的大量時間,提高軟件測試效率、縮短軟件研制周期是軟件工程領域亟待解決的問題[1]。近年來,圍繞提高軟件測試效率,研究者提出大量自動化測試框架與測試方法,提高了軟件測試執行階段的效率。
在測試設計階段,如何提高測試用例設計是軟件測試過程中的關鍵一步,測試用例復用的思想由此產生。測試用例設計是軟件測試過程中的重要環節,利用歷史項目的測試用例,指導新項目測試用例的設計與執行,實現測試過程中的資產復用是提高軟件測試效率的重要方式。軟件測試作為一項知識密集型活動,在歷史測試的各階段都會產生大量測試文本數據,通過整理提取歷史測試資產庫中的測試用例相關測試數據建立軟件測試用例庫。在此基礎上通過Bert 語言模型[2]對測試用例庫的數據進行處理,結合文本相似度計算實現測試用例復用,以此提高測試人員測試用例設計效率。
目前,有關測試用例的復用研究可分為以下幾種類型:基于形式化建模的復用方法,使用XML、Z 語言等[3-4]方式對測試資產從不同層面建立統一規范的表述從而形成測試資產庫,在此基礎上使用基于關鍵字的檢索或相似性度量的方式實現測試資產復用;基于主題詞檢索復用方法[5]需要構建軟件測試用例的檢索模型,通過模型匹配與檢索算法獲取測試資產庫中的測試用例信息;基于需求匹配模型,通過建立測試用例與軟件測試需求之間的關聯性,包括建立軟件需求—測試樹、獲取需求的向量表示并進行需求分類[6]、利用TF-IDF 詞頻統計方法與向量模型[7]挖掘文檔標簽信息進而復用測試用例文檔。
通過相關文獻研讀,測試用例復用研究中還存在一些問題:歷史測試資產包含繁雜的測試信息且存在形式各異,對測試用例采集造成挑戰;測試文本數據具有很強的文本語義信息,以往通過檢索的復用方式難以挖掘測試文本數據更深層的語義信息從而實現更小粒度的復用。
參考GJB/Z141 軍用軟件測試指南、GJB 438B 軍用軟件開發文檔中測試用例涉及的文本信息,本文分析測試用例復用所需的測試信息,通過SQL 語言等技術對結構化與非結構化的測試用例、測試需求進行采集,形成比較標準的測試用例資產庫。為了獲取測試文本語義向量表示,引入自然語言處理領域中預訓練語言模型,將構建的測試數據訓練集輸入到Bert 預訓練語言模型,進行微調以更新模型參數。通過微調的模型能夠獲取到測試文本數據更好的語義向量表示,結合文本相似度計算實現測試用例復用。最后通過實驗驗證了該方法的有效性,提升了測試用例設計效率與質量。
軟件測試用例復用的一個重要前提是構建一個完備且規范的測試用例庫,測試用例、測試需求是軟件測試資產庫中的核心資產。測試團隊應具備全面、協調和可持續發展的特點,構建標準化、規范化的測試資產庫,用于指導今后測試設計與測試人員培訓等工作。軟件測試貫穿于軟件開發生命周期,每個測試階段都會輸出相應文檔,這就是基礎的測試資產,不同測試階段,測試的輸入輸出如表1 所示。軟件測試資產不僅包括測試的全生命周期中輸出的各種文檔數據,同時也包括測試團隊積累的測試經驗、技能和思維,比如某類項目中的一些共性功能、同類缺陷、測試策略等。

Table 1 Assets output during testing表1 測試過程中輸出的資產
本文主要通過研究測試資產實現測試用例復用,測試用例復用是軟件復用中的一種類型,軟件復用是為避免重復勞動、提高軟件質量和生產效率的解決方案[8]。根據軟件復用對象可分為兩類:產品復用和流程復用,產品復用指軟件開發過程中的需求規范、軟件設計、測試計劃、測試數據等,流程復用是使用可復用的應用生成器自動或者半自動復用開發過程并自動生成所需系統[9]。
測試用例設計是軟件測試過程中的重要環節,如何利用歷史項目的測試用例,指導新項目測試用例設計與執行,實現軟件測試用例復用是軟件測試復用的主要研究方向。在已有的一些測試資產中,測試大綱能夠體現出軟件需求與測試需求的關系,由于特征相似的需求具有相似的測試項,需提取測試大綱中測試需求建立測試用例資產庫。由于相似測試項對應的測試用例也具有一定的相似性,通過測試需求與測試用例之間的關系完成測試用例資產庫建設,作為測試用例復用的基礎。
測試需求與測試用例關聯最緊密,測試用例設計都是根據軟件軟件測試需求進行精心設計。軟件測試需求明確了測試過程中待解決的問題,在建立的測試用例資產庫中,測試需求應包含以下5 個屬性信息:需求項名稱表示為Name、所屬領域信息表示為Filed Information、需求描述表示為Description、需求類型Type、測試方法Method。因此,將測試需求(TR)表示為一個五元組:TR=
測試用例是指對一項特定的軟件產品進行測試任務描述,為某個特殊目標而編制的一組測試輸入、執行條件以及預期結果,用于核實是否滿足某個特定軟件需求。測試用例資產庫中,測試用例包括7 個屬性信息,測試用例名稱表示為Name、測試說明表示為Description、測試類型表示為Type、測試步驟表示為Process、前置條件表示為Precondition、預期結果表示為Excepted,測試需求追蹤表示為Requirement Link,因此測試用例(TC)可表示為一個七元組:TC=

Fig.1 Test case example圖1 測試用例示例
測試用例是檢驗測試過程是否有效的重要因素,設計良好的測試用例是測試工作的關鍵。同時,測試用例的編寫要求測試人員對產品設計及軟件需求相關知識有比較清晰的認知。歷史經驗表明,同一領域的測試項目往往遵循相同的行業規范、標準等,而同一類型軟件的使用場景、功能結構、性能要求等方面的需求存在很大相似性,因此具備了知識復用的基礎,進而可以根據項目之間的軟件特征信息、測試需求相似性計算實現測試用例復用。
研究表明,當兩個項目存在某種相似性時,其測試需求、測試用例、潛在問題等也應存在較大相似性,因此從軟件相似性角度研究測試用例復用。為了實現軟件測試用例復用,首先需要設計一個結構完整并具有一定規模的測試用例資產庫,并且建立測試用例與測試需求的關聯關系。在設計好的測試資產庫基礎上,按照一定的準則采取相應的技術對軟件特征、軟件測試需求、軟件測試用例進行處理,最終實現軟件測試用例的復用。本文設計軟件測試用例復用方法如圖2 所示。
首先,基于原有的軟件測試資產數據庫抽取測試用例、測試需求相關數據,形成測試用例資產庫。根據測試資產庫中表單數據結構,通過SQL 語言對歷史項目數據庫進行操作,提取軟件特征信息、測試需求、測試用例信息,并且根據需求追蹤表建立測試需求與測試用例之間的關聯關系,進行合理的分類、管理、維護,形成最初的測試資產庫。
其次,根據軟件特征信息檢索篩選候選集,根據軟件測試需求及測試人員輸入信息計算軟件信息之間的相似度,以相似度計算值作為測試用例推薦復用的參考指標。信息檢索采用從上至下的策略輸入軟件所屬領域、軟件類型、測試類型、測試方法,層層遞進獲取測試用例復用的候選集。相似度計算功能借助于Bert 詞向量模型,獲取測試相關數據向量表示,并通過計算兩個向量之間的距離評估它們的語義相似度。該步驟在測試資產庫的基礎上,利用檢索與相似度計算技術,選擇出了測試推薦復用的候選集。
最后,通過對測試人員輸入與測試需求等數據之間的相似度值進行綜合排序,選擇Top-K 進行推薦,實現對測試用例復用,測試人員根據實際需求對推薦的測試數據進行修改復用,并將新的測試用例入庫以便于后續模型的進一步完善。
2.2.1 詞向量模型
本文使用Bert 系列語言模型獲取軟件測試數據的詞向量表示作為相似度計算的基礎,語言模型的發展經歷了從統計語言模型到神經網絡語言模型的階段。早期的語言模型是預測某個文本序列在語言中出現的概率,并以此概率分布表示該文本序列。其中,在統計語言模型中最具代表性的就是N-gram 模型,它是一種典型的基于稀疏表示的語言模型。
2003 年,Bengio 等[10]提出了神經網絡語言模型,在得到語言模型的同時也產生了副產品詞向量。神經網絡語言模型將詞表中的單詞i映射為向量函數C(i)∈Rm,以此表示單詞的分布式向量表示(Distributed Feature Vectors),再通過一個函數將詞向量作為輸入序列(C(wt-n+1),…,C(wt-1))映射成下一個詞的概率分布。隨著神經網絡語言模型與詞向量的提出,后繼研究者提出了Word2Vec、Glove、Elmo、GPT、Bert 系列等語言模型。
Word2Vec 有兩種訓練方法:CBOW、Skip-gram[11],通過此方法將單詞表示為上下文無關的Static 詞向量,因此無法解決一詞多義的現象。Elmo 使用兩個獨立的單向Lstm實現根據上下文不同而獲取不斷變化的Dynamic 詞向量[12]。GPT 是一個生成式的預訓練模型[13],采用遠遠優于Lstm 的特征提取器Transformer。Bert 語言模型的文本特征抽取采用雙向的Transformer 結構,可以進一步增加詞向量模型泛化能力,充分描述字符級、詞級、句子級之間的關系特征。

Fig.2 Test case reuse method圖2 測試用例復用方法
2.2.2 相似度計算方法
本文實驗采用Bert 預訓練語言模型,Bert 語言模型訓練可分為預訓練與微調兩個過程。其中,Bert 的預訓練過程有兩個任務,分別是:MaskedLanguageModel(MLM)、Next Sequence Prediction(NSP)。MLM 過程中使用上下文預測中心詞信息獲取詞向量表示,NSP 通過數據學習上下句子是否是噪聲以增強句子之間的關系判斷能力。Bert 語言模型中適用于計算句子相似度的句子對任務結構如圖3 所示。

Fig.3 Bert sentence pair task structure圖3 Bert 句子對任務結構
本文針對相似度計算任務,構建了針對Bert 模型進行微調的訓練數據,訓練集數據格式為:{Sentence1、Sentence2、Label}。Label 標簽為0 和1,0 表示句子對不相關、1表示句子對相關或相似。通過收集一定數據量句子對,構造訓練數據的數據處理類,針對模型進行微調操作,強化模型在測試領域的適用性。
通過Bert 微調后的語言模型可以獲取到測試文本數據的向量表示,然后通過計算測試數據之間語義相似度衡量測試數據的相似程度。Bert 模型中可以將其分類任務改造成相似度計算問題,然后將CLS 對應的embedding 輸入到一個sigmoid 函數表示文本向量。但此種方式學到的向量并沒有多少的語義信息,不足以用作測試文本語句的向量表示,因此在獲取文本向量表示后使用相似度計算的方式計算語義相似性。常用的語義相似度計算方法有歐式距離、余弦距離、杰卡德相似度、海明距離,其中選擇余弦距離是最為常見的文本向量語義相似度算法。因此,本文選擇余弦距離計算兩個文本向量之間的夾角余弦值,其計算公式如式(1)所示。

其中,Dis表示文本之間相似度計算結果,取值范圍為[0,1],值越大表示相似性越高。
根據測試資產庫中測試需求、測試用例與測試輸入數據,本文設計測試文本數據相似度計算方法主要過程如下:
(1)根據新的測試項目輸入的特征信息,利用檢索技術獲取歷史庫中符合特征的軟件項目得到候選集1。
(2)在候選集1 中根據測試人員要求的測試階段、測試需求類型、測試方法等進一步選擇出候選集2。
(3)在候選集2 中,計算測試人員輸入的需求名稱、需求描述與候選集2 中測試數據之間的相似性,通過式(1)分別計算需求名稱之間的相似性SimNa、需求描述之間的相似性SimDe、需求描述與測試說明之間的相似性SimDe-De、需求描述與預期結果之間的相似性SimDe-Pre,然后通過加權求和得到最終的相似度如式(2)所示。

其中,參數c1、c2、c3、c44 種屬性相似度所占權重,根據測試人員的經驗可分別取值為0.3、0.3、0.2、0.2。
(4)利用式(2)計算并獲取測試人員輸入與歷史數據之間的相似性,根據相似性值的大小進行排序,選擇其中相似性值最高的6 條推薦給測試人員作為測試參考信息。
測試文本相似度計算過程偽代碼如下:

其中,item 表示歷史測試項目庫,λ 表示文本屬性相似度分配權值,f 表示新項目輸入的軟件特征,info 表示新測試輸入文本數據。
本次實驗使用實驗室積累的測試項目數據,包括幾種不同類型項目包括功能測試、接口測試、性能測試在內的數千條測試用例數集。為了評價測試用例復用效果,對某信息管理系統和指揮系統兩個不同類型的軟件系統進行測試。測試實驗過程中測試用例部分推薦信息如圖4 所示。
挑選4 位新手測試人員隨機分成AB 兩組,A 組人員不采用測試用例復用方法、B 組人員使用測試用例復用方法,統計用例設計效率即單位時間AB 兩組人員設計測試用例數以及評估測試用例質量。實驗中測試用例設計效率如表2 所示,通過統計發現,相比于傳統的測試用例設計,此方法測試用例設計效率提高近70%。

Fig.4 Recommended test case information圖4 推薦的測試用例信息

Table 2 Test case design efficiency statistics表2 測試用例設計效率統計
在測試用例復用過程中,B 組人員統計測試復用方法推薦6 條測試用例中有參考價值的用例數稱之為正確推薦用例數,計算推薦復用的準確率。實驗中測試用例推薦準確率如表3 所示,其中準確率計算公式如式(3)所示。

其中,N 表示測試項目需求的個數,ni表示根據每個需求推薦出的正確測試用例個數。實驗結果表明,此方法的用例推薦準確率均在60%以上。

Table 3 Test case recommendation accuracy rate statistics表3 測試用例推薦準確率統計
通過兩個不同類型項目對測試用例復用方法進行驗證,結果表明,基于Bert 的測試用例復用方法可以提高軟件測試用例設計效率。此外,通過專業測試人員對AB 兩組的測試用例評估發現,B 組設計的測試用例具有更好的可理解性與可維護性,提升了測試用例質量。同時,通過B 組人員統計出的結果表明,測試用例推薦的準確率能夠滿足測試人員要求。
本文將歷史測試項目的測試需求、測試用例等數據進行有效組織與利用,使用測試文本數據對Bert 語言模型進行微調,獲取到測試數據語義向量表示,以此計算測試文本語義相似性從而實現測試用例復用,提高了測試用例設計效率與測試用例質量。后續工作中,將采用一種孿生網絡結構[14],結合Bert 系列語言模型研究相似度計算參數的最優取值以提升測試用例復用效果。同時,通過提取關鍵詞[15]用于測試推薦,進一步提升測試用例推薦復用準確性。