Page 94 - 《软件学报》2025年第4期
P. 94
1500 软件学报 2025 年第 36 卷第 4 期
Machiry 等人 [77] 在 2013 年提出了 Dynodroid. Dynodroid 被设计为观察者-选择器-执行器 (observer-selector-
executor) 结构, 其中观察者负责分析当前页面可触发的 GUI 事件和系统级事件; 选择器根据不同随机策略, 基于
观察者提供的信息选择并生成测试事件传递给执行器; 执行器将生成的测试事件在被测应用程序上进行执行. 相
较于 Monkey, Dynodroid 的优势是: (1) 能生成系统级事件输入; (2) 可以结合测试人员生成的事件进行进一步的探
索; (3) 经由观察者分析给出的事件输入排除了大量无效输入. 并且相较于纯随机探索, Dynodroid 会基于已探索事
件的频率对策略中的概率参数进行修改, 使探索更加智能.
PUMA [78] 是 Hao 等人在 2014 年提出的一个基于随机的 GUI 自动化测试框架. 该框架基于 Monkey 执行自动
化的 GUI 应用状态探索, 支持对各种应用属性进行动态分析. 同时, 用户可以根据需求编写事件处理程序来指导
应用状态的探索方式, 并可以在应用程序运行时动态修改环境. 这一设计使得 GUI 测试过程变得更加灵活, 能够
满足不同应用的测试需求.
3.2.2 基于模型的 GUI 自动化测试技术
基于模型的 GUI 自动化测试技术在 GUI 自动化测试领域应用广泛. 此类技术以建模的方式对应用程序 GUI
行为进行抽象表示, 其建模方法涉及将应用程序的 GUI 状态变化与用户的交互操作 (也即输入事件) 相联系, 并通
Gibbs 采样
常采用有向图来呈现这些关系, 从而构建出一个反映应用程序行为的模型. 这样的模型不仅可以帮助 GUI 自动测
试工具理解和预测用户界面的各种状态转换, 还为测试输入事件的生成提供了一定的指导.
2013 年, Orbit [79] 通过静态分析程序源代码以提取 GUI 支持的操作, 然后使用动态遍历的方法在应用程序上
执行, 最终得到以状态机表示的 GUI 模型. 作为早期基于模型的测试工具, Orbit 使用在深度优先搜索算法的基础
上加以改进的图探索算法进行简单的 GUI 探索, 因此测试性能有限. 同年, Choi 等人提出 SwiftHand [80] , 该技术应
用机器学习方法在测试过程中构建并优化被测应用程序模型, 然后利用该模型指导生成用户输入以探索 GUI 程
序状态. 同时, SwiftHand 通过减少被测应用重启次数以提高测试效率.
针对 GUI 测试中的状态爆炸问题, 2016 年 Mirzaei 等人 [81] 提出了 TrimDroid. TrimDroid 通过对应用程序进行
静态分析得到 GUI 输入接口模型和 GUI 活动转换模型. 同时, 该工具结合控制流和数据流分析技术来识别应用程
序 GUI 元素之间的依赖关系, 从而将 GUI 输入部件根据依赖关系划分成集合, 并将其作为组合测试的候选对象.
最后 TrimDroid 使用约束求解器计算出覆盖不同 GUI 部件组合的测试用例. 与一般的组合测试相比, TrimDroid
能够在保障达到一定代码覆盖率的同时减少生成冗余的测试事件序列, 有效缓解组合爆炸问题.
2017 年, Li 等人提出的 DroidBot [82] 采取基于模型的探索策略, 首先将程序 GUI 状态和触发状态转换的输入
事件构建为有向图, 然后该工具将探索应用状态的问题转化为图遍历问题. 此外, DroidBot 为用户提供一系列 API,
以支持用户自定义拓展相关策略, 并且该工具通过调用堆栈跟踪评估测试输入的有效性. 与先前的测试输入生成
工具相比, DroidBot 更加轻量并适用于大多数安卓应用程序.
随机有限状态机是由程序的 GUI 状态和导致状态转换的输入事件以及相应的转换概率组成的有向图, 其中
转换概率值反映了从一个状态到另一个状态的转换可能发生的概率. 由于应用程序都较为复杂, 状态繁多, 难以进
行精确建模, 部分研究利用随机有限状态机的概率特性来近似地构建应用程序模型. 例如, 2017 年 Su 等人提出的
Stoat [83] 技术便采用以随机有限状态机表示的随机模型对应用程序进行建模. 该工具通过静态分析和动态分析技术
对应用程序进行逆向工程以得到随机模型, 并根据 [84] 迭代地变异和优化模型, 进而引导测试生成. 与先
前基于模型的方法相比, Stoat 通过注入系统级事件进一步增强了测试效果.
在 2019 年, Gu 等人提出的 APE [85] 采用了基于决策树的方法来构建程序模型. 决策树通过节点和分支来表示
各类决策规则和条件, 这使其能对不同的程序行为和属性进行抽象表示. 通过对决策树进行灵活的调整, APE 可
以动态地更新模型, 对 GUI 信息的表示进行精确的增删, 进而改变模型的大小和精度. 这种方法不仅可以去除无
关的 GUI 细节, 还能有效地反映被测应用程序的运行时状态, 从而提升测试的有效性. 在实验评估中, APE 的测试
覆盖率和挖掘到的缺陷数量均高于 Stoat [83] .
基于模型的 GUI 测试工具在应用于复杂应用程序时可能会陷入循环操作并耗尽资源. 针对这个问题, 2020 年
字节跳动团队提出了 Fastbot [86] . 该工具通过在服务器端构建模型, 并采用多智能体协作机制, 以加速模型的构建.