『慕测科技』基于不一致性分析的移动应用 Bug 报告生成技术


图 1 Bug 报告生成流程
1. 研究意义
近年来 , 随着智能设备的普及 , 移动应用已成为人们日常生活中不可或缺的一部分 。 娱乐、购物、支付和其他类型应用不断涌现 , 诸如 Google Play 和 App Store 的移动应用市场上有数百万应用可供用户下载 。 Android 应用因其灵活开源的特性和功能多样的第三方库备受开发者青睐 , 而其碎片化的生态也同样影响着数十亿用户 。 不同移动设备软硬件环境存在差异 , 使得未经充分测试的应用暴露出许多潜在的 Bug , 造成用户流失 , 开发商声誉受损 , 最终导致应用在竞争激烈的市场中被用户抛弃 。 为保障应用质量 , 减少用户损失 , 开发者需要及时地进行 Bug 修复 , 包含了详细 Bug 描述信息的应用 Bug 报告则是修复阶段的重要参考 。
但现有 Bug 报告无论是在其展现形式还是生成效率方面都存在一些不足 , 在 Bug 修复阶段对开发者的帮助十分有限 。 常见的手工测试报告中通常包含了具备领域知识的众包测试工人对 Bug 的理解和分析 , 但手工测试效率低 , 人工成本较高 。 现有自动化测试工具大幅提升了测试效率 , 降低了开销 , 但其生成的 Bug 报告通常是对测试数据的简单罗列和展示 , 缺乏对于 Bug 特性的洞察 , 如类别信息、修复建议 , 导致其结果仍然需要消耗一定人工审查成本 。 虽然自动化测试可在多设备上批量执行 , 以模拟应用真实运行场景 , 但在生成 Bug 报告时 , 应用在不同设备上产生的重复 Bug 未被有效去除 。 此外 , 现有手工测试和自动化测试 Bug 报告均未考虑多设备场景下引入的不一致性 , 即应用 GUI 特性和测试设备碎片化导致相同应用在不同设备上的行为和表现存在差异 。 因此 , 去除了多设备上的重复 Bug , 结合了不一致性信息 , 包含对于 Bug 特性的洞察 , 具有良好可读性 , 能够提升开发者理解和修复 Bug 效率的易理解 Bug 报告显得尤为必要 。
2. 研究内容
为结合自动化测试和手工测试 Bug 报告的优点 , 填补现有易理解自动化测试 Bug 报告研究存在的空白 , 针对 Android 应用自动化测试结果 , 我们提出了一种基于不一致性分析的移动应用 Bug 报告生成技术—BREGAT(Bug Report Generation for Mobile App Testing) 。 我们首次对自动化测试结果中存在的不一致性进行了形式化定义 , 并讨论了 Bug 和不一致性之间关系 , 如 GUI 不一致性相关 Bug 说明是应用自身问题所致 , 与设备无关 , 这对提升最终 Bug 报告可理解性十分关键 。 通过对真实自动化测试结果中 Bug 的审查和分析 , 我们定义了一个可扩展的带不一致性标签的 Bug 分类法 , 各类别均标注了不一致性标签 , 收集了产生原因和通用修复建议 。 BREGAT 实现了该分类法 , 用于对自动化测试结果中检测到的结构化 Bug 进行分类、去重 , 并结合截图、操作、设备信息等异构数据生成易理解 Bug 报告 , 加速 Bug 理解和修复 。 图 2 为 BREGAT 工作流程 。

『慕测科技』基于不一致性分析的移动应用 Bug 报告生成技术
本文插图

图 2 BREGAT 工作流程
Bug 检测 。 相比于截图和操作等 GUI 数据 , 测试设备日志详细记录了应用程序的真实运行状态和生命周期 , 可以发现更多源码级别的 Bug , 其中一些 Bug 用户仅从 GUI 层级甚至无法感知 。 日志也是开发者分析应用运行状态 , 调试应用功能的关键参考信息 。 因此 , 对于应用测试过程中在 Android 设备 AP(Application Processor)端 main , system , events , radio , crash 缓冲区打印的设备日志 , BREGAT 通过“fatal” , “error” , “exception”和“ANR”等 Bug 关键字来定位设备日志中 Bug 相关报错信息 。 对于打印了异常堆栈的 Bug , 即对应日志中多行结构化输出 , 通过相应的日志模式匹配筛选出完整的 Bug 日志 。 BREGAT 最终从设备日志中过滤出 UncaughtException , ANR(Application Not Response)以及包含了常见 Bug 关键字的开发者自定义日志输出 , 或疑似 Bug 的日志片段 。


推荐阅读