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