Page 95 - 《软件学报》2025年第4期
P. 95

香佳宏 等: 大模型在软件缺陷检测与修复的应用发展综述                                                     1501


                 Fastbot 采用多种启发式遍历算法以解决测试中的重复操作和资源枯竭等问题. 此外, Fastbot 将部分计算任务部署
                 到云端, 在客户端仅保留监听         GUI 信息和动作注入功能, 以解决手机内存和计算资源大量消耗的问题. 在实验效
                 果上, Fastbot 的多智能体云测试机制有效提高了          GUI 测试效率.
                    一些复杂的程序状态需要较长的测试输入事件序列来触发. 针对部分                        GUI 测试技术在生成高质量的长测试
                 输入事件序列上的挑战, Wang        等人于   2020  年提出了  ComboDroid [87] . 该工具将生成测试输入转化为用例生成和
                 用例组合的反馈循环操作, 通过组合短测试输入事件序列生成高质量的长测试输入, 并从其生成的长测试用例中
                 提取短用例作为组合材料, 以深入测试程序复杂               GUI 状态. ComboDroid  支持从  GUI 状态转换和数据依赖中提取
                 应用程序的有效信息, 并利用轻量级静态分析来推断输入之间的依赖关系. 实验评估中, ComboDroid                          的代码覆盖
                 率优于当时的最佳基准线         APE [85] .
                    2022  年, Liu  等人提出了  NaviDroid [88] , 该工具结合自动化测试和手动测试, 以尝试解决自动化测试覆盖率较
                 低和手动测试重复探索的问题. NaviDroid         通过静态分析和动态探索从应用程序中提取                GUI 状态转换图, 并使用
                 动态规划算法指导路径探索, 以覆盖更多的程序状态并减少重复的探索步骤. 同时, 该工具采用上下文感知状态合
                 并方法, 能有效地识别并整合相近的状态, 从而降低状态空间的冗余. 在手动测试过程中, 该工具通过视觉提示来
                                等人提出了一种基于虚拟化技术的
                 引导测试者测试未探索的界面, 从而避免测试遗漏和重复探索等问题. 用户体验研究表明, NaviDroid                          在协助手动
                 GUI 测试和挖掘缺陷方面具有优异的性能表现.

                 3.2.3    基于系统探索的  GUI 自动化测试技术
                    基于系统探索的技术使用符号执行和启发式搜索算法等技术来指导                         GUI 测试工具探索特定程序状态, 侧重
                 于解决特定应用程序行为只能通过特定测试输入触发的挑战. 2012                    年, Anand  等人提出了第一个使用系统探索策
                 略的测试框架     ACTEve  [89] . 该框架使用符号执行技术, 通过检查程序执行条件来确定不同事件序列之间的包含关
                 系, 从而避免重复访问等效程序状态, 并缓解路径爆炸问题. 同年, Amalfitano               等人提出的     AndroidRipper [90] 基于已
                 有的  Ripper 技术实现了对    GUI 的自动探索测试. 作为      AndroidRipper 的核心组件, Ripper 能自动识别当前     GUI 页
                 面中可触发的事件, 并使用这些事件生成测试用例, 以触发应用程序状态的变化. 在                          2013  年, Azim  等人提出的
                 A3E Depth-First [91] 采用污点分析技术, 以深度优先方式探索应用的活动和           GUI 元素. 相较于   ACTEve, A3E Depth-
                 First 注重对大规模应用程序进行        GUI 和传感器驱动的探索. 而       AndroidRipper 与  A3E Depth-First 相比, 则仅适用
                 于安卓模拟器, 无法模拟传感器事件.
                    2014  年, Mahmood  等人提出了  EvoDroid  [92] . 该技术使用进化算法, 将测试路径划分为段, 并根据这些段的信
                 息执行进化和搜索, 以获取深入程序状态的测试用例. 这一方法有助于保留并改进搜索过程中的优秀测试用例的
                 遗传信息. 此外, EvoDroid  还具备在云上并行执行测试用例的能力, 从而提高了测试的可扩展性和执行速度. 但需
                 要注意的是, EvoDroid  在某些情况下会难以系统地推理输入条件, 导致性能显著下降.
                    2016  年, Mao  等人提出的  Sapienz [93] 同样采用搜索和进化算法策略. 该技术采用帕累托多目标搜索方法组合
                 最小化测试序列长度和最大化测试覆盖率等目标, 以实现对多目标的同时优化. Sapienz 使用进化算法中的基因编
                 程技术来生成测试输入, 并采用多粒度级别的插桩和灵活的测试策略, 系统地探索应用程序. 相较于                                 Evodroid,
                 Sapienz 同时考虑了覆盖率、测试序列长度、执行时间等多个目标, 提供更优的测试方案.
                    2020  年, Dong                           GUI 测试工具 TimeMachine [94] . 该工具能够捕获系统状态
                 快照保存重要的探索状态. 在探索陷入困境时, TimeMachine 将尝试恢复到先前记录的状态, 从而进一步触发新的
                 程序行为, 实现系统性的状态空间探索. 与            EvoDroid  和  Sapienz 一样, TimeMachine 也采取了基于搜索的方法, 但
                 它演化的对象是应用状态的种群, 而非输入序列的种群. 在实验评估中, TimeMachine 的代码覆盖率和发现缺陷数
                 量均优于   Sapienz [93] .

                 3.2.4    基于学习的  GUI 自动化测试技术
                    虽然传统    GUI 自动化测试技术已经得到了广泛的研究并在测试效果上不断取得进展, 但这些技术在面对复
                 杂应用程序时仍然表现有限. 为此, 研究人员尝试应用深度学习和强化学习等机器学习方法进行                              GUI 自动化测试.
                 这些方法通过模仿人类用户的行为, 生成与人类用户相似的动作和交互, 从而更有效地测试应用程序                                GUI. 这些方
   90   91   92   93   94   95   96   97   98   99   100