Page 96 - 《软件学报》2025年第4期
P. 96
1502 软件学报 2025 年第 36 卷第 4 期
法的核心思想是: 测试算法执行的操作越接近人类用户的操作, 测试就越全面和有效.
Li 等人在 2019 年提出了一种基于深度学习的 GUI 自动化测试工具 Humanoid [95] , 它采用深度神经网络模型,
从大量人类与应用程序 GUI 的交互数据中学习人类用户交互的偏好和方式, 进而使用该模型来指导输入事件的
生成. Humanoid 在深度神经网络模型的帮助下能够以人类用户视角判断 GUI 事件的重要性, 从而优先生成能够
触发重要状态的测试输入. 但在充足测试时间的情况下, Humanoid 是否使用学习模型对最终的测试覆盖率没有显
著影响. 同时, Humanoid 不支持系统广播、传感器等系统级事件, 因而限制了该工具在测试覆盖率上的表现.
2020 年, Pan 等人提出了 Q-testing [96] , 这是一种基于强化学习中 Q-learning 算法的 GUI 自动化测试工具. 该工
具综合了随机探索策略和基于模型的探索策略的优点. Q-testing 采用 Q 表作为轻量级模型, 采用好奇驱动策略,
记录之前访问的部分状态以引导工具对探索较少的程序 GUI 状态进行测试. 此外, Q-testing 还引入了一个包含深
度神经网络模型的状态比较模块, 用于根据功能场景的粒度划分 GUI 状态. 借助这个模块, Q-testing 能够比较不
同 GUI 状态并计算相应奖励, 从而优先探索未曾到达的状态, 有效提高了代码覆盖率.
2022 年, Peng 等人 [97] 的研究认为 Humanoid [95] 在具有更复杂 GUI 页面特征和交互逻辑的应用上的测试表现
不佳, 这种情况的主要原因是 Humanoid 对 GUI 结构的表示有效性有限, 并且其使用的单模态模型限制了生成测
试工具而言, 这类工具虽然能够深入探索特定程序状态, 但由于符号执行技术的路径爆炸问题, 其有效性容易受到
试事件的多样性. 基于该见解, Peng 等人提出了基于深度学习的自动化测试工具 MUBot [97] . 该工具通过使用灰度
图简化的 GUI 页面表示, 提高了对 GUI 元素的识别效果. 同时, MUBot 通过多模态深度学习算法 [98] 学习用户交互
轨迹, 以生成多样化的测试输入. 相较于 Humanoid, MUBot 在模型规模和测试事件生成时间上均显著减少, 同时
由于其生成的测试输入更加全面, 在面对复杂程序时该工具的测试覆盖率也有不俗的表现.
2021 年, Yazdani 等人提出了 Deep GUI [99] . 该工具采用深度学习技术, 尝试实现黑盒的 GUI 自动化测试. Deep
GUI 运用深度学习分析应用程序的屏幕截图进而生成相应的热图, 后者可描绘屏幕上每个像素点被触摸的概率.
这使得 Deep GUI 能够根据这些热图生成智能化的测试输入, 高效地与应用程序的关键交互界面进行互动, 而无需
深入了解应用程序的内部实现细节. 此外, 由于 Deep GUI 的数据收集、训练和推断过程独立于平台进行, 它不仅
适用于安卓平台, 还具有跨平台的能力. Deep GUI 与 Humanoid 在采用应用程序屏幕截图作为输入方面相似, 但与
依赖于程序分析以构建 GUI 状态转换图的 Humanoid 不同, Deep GUI 仅需要屏幕截图即可进行测试.
3.2.5 传统和基于学习的技术所面对的关键挑战
尽管传统和基于学习的 GUI 自动化测试技术被广泛研究, 相关技术经过不断的迭代在测试效果上有所进展,
但它们仍然面对一系列关键挑战. 其中, 在传统技术中有以下一些.
(1) 基于随机的测试技术虽然简单且易于实现, 但其主要挑战在于测试效率以及有效性难以保障. 随机生成的
输入事件序列相对冗余, 大量测试输入事件难以有效地触发 GUI 状态变化, 这使得基于随机的测试技术往往测试
效率低下, 测试覆盖率有限.
(2) 基于模型的测试技术需面对模型准确性的挑战. 该类技术难以对复杂应用程序进行准确建模, 因此无法精
准捕获大型应用程序复杂状态的变化和行为. 此外, 对于基于模型的技术而言, 如何选择适当的模型粒度是一个重
要的挑战. 模型粒度太细可能导致 GUI 状态重复甚至状态爆炸, 而模型粒度过粗可能导致测试工具无法准确获取
GUI 的状态信息, 从而产生错误的分析结果.
(3) 基于系统探索的技术通常使用符号执行技术和启发式搜索方法侧重于深入探索特定程序状态, 而在代码
覆盖率等整体测试指标方面表现有限, 难以对程序进行较为全面的探索. 其中, 对于应用符号执行技术的 GUI 测
应用程序代码复杂性的影响. 而启发式搜索算法虽然在处理大型应用程序和复杂场景时更加高效, 但它们通常依
赖于预设的规则或经验, 无法覆盖潜在的测试路径, 导致这些工具可能遗漏重要的缺陷.
基于学习的 GUI 自动化测试工具生成的测试输入相较于传统工具更贴近人类与 GUI 进行交互的模式, 并在
测试覆盖率的表现上有所提高, 但依然需要面对机器学习技术引入的关键挑战. 首先, 基于学习技术中模型的训练
依赖高质量的训练数据, 而现实世界中来自真实用户的 GUI 交互数据数量有限, 难以获得. 其次, 基于学习的技术
应用的模型在面对实际复杂应用时泛化能力有限, 难以达到较好的性能表现. 此外, 现实中移动应用程序非常复