王廷永 黃松
摘? 要: 眾包測試是一種新興的軟件測試模式,具有測試周期短、測試成本低的優點。但是在眾包測試中也存在測試人員水平不一、無法形成規范化測試用例的問題。文章提出一種基于操作記錄的GUI軟件測試用例生成方法,該方法將測試人員操作記錄轉化為規范化測試用例。實驗結果表明,相對于手工測試生成的測試用例,該方法生成的測試用例在缺陷檢測方面有顯著的提高。
關鍵詞: 眾包測試; 操作記錄; 測試用例生成
中圖分類號:TP391.1? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2022)03-27-05
Abstract: Crowdsourced testing is a new software testing mode, which has the advantages of short testing cycle and low testing cost. However, in the crowdsourced testing, there is a problem that testers are not at the same level and cannot form standardized test cases. Therefore, this paper proposes a method for generating GUI software test case by using operational record, which transforms the operation records of testers into standardized test cases. Experimental results show that compared with manual generated test cases, the test cases generated by this method have significant improvement in defect detection.
Key words: crowdsourced testing; operational record; test case generation
0 引言
軟件的規模日益龐大,傳統手工測試效率低,已經無法滿足軟件日益增長的測試需求。眾包測試(簡稱眾測)作為一種新興的測試模式,與傳統手工測試相比有著測試周期短、測試成本低以及測試全面等優勢[1],盡管如此,眾測也存在一定不足。例如眾測過程無法直接產出類似測試用例的測試資產,且測試人員的頻繁變動也使得測試經驗難以收集和復用。目前針對眾測過程中測試用例生成的研究主要有利用Github網站Issue反饋平臺上讓有能力的用戶完成測試用例的設計和維護[2], 以及將眾測任務分解為微任務再分發給測試人員,測試人員直接撰寫測試用例等[3]。以上研究雖然能夠減少測試用例設計與維護等的測試開銷,但是這些方法缺乏通用性,同時對測試人員水平要求較高。因此開展眾測場景下通用性更強的測試用例生成研究很有必要。
GUI軟件測試在眾測中占有較大比例,與基于軟件源代碼的測試用例生成方法[4]及基于軟件開發文檔的測試用例生成方法[5]相比,眾測更適用于基于用戶操作記錄的測試用例生成方法。基于用戶操作記錄的測試用例生成方法以眾測人員的操作記錄作為生成測試用例的數據來源,對測試人員編程和撰寫測試用例能力要求較低,可以有效降低測試成本和測試門檻問題。
然而,由于眾測人員的背景、專業技能和個人水平不同,測試過程也存在差異,導致眾測環境下獲得的測試步驟不夠統一,操作記錄也往往存在較多冗余。
基于以上分析,本文提出了一種利用眾測操作記錄生成GUI軟件測試用例的方法。該方法首先對操作記錄進行優化,然后利用目標檢測方法提取操作目標UI組件,最后就可以生成規范化測試用例。實驗結果證明了本文所提方法的有效性與實用性。
1 操作記錄優化算法
1.1 操作記錄分類
在獲取眾測過程中測試人員的操作記錄之前,要定義操作記錄格式。在GUI軟件測試中,測試人員主要通過鼠標和鍵盤與待測軟件進行交互。因此一個完整的操作記錄應當包含測試人員測試行為的簡單描述,例如用戶使用鼠標點擊待測軟件某個位置的按鈕時,可以把與測試行為相對應的待測軟件截圖作為操作行為的直接證明保存下來。圖1展示本文獲取的真實開源軟件knowte的操作記錄實例,此實例不僅包含操作行為文本描述、時間信息,坐標信息等信息,還包含操作行為對應的待測軟件實時截圖。
由于測試過程中不可避免會產生冗余操作,這些冗余操作雖然不會降低眾測工人的測試質量,但會導致最終操作記錄過于繁瑣,影響后續測試用例生成質量,因此獲取的眾測操作還無法直接作為生成測試用例的數據來源。盡管不同測試人員的冗余操作各不相同,但關鍵操作對應的操作信息卻是相似的,因此本文通過分類方法實現對冗余操作和關鍵操作區分。由于無法獲取操作所對應的標簽,也難以針對全部類型的測試操作進行人工標注,因此本文采用無監督分類方式。在操作信息中以待測軟件截圖作為操作記錄的直接證明,同一個操作行為對應的待測軟件截圖總是相似的,因此可以通過對待測軟件的截圖進行聚類操作實現對冗余和關鍵操作的劃分,聚類完成后每個類別包含著測試環節中必要的操作記錄的有效描述。
本文采用層次聚類方法對操作記錄包含的待測軟件截圖進行分類解決上述問題。具體步驟如下。
⑴ 待測軟件截圖的數據預處理。主要包含去除異常圖片,比如截圖失敗和截圖未完成圖像等,以及對數據進行歸一化處理。
⑵ 基于深度學習的特征提取。使用基于ResNet50的方法對待測軟件截圖進行特征提取。
⑶ 基于聚類的操作截圖分類。相比其他聚類算法對類別數量設置較為敏感,層次聚類算法無需設置類別數量,聚類效果穩定,更適合類別未知的待測軟件截圖分類。
1.2 目標UI組件識別
本文旨在生成可讀性好的測試用例,將操作記錄直接用于測試用例會導致其操作步驟的目標UI組件不明確,冗余信息過多等問題,因此本文提出了一種基于目標檢測的UI組件提取方法,并將其用于測試用例生成。
1.2.1 UI組件區域劃分
UI組件之間存在類間方差較大、類間相似度高、元素間緊湊、元素組成復雜,以及區域檢測精度高的問題,因此將基于深度學習的目標檢測算法應用于UI組件檢測會導致檢測組件邊框精度與檢測組件精度無法達到較好平衡[4],而傳統區域檢測能夠避免這種問題。基于上述原因,此階段使用一種基于傳統圖像的處理方式,如圖2所示,使用基于傳統洪水填充算法來獲得具有相似顏色的最大區域,然后使用形狀識別確定矩形區域。每個矩形區域視為一個塊,最后使用輪廓跟蹤算法區分GUI元素邊界。如圖2所示,上半部分是經過洪水填充后的截圖,下半部分是在上半部分基礎使用輪廓跟蹤算法實現的區域劃分。
1.2.2 匹配區域
包含坐標位置的最小UI組件是響應事件的UI組件,因此可根據操作對應事件發生的坐標信息匹配最近UI組件,將其作為候選目標UI組件。
1.2.3 CNN分類
為確定候選UI組件的類別,本文采用CNN模型進行UI組件分類。基于Rico數據集[5]預訓練的ResNet50模型分類器可識別十種UI組件,包括按鈕、單選框、多選框等UI組件,如圖3所示。
1.2.4 計算UI組件最大相似集
盡管對操作記錄進行聚類處理,但是無法保證分類完全準確。將最大相似UI集作為此類的真正目標UI組件可減少聚類誤差帶來的影響。本文采用基于圖論的最大完全子集理論并結合基于孿生網絡的圖像相似度算法構建最大相似集。
設給定無向圖[G(V,E)],其中[V]為非空集合,稱為頂點集;[E]為[V]中元素構成的無序二元組集合,稱為邊集。無向圖中邊均為頂點的無序對。令[U]為[V]的一個子集,則稱[U]是[G]的完全子圖,當[U]達到最大時,則稱[U]為最大完全子圖。構建候選目標UI組件為頂點的無向圖[G],如果兩個UI組件[(u,v)]之間相似度不低于相似閾值,則有[(u,v)∈E]。因此[E]的最大完全子集為UI組件數據集中最大相似集,相似度計算采用基于孿生網絡的圖像相似度算法,孿生網絡結構如圖4所示。
其中[X1,X2]代表輸入的候選UI組件圖像,[Gw]表示輸入圖像[X]經過特征網絡后的特征向量,[w]表示共享權值,[Ew]代表兩個候選UI組件之間距離,損失函數如下:
1.2.5 判斷最大相似集比例
在獲取最大相似集比例后,如果最大相似集占該類中所有目標UI組件比例超出0.5,即可認為此最大相似集可作為此類的目標UI組件。
2 測試用例生成方法
在獲取每個類所對應的目標UI組件后,結合每個對應操作的相對平均時間,以時間先后組織操作記錄完成測試用例。本文將測試人員的測試操作劃分為鼠標事件與鍵盤事件。鼠標事件又分為鼠標左鍵單擊,鼠標右鍵單擊,鼠標左鍵雙擊,鼠標右鍵雙擊,鼠標拖拽與鼠標滾動事件共六個鼠標事件。鍵盤事件分為鍵盤按下與鍵盤釋放兩個鍵盤事件。測試用例中測試步驟包含測試人員觸發事件的簡單描述,最終生成的測試用例如圖5所示。
3 實驗驗證
3.1 實驗設置
為驗證本文所提方法的有效性,本文選取四款不同的開源GUI軟件作為實驗對象。其中Knowte是一款Windows 10平臺的本地化、輕量級記事本軟件;Ktplayer是一款JavaFx風格的開源本地音樂播放軟件;PDFsam是一款Windows平臺的PDF分割合并的軟件,OmegaT是一款Windows平臺的計算機翻譯工具。四款開源GUI軟件詳細信息如表1所示。實驗過程中招募10名專業背景與專業水平不一的測試人員,模擬真實眾測場景,完成測試任務并收集測試人員完成對應測試任務的操作記錄。共收集2470份操作記錄,通過層次聚類算法并結合CNN特征提取方法對2470份操作記錄優化,然后對優化后的操作記錄進行目標UI組件識別,最終生成420份測試用例,經過人工審核,篩選出378份測試用例作為最終結果。
3.2 結果與分析
由于現有眾測場景下測試用例生成研究較少,尚未提出專門針對眾測場景的測試用例生成方法,文獻[3]提出的評估方法更多從眾測參與方面進行評估如測試人員參與度,測試過程消耗時間等。本研究通過[APFD]值[6-7]來度量本文生成測試用例與相同數量手工測試的測試用例的缺陷檢測能力來驗證本文方法的有效性。[APFD]的具體計算公式如下:
其中,[n]表示測試用例數,[m]為發現缺陷數,[TFi]表示發現第[i]個缺陷所需測試用例數,[APFD]值域為[[0,1]],其值越高,則說明測試用例的缺陷檢測能力越好。本文所提方法與手工測試生成的測試用例的[APFD]情況對比如圖6所示。
實驗結果顯示,在Knowte、PDFsam以及OmegaT的測試中,本文所提出方法生成的測試用例缺陷檢測能力要高于專業測試人員的手工測試設計的測試用例,而在Ktplayer這款開源的JavaFx風格的本地音樂軟件上,本方法生成測試用例缺陷檢測能力要低于手工測試,這是因為Ktplayer功能單一,參數變化較少,且本文生成較多重復的測試用例。但總體來說實驗結果證明了本文所提方法的有效性。
4 結束語
由于測試用例是測試過程中重要的測試資產,對測試經驗收集和有效利用至關重要,同時可以拓展測試范圍,發現更多缺陷。但是目前眾測場景下測試用例研究較少,且現有研究通用性較弱。本文提出的基于眾測操作記錄的GUI軟件測試用例生成方法,通過操作記錄優化、目標UI組件提取來生成測試用例。實驗結果表明,借助眾測測試人員的操作記錄,能夠有效為測試用例生成提供數據來源,并且生成的測試用例在檢測缺陷能力上強于單一手工測試,能夠有效提高測試效率,為獲得眾測測試資產提供一種新方法。
參考文獻(References):
[1] 章曉芳,馮洋,劉頔,等.眾包軟件測試技術研究進展[J].軟件學報,2018,29(1):69-88
[2] Pham R, Singer L, Schneider K. Building test suites in social coding sites by leveraging drive-by commits[C]//2013 35th International Conference on Software Engineering (ICSE). IEEE,2013:1209-1212
[3] Chen N, Kim S. Puzzle-based automatic testing: Bringing humans into the loop by solving puzzles[C]//2012 Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering. IEEE,2012:140-149
[4] Damia A H, Esnaashari M M. Automated Test Data Generation Using a Combination of Firefly Algorithm and Asexual Reproduction Optimization Algorithm[J]. International Journal of Web Research,2020,3(1):19-28
[5] Veera P,? Prasad P,? Chikkamath M, et al. Req2Test-Graph Driven Test Case Generation for Domain Specific Requirement,2018
[6] Chen J, Xie M, Xing Z, et al. Object detection for graphical user interface: old fashioned or deep learning or a combination?[C]//Proceedings of the 28th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering,2020:1202-1214
[7] Deka B, Huang Z, Franzen C, et al. Rico: A mobile app dataset for building data-driven design applications[C]//Proceedings of the 30th Annual ACM Symposium on User Interface Software and Technology,2017:845-854
[8] 張娜,姚瀾,包曉安,等.多目標優化的測試用例優先級在線調整策略[J].軟件學報,2015,26(10):2451-2464
[9] 公茂果,焦李成,楊咚咚,等.進化多目標優化算法研究[J].軟件學報,2009,20(2):271-289