基于众测操作记录的GUI软件测试用例生成

2022-03-21 20:32王廷永黄松
计算机时代 2022年3期

王廷永 黄松

摘  要: 众包测试是一种新兴的软件测试模式,具有测试周期短、测试成本低的优点。但是在众包测试中也存在测试人员水平不一、无法形成规范化测试用例的问题。文章提出一种基于操作记录的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