Page 6 - 《软件学报》2020年第12期
P. 6
3672 Journal of Software 软件学报 Vol.31, No.12, December 2020
evaluated based on the test cases, which were used in the literature of mobile application testing in recent years. The results show that the
proposed approach is significantly effective with little labor cost in GUI testing of mobile applications.
Key words: sketch guided test generation; model based test automation; mobile applications; graphical user interface testing
随着移动设备的普及,移动应用程序获得了广泛使用,截至 2019 年 6 月,Google Play 上的移动应用已超过
[1]
270 万 .目前,这些移动应用程序已普及到教育、医疗、金融、通信等各行各业,深刻影响着人们的生产和生活.
如何对这些应用程序进行有效测试,以保障其安全性和可靠性,是软件工程领域的一个重要研究课题.
现有移动应用程序常以丰富的图形界面元素作为其人机交互基础,以达到使用简便直观的目的.但与此同
时,丰富的图形界面元素增加了软件测试的难度.现有的图形界面测试方法以测试脚本为载体来描述应用程序
运行过程中图形界面所接收的事件序列.按照脚本的生成方式,主要分为两类:第 1 类方法以人工直接编写测试
脚本来完成图形界面的软件测试,该方法对测试人员的专业性要求较高,且在测试脚本数量较多的情况下需要
大量的人力成本;第 2 类方法采用录制回放的方式,在测试者使用软件的过程中记录下图形界面的事件序列,并
以此来构建测试脚本,用于对应软件事件序列的回放测试.尽管该方法降低了对测试人员的专业性要求,但由于
每次应用程序的执行过程仅能录制与回放程序中的一条执行路径,测试者须反复运行与录制该应用程序,以达
到较高的测试覆盖率.对于现实中界面复杂的应用程序测试,这样的录制过程仍然需要大量的人力成本.
近年来,为了减轻测试人员在测试过程中繁重的手工操作,研究人员提出了多种针对图形化界面的测试用
例自动生成技术 [2−5] .这些技术本质上都在试图自动探索待测应用程序中所有可能的事件组合,并记录相应的
测试事件序列.但由于实际应用程序的图形化界面往往层次较多且逻辑复杂,所以其相应的搜索空间很大,相应
的测试事件序列生成会存在组合爆炸等问题.以 Memon 等学者 [6,7] 提出的模型驱动图形界面自动化测试生成方
法为例,它首先根据待测应用程序来构建一张事件流图(event flow graph,简称 EFG),再通过遍历图上的所有可
达事件路径生成相应的测试脚本.而在实际运行过程中,对于搜索空间较大的复杂应用程序,构建事件流图模型
的过程非常耗时,且由于生成的事件流图复杂,其组合路径和对应的事件序列数量巨大.因此,根据用户意图提
[5]
供一种削减其搜索空间而获得有效测试用例的方法在这一背景下显得非常必要.Choi 等学者 进一步提出了
一种基于机器学习算法的图形界面自动化测试生成技术,称为 SwiftHand,该方案以尽可能少的程序重启执行次
数作为机器学习的目标,以达到在短时间内实现较高测试覆盖这一目的.然而,有些程序错误可能会隐藏在复杂
程序界面的组合逻辑中,仅仅从测试用例搜索空间中获取程序重启次数少的测试脚本,并不一定能完全满足移
动应用程序的界面测试要求.
本文通过提出一种基于手绘的图形界面测试用例生成方法来解决这些问题.在本文中,我们定义了一种简
单直观且具有较强表达能力的手绘测试语言.测试人员仅需按照该语言定义的语法,在待测应用程序的界面图
像上做简单绘制,即可准确表达其测试意图.本文框架会将这些绘制的元素图形自动转换成测试模型,并高效生
成符合要求的测试用例.由于用户的手绘图形明确定义了当前的测试意图,因此本文方法不需要对所有可能的
事件组合进行遍历,从而使得生成的测试用例更为有效且具有针对性.
图 1 展示了手机游戏弹弹堂的一个测试场景示例.在该场景下,用户希望右侧导弹以不同的角度和力度打
出时,测试对应的界面元素是否存在错误.尽管该场景的界面动作并不复杂,但不同的角度和力度的组合数量很
多,手工测试方法难以满足该场景的测试要求.全自动的测试脚本生成由于缺少用户的测试意图信息,会尝试遍
历界面中所有控件的可能事件组合(例如背景树叶拖动事件、火车上的其他界面控件等等),从而造成搜索空间
过大,难以完成有效测试.本文定义了一种简单直观的手绘测试语言来帮助测试者表达其测试意图.在该测试场
景下,用户仅需寥寥几笔绘制 3 个元素图形(如图 1(b)所示),即可完整表达其测试意图.首先,用户将绘制一个蓝
色的动作元素用于声明一个拖拽动作,表示当前希望测试导弹的拖拽;其次,用户绘制一个紫色的范围元素,表
示拖拽动作的终止位置将在紫色区域选定的范围内;最终,用户将绘制一个红色的存在量词,表示测试是否存在
不满足测试目标的动作序列.一般来说,用户需要额外指定本次测试的测试目标.如不指定,默认测试目标为是
否发生软件错误(如程序崩溃等).本文框架将用户手绘的图形转换成抽象事件流图(abstract event flow graph,简
称 AEFG).作为测试模型,抽象事件流图中刻画了满足测试意图的所有动作序列,在本示例中即为满足范围要求