南京大学智能软件工程实验室
iselab.cn
摘要
介绍
近年来,众包测试已经成为一个研究热点,尤其是在移动测试方向。由于众包工作人员可以在自己的设备上测试Android应用程序,因此著名的Android碎片化问题可以通过众包测试在一定程度上得到缓解。越来越多的众包测试平台出现,并为持续的GUI测试、可用性测试和oracle问题提供在线大规模服务。
为了解决上述问题,我们实现了一个工具MoYe来改进众包测试。MoYe首先利用动态自动测试技术构建了一个窗口转换图(WTG)模型,该模型提供了可疑bug的注释。此外,MoYe使用静态分析技术来增强WTG模型。然后,MoYe根据WTG模型生成测试任务,并建立推荐模型,为群组工作人员分配不同的测试任务。该模型基于协同过滤算法,依赖于异常类型、事件类型等特征实现了任务推荐功能,基于广度优先遍历策略,MoYe计算当前活动窗口到测试任务窗口的转换路径,并指导工作人员实时完成测试任务。
MoYe工具
如图1所示,MoYe的工作过程如下:(1)MoYe建立了WTG模型,描述了不同窗口之间的转换,并对动态测试发现的可疑错误进行了注释。(2)根据WTG模型生成的测试任务,MoYe通过协同过滤算法为群组工作人员推荐测试任务。(3)从当前活动窗口开始,MoYe计算测试任务窗口的路径,通过该路径,工作人员完成任务以验证可疑的错误或探索新的错误。
图1:MoYe的流程图
1.窗口转换图
WTG模型表示为有向图结构,定义为G=(W,E,?)。这里我们使用W和E来表示窗口和事件的集合。窗口是指Android应用程序中的活动、对话框或菜单。事件是指小部件事件或默认事件。窗口小部件事件是e=[v,t,s],其中v是窗口中的窗口小部件(例如,v可以是按钮),t是事件类型(例如,t可以是单击),s是事件发生时的时间戳(例如,s可以是单击按钮时的时间)。默认事件将表示为e=[w,t,s],其中w是当前活动的窗口,t={返回,旋转,主页,节能,菜单}描述五种类型的默认事件,s是时间戳。边e=w1→w2表示由于特定事件导致的窗口转换。窗口w1表示事件的开始窗口,w2表示事件的结束窗口。标签?:?(e)={普通窗口转换、异常窗口转换、未覆盖窗口转换}表示不同的事件导致不同的窗口转换。
在自动化测试的指导下,MoYe在Android应用程序中收集运行时异常。根据异常日志中的时间戳,MoYe在WTG模型中找到相应的事件。通过在WTG模型中设置?(e)={异常窗口跳转},MoYe用可疑的bug来注释相关的窗口转换,而这些bug是群组工作人员需要复制和验证的。对于没有触发任何异常的事件,MoYe设置?(e)={普通窗口跳转},这表示不需要手动测试相关的窗口转换。基于静态分析技术,MoYe生成新的自动测试未覆盖的窗口转换,将对应边添加到WTG模型的有向图中,并设置?(e)={未覆盖的窗口转换},这有助于众包工人探索新的bug。
2. 生成测试任务
在MoYe中有两种测试任务。对于注释有可疑错误的异常窗口转换,我们应该找到与异常相关的事件序列。从触发异常的边缘e0开始,我们在WTG模型中收集一些连接到e0的边。将选择满足相应时间戳小于并且最接近e0的条件的边e1。取e1,e2。. . ,em-1分别作为起始边,并重复上述操作,我们附加m个不同的边来创建路径p=e0,e1,…,em并通过该路径生成测试用例。众包工人应该执行测试用例来手动验证可疑的bug。对于未覆盖的窗口转换,众包工人只需自由测试,不需要重现bug。
3. 测试任务推荐模型
基于项目的协同过滤算法根据用户的历史偏好预测用户对项目的偏好程度。MoYe利用该算法建立了一个测试任务推荐模型,该模型可以帮助众包工人从大量的测试任务中找到感兴趣的任务。对于不易发现代表性属性的窗口转换,MoYe在推荐任务时采用随机策略。本节中的以下方法适用于异常的窗口转换。
3.1 冷启动
冷启动是在将新的众包工人或新的测试用例添加到平台时,模型中必须面对的问题。首先,MoYe研究了新工人冷起动的解决方案。MoYe根据这些测试用例触发的异常类型对测试用例进行分类;然后,MoYe随机、均匀地从每个类别中选择一些异常给新的众包工人。此外,MoYe还研究了新测试用例的冷启动解决方案。MoYe通过分析异常的性质,基于余弦相似度计算不同测试用例之间的相似度,实现粗粒度的个性化推荐。基于第2.1节中构建的WTG模型,MoYe用三个特性描述了测试用例。测试用例Ti转换为向量:
3.2 基于项的协同过滤推荐
众包测试的前5分钟是推荐模型的冷启动阶段。在收集了众包工人偏好数据后,MoYe采用基于项的协同过滤算法构建推荐模型。给定当前众包工人u选择的测试用例,计算其他未选择测试用例的偏好。计算步骤如下:(1)计算测试用例之间的相似度:与公式(2)的相似度计算不同,MoYe记录了工人对不同测试用例的选择。基于这些数据,计算了不同测试用例之间的相似度。使用以下公式计算测试用例i和测试用例j之间的相似性Fij:
4. 实时引导模型
根据当前活动窗口,MoYe根据不同的规则计算窗口的跳转路径,实现实时提示和引导。
实验
1. 研究问题
RQ1:MoYe能提高众包测试的效率吗?
RQ2:MoYe通过静态分析可以有效地提高众包测试的覆盖率吗?
2. 实验装置
实验选择了三款Android应用:“jiandou”、“jilebu”和“QQyingyin”。每个应用程序在测试期间设置三组控制实验:传统的众包测试、仅包括自动测试指导的众包测试以及由自动测试和静态分析(MoYe)指导的众包测试。我们将| C |定义为传统的众包测试过程,将| A |定义为没有静态分析的自动引导众包测试,将| T |定义为MoYe工具。
3. 实验结果
为了回答RQ1,我们将众包测试的效率定义为每单位时间触发的bug数量。在实验中,研究人员每分钟都会计算出众包工人中发现的非重复性bug的数量。我们在图2中给出了三个应用程序中的bug数量随时间变化的折线图。从这三款应用的总体趋势来看,众包工人可以借助MoYe发现更多的bug。
图2 三个app中单位时间内触发的bug数
为了回答RQ2,表1分别统计了三个应用程序中小部件的平均覆盖率,灰色部分表示“jiandou”应用程序,粉色部分表示“jilebu”应用程序,蓝色部分表示“QQyingyin”应用程序。|A |要求人群工人自由测试窗口,| T |包括指导众包工人测试窗口。根据widget覆盖的结果,我们发现在MoYe的指导下众包工人可以触发更多的widget来发现新的activities,比如长列表底部的活动。需要注意,| A |很难达到“jiandou”的AlerDialog,而| T |可以帮助达到66%的widget覆盖率。因此,MoYe可以帮助实现众包测试的高覆盖率。
表1 不同app的平均组件覆盖率
使用
MoYe工具有两种使用场景:异常的窗口转换和未覆盖的窗口转换。在本节中,我们首先描述MoYe SDK在应用程序中的集成,并说明MoYe如何通过核心场景进行操作。
集成:MoYe SDK需要通过添加一些特定的代码手动集成到应用程序中,所以需要单独完成。集成有三个步骤,它们列在 站中。
站url:
http://118.178.18.181:58014/#/index
场景-异常窗口转换:对于选择异常窗口转换的众包工人,他首先单击按钮发送测试任务推荐请求。在服务器响应推荐列表后,工作进程从中选择一个测试任务。然后,MoYe计算从当前活动窗口到测试任务窗口的事件序列,并拍摄每个事件的屏幕快照,以指导群组工作人员完成测试任务。当工人触发一个bug时,应该提交一个bug 告。工具按图3所示的方式运行。
图3 场景的过程
总结
致谢
感谢国家自然科学基金(61932012,61802171,61772014)支持!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!