王廷永 黃松
摘? 要: 眾包測試是一種新興的軟件測試模式,具有測試周期短、測試成本低的優(yōu)點。但是在眾包測試中也存在測試人員水平不一、無法形成規(guī)范化測試用例的問題。文章提出一種基于操作記錄的GUI軟件測試用例生成方法,該方法將測試人員操作記錄轉(zhuǎn)化為規(guī)范化測試用例。實驗結(jié)果表明,相對于手工測試生成的測試用例,該方法生成的測試用例在缺陷檢測方面有顯著的提高。
關(guān)鍵詞: 眾包測試; 操作記錄; 測試用例生成
中圖分類號:TP391.1? ? ? ? ? 文獻標(biāo)識碼: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 引言
軟件的規(guī)模日益龐大,傳統(tǒng)手工測試效率低,已經(jīng)無法滿足軟件日益增長的測試需求。眾包測試(簡稱眾測)作為一種新興的測試模式,與傳統(tǒng)手工測試相比有著測試周期短、測試成本低以及測試全面等優(yōu)勢[1],盡管如此,眾測也存在一定不足。例如眾測過程無法直接產(chǎn)出類似測試用例的測試資產(chǎn),且測試人員的頻繁變動也使得測試經(jīng)驗難以收集和復(fù)用。目前針對眾測過程中測試用例生成的研究主要有利用Github網(wǎng)站Issue反饋平臺上讓有能力的用戶完成測試用例的設(shè)計和維護[2], 以及將眾測任務(wù)分解為微任務(wù)再分發(fā)給測試人員,測試人員直接撰寫測試用例等[3]。以上研究雖然能夠減少測試用例設(shè)計與維護等的測試開銷,但是這些方法缺乏通用性,同時對測試人員水平要求較高。因此開展眾測場景下通用性更強的測試用例生成研究很有必要。
GUI軟件測試在眾測中占有較大比例,與基于軟件源代碼的測試用例生成方法[4]及基于軟件開發(fā)文檔的測試用例生成方法[5]相比,眾測更適用于基于用戶操作記錄的測試用例生成方法。基于用戶操作記錄的測試用例生成方法以眾測人員的操作記錄作為生成測試用例的數(shù)據(jù)來源,對測試人員編程和撰寫測試用例能力要求較低,可以有效降低測試成本和測試門檻問題。
然而,由于眾測人員的背景、專業(yè)技能和個人水平不同,測試過程也存在差異,導(dǎo)致眾測環(huán)境下獲得的測試步驟不夠統(tǒng)一,操作記錄也往往存在較多冗余。
基于以上分析,本文提出了一種利用眾測操作記錄生成GUI軟件測試用例的方法。該方法首先對操作記錄進行優(yōu)化,然后利用目標(biāo)檢測方法提取操作目標(biāo)UI組件,最后就可以生成規(guī)范化測試用例。實驗結(jié)果證明了本文所提方法的有效性與實用性。
1 操作記錄優(yōu)化算法
1.1 操作記錄分類
在獲取眾測過程中測試人員的操作記錄之前,要定義操作記錄格式。在GUI軟件測試中,測試人員主要通過鼠標(biāo)和鍵盤與待測軟件進行交互。因此一個完整的操作記錄應(yīng)當(dāng)包含測試人員測試行為的簡單描述,例如用戶使用鼠標(biāo)點擊待測軟件某個位置的按鈕時,可以把與測試行為相對應(yīng)的待測軟件截圖作為操作行為的直接證明保存下來。圖1展示本文獲取的真實開源軟件knowte的操作記錄實例,此實例不僅包含操作行為文本描述、時間信息,坐標(biāo)信息等信息,還包含操作行為對應(yīng)的待測軟件實時截圖。
由于測試過程中不可避免會產(chǎn)生冗余操作,這些冗余操作雖然不會降低眾測工人的測試質(zhì)量,但會導(dǎo)致最終操作記錄過于繁瑣,影響后續(xù)測試用例生成質(zhì)量,因此獲取的眾測操作還無法直接作為生成測試用例的數(shù)據(jù)來源。盡管不同測試人員的冗余操作各不相同,但關(guān)鍵操作對應(yīng)的操作信息卻是相似的,因此本文通過分類方法實現(xiàn)對冗余操作和關(guān)鍵操作區(qū)分。由于無法獲取操作所對應(yīng)的標(biāo)簽,也難以針對全部類型的測試操作進行人工標(biāo)注,因此本文采用無監(jiān)督分類方式。在操作信息中以待測軟件截圖作為操作記錄的直接證明,同一個操作行為對應(yīng)的待測軟件截圖總是相似的,因此可以通過對待測軟件的截圖進行聚類操作實現(xiàn)對冗余和關(guān)鍵操作的劃分,聚類完成后每個類別包含著測試環(huán)節(jié)中必要的操作記錄的有效描述。
本文采用層次聚類方法對操作記錄包含的待測軟件截圖進行分類解決上述問題。具體步驟如下。
⑴ 待測軟件截圖的數(shù)據(jù)預(yù)處理。主要包含去除異常圖片,比如截圖失敗和截圖未完成圖像等,以及對數(shù)據(jù)進行歸一化處理。
⑵ 基于深度學(xué)習(xí)的特征提取。使用基于ResNet50的方法對待測軟件截圖進行特征提取。
⑶ 基于聚類的操作截圖分類。相比其他聚類算法對類別數(shù)量設(shè)置較為敏感,層次聚類算法無需設(shè)置類別數(shù)量,聚類效果穩(wěn)定,更適合類別未知的待測軟件截圖分類。
1.2 目標(biāo)UI組件識別
本文旨在生成可讀性好的測試用例,將操作記錄直接用于測試用例會導(dǎo)致其操作步驟的目標(biāo)UI組件不明確,冗余信息過多等問題,因此本文提出了一種基于目標(biāo)檢測的UI組件提取方法,并將其用于測試用例生成。
1.2.1 UI組件區(qū)域劃分
UI組件之間存在類間方差較大、類間相似度高、元素間緊湊、元素組成復(fù)雜,以及區(qū)域檢測精度高的問題,因此將基于深度學(xué)習(xí)的目標(biāo)檢測算法應(yīng)用于UI組件檢測會導(dǎo)致檢測組件邊框精度與檢測組件精度無法達到較好平衡[4],而傳統(tǒng)區(qū)域檢測能夠避免這種問題?;谏鲜鲈?,此階段使用一種基于傳統(tǒng)圖像的處理方式,如圖2所示,使用基于傳統(tǒng)洪水填充算法來獲得具有相似顏色的最大區(qū)域,然后使用形狀識別確定矩形區(qū)域。每個矩形區(qū)域視為一個塊,最后使用輪廓跟蹤算法區(qū)分GUI元素邊界。如圖2所示,上半部分是經(jīng)過洪水填充后的截圖,下半部分是在上半部分基礎(chǔ)使用輪廓跟蹤算法實現(xiàn)的區(qū)域劃分。
1.2.2 匹配區(qū)域
包含坐標(biāo)位置的最小UI組件是響應(yīng)事件的UI組件,因此可根據(jù)操作對應(yīng)事件發(fā)生的坐標(biāo)信息匹配最近UI組件,將其作為候選目標(biāo)UI組件。
1.2.3 CNN分類
為確定候選UI組件的類別,本文采用CNN模型進行UI組件分類?;赗ico數(shù)據(jù)集[5]預(yù)訓(xùn)練的ResNet50模型分類器可識別十種UI組件,包括按鈕、單選框、多選框等UI組件,如圖3所示。
1.2.4 計算UI組件最大相似集
盡管對操作記錄進行聚類處理,但是無法保證分類完全準(zhǔn)確。將最大相似UI集作為此類的真正目標(biāo)UI組件可減少聚類誤差帶來的影響。本文采用基于圖論的最大完全子集理論并結(jié)合基于孿生網(wǎng)絡(luò)的圖像相似度算法構(gòu)建最大相似集。
設(shè)給定無向圖[G(V,E)],其中[V]為非空集合,稱為頂點集;[E]為[V]中元素構(gòu)成的無序二元組集合,稱為邊集。無向圖中邊均為頂點的無序?qū)?。令[U]為[V]的一個子集,則稱[U]是[G]的完全子圖,當(dāng)[U]達到最大時,則稱[U]為最大完全子圖。構(gòu)建候選目標(biāo)UI組件為頂點的無向圖[G],如果兩個UI組件[(u,v)]之間相似度不低于相似閾值,則有[(u,v)∈E]。因此[E]的最大完全子集為UI組件數(shù)據(jù)集中最大相似集,相似度計算采用基于孿生網(wǎng)絡(luò)的圖像相似度算法,孿生網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
其中[X1,X2]代表輸入的候選UI組件圖像,[Gw]表示輸入圖像[X]經(jīng)過特征網(wǎng)絡(luò)后的特征向量,[w]表示共享權(quán)值,[Ew]代表兩個候選UI組件之間距離,損失函數(shù)如下:
1.2.5 判斷最大相似集比例
在獲取最大相似集比例后,如果最大相似集占該類中所有目標(biāo)UI組件比例超出0.5,即可認為此最大相似集可作為此類的目標(biāo)UI組件。
2 測試用例生成方法
在獲取每個類所對應(yīng)的目標(biāo)UI組件后,結(jié)合每個對應(yīng)操作的相對平均時間,以時間先后組織操作記錄完成測試用例。本文將測試人員的測試操作劃分為鼠標(biāo)事件與鍵盤事件。鼠標(biāo)事件又分為鼠標(biāo)左鍵單擊,鼠標(biāo)右鍵單擊,鼠標(biāo)左鍵雙擊,鼠標(biāo)右鍵雙擊,鼠標(biāo)拖拽與鼠標(biāo)滾動事件共六個鼠標(biāo)事件。鍵盤事件分為鍵盤按下與鍵盤釋放兩個鍵盤事件。測試用例中測試步驟包含測試人員觸發(fā)事件的簡單描述,最終生成的測試用例如圖5所示。
3 實驗驗證
3.1 實驗設(shè)置
為驗證本文所提方法的有效性,本文選取四款不同的開源GUI軟件作為實驗對象。其中Knowte是一款Windows 10平臺的本地化、輕量級記事本軟件;Ktplayer是一款JavaFx風(fēng)格的開源本地音樂播放軟件;PDFsam是一款Windows平臺的PDF分割合并的軟件,OmegaT是一款Windows平臺的計算機翻譯工具。四款開源GUI軟件詳細信息如表1所示。實驗過程中招募10名專業(yè)背景與專業(yè)水平不一的測試人員,模擬真實眾測場景,完成測試任務(wù)并收集測試人員完成對應(yīng)測試任務(wù)的操作記錄。共收集2470份操作記錄,通過層次聚類算法并結(jié)合CNN特征提取方法對2470份操作記錄優(yōu)化,然后對優(yōu)化后的操作記錄進行目標(biāo)UI組件識別,最終生成420份測試用例,經(jīng)過人工審核,篩選出378份測試用例作為最終結(jié)果。
3.2 結(jié)果與分析
由于現(xiàn)有眾測場景下測試用例生成研究較少,尚未提出專門針對眾測場景的測試用例生成方法,文獻[3]提出的評估方法更多從眾測參與方面進行評估如測試人員參與度,測試過程消耗時間等。本研究通過[APFD]值[6-7]來度量本文生成測試用例與相同數(shù)量手工測試的測試用例的缺陷檢測能力來驗證本文方法的有效性。[APFD]的具體計算公式如下:
其中,[n]表示測試用例數(shù),[m]為發(fā)現(xiàn)缺陷數(shù),[TFi]表示發(fā)現(xiàn)第[i]個缺陷所需測試用例數(shù),[APFD]值域為[[0,1]],其值越高,則說明測試用例的缺陷檢測能力越好。本文所提方法與手工測試生成的測試用例的[APFD]情況對比如圖6所示。
實驗結(jié)果顯示,在Knowte、PDFsam以及OmegaT的測試中,本文所提出方法生成的測試用例缺陷檢測能力要高于專業(yè)測試人員的手工測試設(shè)計的測試用例,而在Ktplayer這款開源的JavaFx風(fēng)格的本地音樂軟件上,本方法生成測試用例缺陷檢測能力要低于手工測試,這是因為Ktplayer功能單一,參數(shù)變化較少,且本文生成較多重復(fù)的測試用例。但總體來說實驗結(jié)果證明了本文所提方法的有效性。
4 結(jié)束語
由于測試用例是測試過程中重要的測試資產(chǎn),對測試經(jīng)驗收集和有效利用至關(guān)重要,同時可以拓展測試范圍,發(fā)現(xiàn)更多缺陷。但是目前眾測場景下測試用例研究較少,且現(xiàn)有研究通用性較弱。本文提出的基于眾測操作記錄的GUI軟件測試用例生成方法,通過操作記錄優(yōu)化、目標(biāo)UI組件提取來生成測試用例。實驗結(jié)果表明,借助眾測測試人員的操作記錄,能夠有效為測試用例生成提供數(shù)據(jù)來源,并且生成的測試用例在檢測缺陷能力上強于單一手工測試,能夠有效提高測試效率,為獲得眾測測試資產(chǎn)提供一種新方法。
參考文獻(References):
[1] 章曉芳,馮洋,劉頔,等.眾包軟件測試技術(shù)研究進展[J].軟件學(xué)報,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] 張娜,姚瀾,包曉安,等.多目標(biāo)優(yōu)化的測試用例優(yōu)先級在線調(diào)整策略[J].軟件學(xué)報,2015,26(10):2451-2464
[9] 公茂果,焦李成,楊咚咚,等.進化多目標(biāo)優(yōu)化算法研究[J].軟件學(xué)報,2009,20(2):271-289