根据测试路径自动生成测试用例_移动应用Bug报告自动转化成测试用例

引用:Mattia Fazzini, Martin Prammer, Marcelo d'Amorim, and Alessandro Orso. 2018. Automatically translating bug reports into test cases for mobile apps. In Proceedings of the 27th ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA 2018). ACM, New York, NY, USA, 141-152. DOI: https://doi.org/10.1145/3213846.3213869

摘要

当用户遇到软件故障时,他们可以选择提交错误报告并提供有关软件故障的信息。如果错误报告包含足够的信息,那么开发人员可以尝试复现问题并对其进行研究、修复,以便消除其原因。不幸的是,用户提交的错误报告的数量通常很大,并且分析错误报告和再现其中描述的问题的任务可能非常耗时。为了帮助提高这一过程的效率,本文提出了Yakusu,这是一种使用程序分析和自然语言处理技术相结合的技术,可以从错误报告中生成可执行的测试用例。我们将Yakusu应用到真实的Android应用程序上,共计针对60多个真实的错误报告进行了实证评估。总的来说,我们的技术能够成功转化59.7%的测试报告;也就是说,对于大多数错误报告,开发人员无需研究报告来重现所描述的问题,而可以简单地使用由Yakusu自动生成的测试用例。此外,在其余不能成功转化的许多案例中,导致Yakusu无法工作的原因也是可以被解决的。

介绍

为了帮助提升开发人员复现错误报告错误的效率,我们提出了Yakusu技术,通过将程序分析和自然语言处理技术相结合,从错误报告中生成可执行的UI测试用例。具体来说,Yakusu将应用程序和错误报告作为输入,并分为三个阶段进行处理。首先,它分析应用程序以识别UI中可用的元素并生成应用程序的实体库。其次,它分析错误报告,利用生成的实体,并尝试识别用户提供的用于再现报告的问题的一组步骤。最后,如果成功,它会尝试生成一个测试用例,通过将已识别的步骤映射到实际的UI事件来重现错误。

在定义Yakusu时,我们必须克服两个主要挑战。首先,从非结构化数据(即错误报告)中提取结构化信息是一项非常重要的任务,因为它涉及解释使用广泛的,非精确的和依赖于上下文的语言的可能不完整的描述。其次,即使在错误报告中由用户提供的步骤已被正确识别,这些步骤与实际UI事件之间通常存在逻辑上的差距,并且这些步骤的顺序可能是不完整的。因此,生成错误报告的测试用例通常涉及搜索大量空间的可能解决方案。

我们的工作做出了如下贡献:

➢ 一种自动化技术,用于从用自然语言编写的错误报告中生成复现此报告中描述的问题的测试用例。

➢ 公开本文中Yakusu技术的实现,以及我们在评估中使用的实验数据和基础架构。

➢ 实证评估,提供我们方法有效性的初步证据。

例子

99aa01d5154f3b41e1fb883625c6bb76.png

图1:错误报告 图2:主界面 图3:博客编辑界面 图4:转化测试用例

我们的示例是针对WordPress应用的错误报告,WordPress是一个广泛使用的真实应用程序,已安装超过500万次,用于创建网站和博客。图1显示了一个出现在WordPress问题跟踪系统中的错误报告。 在此错误报告标题“重现行为的步骤”下包含三个抽象动作的列表,后面跟着错误描述。图2和图3显示了执行报告中列出的动作时遍历的屏幕。

如示例所示,可以在不同的抽象级别描述操作;一些操作可以直接指向易于识别的UI元素,而对于其他操作,其描述不能直接映射到UI元素。例如,抽象操作“点击发布按钮”可以轻松地映射到UI动作“单击标有’PUBLISH‘的按钮”(图3所示屏幕中右上角,突出显示)。相反,抽象动作“开始新帖子”对应于点击圆形按钮(图2所示屏幕中的底部,高亮显示)。在这种情况下,识别相应的UI操作需要对报告和应用程序进行更深入的分析。

在这篇论文中,Yakusu使用程序分析和自然语言处理技术的组合来识别从抽象动作到UI动作的映射,并生成再现相关故障的测试用例。对于此示例,Yakusu生成的测试用例结果如图4所示,测试用例使用Espresso框架进行编码,该框架使用应用程序标识符来引用应用程序中的UI元素。第4-8行代表动作“开始一个新帖子”,对应于点击图2中的上述圆形按钮(应用程序中标识符为fab_button的元素)。然后,第10-14行代表动作“输入内容”,并在文本框中键入一些随机生成的文本,对应图3中标签为“标题”的输入框(应用程序中标识符为post_title的元素)。最后,如上所述,通过单击图3右上角的按钮(应用程序中具有标识符menu_save_post的元素),第16-20行对“点击发布按钮”动作进行编码。

方法介绍

d81b8dc248e53a81d8e94adf0a533da2.png

