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

1506                                                       软件学报  2025  年第  36  卷第  4  期


                 提示词以引导大模型输出操作指引, 并最终根据大模型提供的操作指引生成相应的安卓应用程序输入, 以实现移
                 动应用   GUI 自动化交互任务. 在性能评估方面, 结果显示            DroidBot-GPT  成功完成了  39%  的应用程序交互任务, 平
                 均完成进度约为      66%.

                 3.4   小 结
                    GUI 自动化测试技术旨在自动化地对应用程序进行                GUI 测试, 挖掘   GUI 缺陷并反馈错误报告, 其工作机制可
                 分为提取并分析程序        GUI 信息、测试输入生成、与应用程序进行互动                3  个阶段. 其中测试输入生成历来是         GUI
                 自动化测试领域研究的重点. 根据生成输入事件序列的方式的不同, 传统的                        GUI 自动化测试技术可分为        3  类: 基
                 于随机的, 基于模型的和基于系统探索的             GUI 自动化测试技术. 基于随机的测试技术应用不同的策略随机生成测
                 试输入事件, 但由于输入事件不够精准导致其存在冗余和无效的问题; 基于模型的技术对应用程序进行分析以构
                 建模型, 进而以模型指导测试事件生成, 但这些技术需要面对模型不够准确的挑战. 基于系统探索的技术采用符号
                 执行和启发式搜索方法, 侧重探索程序特定状态, 然而该技术难以保障测试的覆盖率. 由于传统技术面临一系列挑
                 战, 研究人员尝试应用深度学习和强化学习等基于学习的方法进行                      GUI 自动化测试. 这些方法通过模仿人类用户
                 的行为, 从而更有效地进行        GUI 测试. 然而基于学习的方法对训练数据集质量和规模要求较高, 模型泛化能力有
                 限, 因而在面对复杂程序时效果仍然有限. 与此同时, 研究人员发现, 在其他领域的任务上, 大模型在自然语言理解、
                 生成与逻辑推理等方面均表现出优异的性能, 并体现出一定的智能. 受此启发, 部分研究者将大模型应用于                                  GUI
                 自动化测试, 并发现其在文本输入生成, 生成高质量复杂输入事件, 以及优先探索重要程序状态上具有显著优势.
                 例如, QTypist [102] 在文本输入部件中使用经过提示微调后的          GPT-3  模型生成高质量的文本, 大幅提高了          GUI 自动
                 化测试面对文本输入组件的通过率. 另一个工作是                GPTDroid [100] , 该工具将  GUI 自动化测试转化为基于    GPT-3  模
                 型的问答任务, 并在活动覆盖率和测试速度上相比传统方法有显著的提升. 这些研究成果展示了大模型在                                  GUI 自
                 动化测试领域的巨大潜力. 在未来基于大模型的                GUI 自动化测试研究中, 如何对大模型进行微调以更好地适应
                 GUI 测试任务, 以及如何构建更有效的提示策略, 将是值得探索的方向.
                    基于此, 本文已经对深度学习库缺陷检测和              GUI 自动化测试领域进行了分析和探讨. 第            4  节我们将聚焦于被
                 开发者广泛使用以保障其代码质量和有效性的方法: 测试用例生成技术.

                 4   测试用例自动生成技术

                    在当今的世界, 随着市场需求的快速变化, 大量技术公司采取敏捷开发的模式, 以最快的速度进行软件交付.
                 然而, 经过多次迭代更新后, 软件通常会愈发庞大和复杂, 其往往隐藏着未知的缺陷, 而即使是微小的缺陷也可能
                 给公司带来重大的经济损失和声誉损害. 因此, 为保证软件的质量, 软件测试在软件开发生命周期中的作用变得愈
                 发重要  [110,111] . 软件测试的基础和关键部分是单元测试        [112] , 它涉及对特定代码功能进行测试. 在单元测试中, 测试
                 用例首先设置一系列输入, 然后依次调用被测试的方法                  (称为焦点方法), 最后使用测试断言来判断程序状态是否
                 符合预期. 单元测试可以帮助开发者在软件开发的早期阶段发现缺陷和错误, 从而降低开发的成本. 此外, 单元测
                 试还提高了软件应用的可维护性和可扩展性. 然而, 手动编写单元测试需要开发人员深入理解软件系统的各个组
                 成部分的功能, 对开发者的技术水平和专业知识都有较高的要求. 这使开发者在面对繁重的开发任务时, 可能会忽
                 视或简化单元测试的工作         [113] . 在这种情况下, 通过使用测试用例自动生成工具, 开发者可以节约手动编写单元测
                 试的时间, 在保证软件质量的同时降低开发成本, 提高开发效率. 在本节中, 我们将介绍传统和基于学习的测试用
                 例自动生成技术, 以及这些技术的代表性工作和面临的关键挑战, 然后对基于大模型的测试用例自动生成技术进
                 行介绍和分析.

                 4.1   传统和基于学习的测试用例自动生成技术
                    传统的测试用例自动生成技术可以被大致分为                 3  类: 基于搜索的, 基于随机变异的和基于约束的测试用例自
                 动生成技术. 在传统技术之后, 神经机器翻译             (neural machine translation, NMT) 和文本到文本转换器  (text-to-text
                 transfer Transformer, T5) 等技术也被应用于测试用例生成, 这些技术被归类为基于学习的测试用例生成技术. 本节
   95   96   97   98   99   100   101   102   103   104   105