图5:YAKUSU技术框架

图5概述了Yakusu的工作流程,包括三个阶段。首先,本体提取阶段将相关应用程序作为输入,并生成应用程序中涉及到的所有本体作为输出,其描述了UI中可用的元素。错误报告分析阶段将本体和错误报告作为输入,并生成一系列抽象步骤,这些步骤用于复现报告中描述的错误。从概念上讲,本体允许将错误报告中使用的词汇与UI中的元素绑定。此绑定对于生成抽象步骤列表很重要。最后,UI动作搜索阶段将抽象步骤列表作为输入,并生成一个重现相关故障的具体测试用例。在此阶段,Yakusu在测试设备上运行相关应用程序并尝试将抽象步骤列表映射到UI操作中。当所有抽象步骤都被映射时,Yakusu将已识别的UI操作编码为可以在应用程序上运行的测试用例,作为最终输出。

评估

为了评估Yakusu的有效性,在这个工作中,我们研究了如下两个问题:

➢ RQ1(准确性):Yakusu能将自然语言描述的错误报告成功转化为可执行的测试用例吗?

➢ RQ2(效率):Yakusu的执行效率怎么样?

在此工作中,我们使用实际应用程序来评估Yakusu,由于测试框架Espresso编码测试用例需要使用应用程序的源代码,因此,我们利用了来自于Github平台的开源应用程序。首先,我们利用关键词“android”、“crash”、“reproduce”、“version”对Github平台进行查询,并且仅关注2017年1月1号之后提交的错误报告。我们利用关键词“android”过滤出Android应用程序,利用关键词“crash”来过滤涉及到崩溃错误的报告,利用关键词“reproduce”来过滤那些包含具体操作步骤的错误报告,利用关键词“version”来过滤描述了具体应用程序和Android系统版本的错误报告。

经过查询,我们获取了2709份报告,我们随机挑选了100份报告来进一步处理。接下来,我们需要手工从应用程序源代码编译、构建可执行软件,在此过程中,有9份错误报告对应的应用程序无法成功构建。此外,我们尝试人工复现这些错误报告,最终有62份错误报告可被成功复现。

RQ1结果

为了回答RQ1,我们利用Yakusu尝试对上述62份错误报告进行转化,最终37份错误报告被成功复现,成功复现的标准有两个: 1) 生成的测试用例步骤符合错误报告中描述的步骤;2) 执行测试用例生成的stack trace和错误报告的stack trace相符。

表1描述了25份错误报告的转化结果,因为另外12份错误仅包含一个安装步骤即会导致crash发生。在表1中,Benchmarks列表下分别包含了每个错误报告的ID、项目名称、Github错误号、项目源码行数(单位为千行)、项目Github被关注数。错误报告按照其编号排序。

377bdea9f3ac04b8ffe1812ea97b3c53.png
1c4be3fd11c2b561bbed8b1def138606.png

表1:Yakusu转化错误报告的结果示例列表

RQ2结果

e2d2b9b7045f28d965e24a9f41dfe977.png

如表1所示,UI-actions-search阶段是Yakusu花费大部分时间的地方,其次是本体提取阶段,然后是错误报告分析阶段。在大多数情况下,我们的技术在不到五分钟的时间内可以生成测试用例。仅在两种情况下,执行时间超过10分钟,特别的,AnkiDroid(issue69)是Yakusu花费最长时间生成测试用例的情况,花费了29分钟41秒,其UI动作搜索阶段花费28分钟55秒,这是因为相比于其它示例,该例子中进行了较多次余弦相似度值的计算 (与其他操作相比,此操作相对较贵,因为它需要从测试设备发出网络请求以获得相似性值),考虑到即使在最坏的情况下执行时间也非常低,我们没有进一步调查这个问题,也没有努力优化Yakusu。 实际上,这些执行时间表明,可以使用Yakusu来监视错误报告并在当天生成测试用例。

总结

处理错误报告时,开发人员通常会尝试重现报告中描述的错误,以便能够对其进行调查并确定其原因。这是一项耗时且具有挑战性的任务,因为通常会有大量的错误报告以及分析它们所涉及的工作量。为了帮助开发人员完成这项任务,我们提出了Yakusu,这是一种结合了自然语言处理和程序分析的技术,可以从错误报告中提取一个再现报告中描述的错误的测试用例。我们通过在62个真实的错误报告上运行Yakusu进行评估。Yakusu能够自动生成59.7%的测试用例,我们认为这些测试虽然是初始结果,但强烈表明了该方法的有效性;对于所有这些报告,开发人员可以简单地使用由Yakusu自动生成的测试用例,而不必研究报告并了解如何复现其中描述的问题。值得注意的是,在我们解决了一些现有局限性的问题后,这个数字可能会进一步增加。

致谢

本文由南京大学软件学院2017级博士研究生郝蕊翻译转述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值