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

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


                    GPTDroid [23,100] 是一个基于大模型的  GUI 自动化测试工具. 该技术将        GUI 自动化测试转化为与大模型的问答
                 任务, 通过将   GUI 信息输入大模型得到测试指引, 然后根据大模型输出的测试指引迭代地进行测试. 具体来说,
                 GPTDroid  提取应用程序的整体信息       (如应用程序名, GUI 页面的活动名), 当前的          GUI 页面信息和部件信息, 并结
                 合历史测试信息      (如功能, 活动, 部件的累计触发次数和最近执行的测试操作), 综合处理后形成输入                        GPT-3  的提
                 示词, 以询问   GPT-3  当前需要进行的     GUI 测试操作, 并根据    GPT-3  的回答提取操作指引, 最后生成测试输入事件.
                 为了使得大模型的输出易于识别, 并能被正确映射到实际被应用程序执行的输入事件上, GPTDroid                           应用少样本学
                 习策略, 通过为大模型提供输入输出模板的学习样例以指引大模型生成符合严格格式要求的操作指引. GPTDroid
                 在  Google Play 的  86 个应用程序上进行了评估, 在活动覆盖率和测试效率上相较过去工作均有显著提升. GPTDroid
                 还在  Google Play  上检测到  48  个新漏洞, 其中  25  个已被确认并修复. 研究者进一步分析并讨论了             GPTDroid  综合
                 表现优异的原因. 他们发现         GPTDroid  可以: (1) 自动进行有效的文本输入: 通过利用大模型的上下文理解能力,
                 GPTDroid  可以自动分析出    GUI 页面的关键点, 并尝试补全相关信息以通过             GUI 部件的输入校验; (2) 完成大模型
                 引导的复合操作: 在研究者给出的例子中, 大模型自动对                 GUI 页面的不同部件输入顺序进行分析, 并生成合理且
                 有效的测试输入; (3) 追踪测试上下文信息: 在一个应用程序                GUI 漏洞检测案例中, GPTDroid     自动化地进行了      6
                                         GUI 自动化测试工具.
                 步操作, 包含点击、选择、长按、输入文本等, 最终触发了漏洞. 如果没有强大的上下文理解和操作能力, GPTDroid
                 无法如此深入地测试        GUI 程序状态; (4) 避免重复探索: 部分应用程序的设置部件为方便用户使用存在循环跳转
                 的情况, 这使得    GUI 自动化测试工具很容易陷入无效的            GUI 状态循环. 而   GPTDroid  通过上下文记忆和理解能力
                 可以高效地跳出      GUI 状态循环并优先探索重要         GUI 状态.
                    主流的针对     GUI 自动测试工具的评价指标通常是测试工具对               GUI 活动的覆盖率或对组件的覆盖率. 然而, 一
                 项对安卓开发者的实证研究          [106] 表明, 比起具有高覆盖率的测试用例, 开发人员普遍更倾向于使用针对单个功能的
                 测试用例. 不仅如此, 开发人员还希望自动生成的测试用例能够具有自然语言描述的任务目标, 以及预期的程序输
                 出. 为了满足这些需求, Yoon      等人提出了    DroidAgent [107] . 针对被测应用程序的功能, DroidAgent 提出相应的测试
                 任务  (比如使用即时通讯软件完成一次聊天), 并生成对该任务的自然语言描述. 然后, DroidAgent 与被测程序的
                 GUI 进行交互, 以期完成先前提出的任务. 如果测试成功, DroidAgent 将生成复现测试过程的测试脚本, 并将脚本
                 和任务描述提供给开发者. 具体来说, DroidAgent 的组成部分包括              4  个基于大模型的任务执行模块, 即计划模块、
                 动作模块、观察模块和反馈模块. 此外, 为了应对大模型上下文长度受限的问题, DroidAgent 还引入了                         3  个辅助记
                 忆模块, 即长期记忆模块、短期记忆模块和空间记忆模块. 计划模块从长期记忆模块中得到初始知识                                (DroidAgent
                 所扮演的测试者的个人信息等) 和先前任务的总结, 然后根据这些信息生成新任务. 接收任务后, 动作模块根据短
                 期记忆模块中的历史操作记录和被观测到的                GUI 组件选择接下来执行的操作, 然后观察模块将对               GUI 状态更新
                 的总结写入短期记忆模块和空间记忆模块, 引导动作模块选择下一个操作. 当动作模块宣布任务结束时, 反馈模块
                 将生成对任务的总结和反思, 并将这些信息输入到长期记忆模块. 通过使用任务驱动测试过程, 并对任务进行自动
                 的总结和反思, 大模型可以充分利用先前测试过程反映的有效信息, 从而生成符合开发者意图且具有多样性的测
                 试任务. 在对    15  个应用程序的测试中, DroidAgent 生成了      374  个测试任务, 其中    85%  的任务是相关且可行的,
                 59%  的任务由 DroidAgent 成功完成. 此外, 尽管并未直接将覆盖率作为测试目标, DroidAgent 达到了               60.7%  的活
                 动覆盖率, 高于其他作为基准的
                    大模型除了在移动应用的          GUI 自动化测试领域展现巨大潜力, 在            Web  应用的  GUI 自动化测试, 移动应用
                 GUI 自动化交互等     GUI 自动化测试相关领域也发挥显著作用. 传统的              Web  元素定位方法通常缺乏对语义和上下
                 文的理解, VON Similo LLM  [108] 通过将过去的  Web  元素的定位工具     VON Similo  与大语言模型   (LLM) 进行结合,
                 利用大型语言模型       (如  GPT-4) 的语言理解和推理能力, 实现了更准确的           Web  元素定位. 该工具能分析       Web  元素
                 的含义, 理解   Web  元素相邻的文本, 评估网页结构, 并在自动化测试过程中减少人工干预和脚本维护的需求. 但需
                 要注意的是, 该工具需要大量调用大模型             (例如, GPT-4) 的  API, 会产生  API 交互请求延迟和成本问题. DroidBot-
                 GPT [109] 展现了大语言模型在移动应用       GUI 自动化交互领域的作用. 该工具使用大模型自动化地与安卓移动应用
                 程序进行交互. 它借助基于模型的          GUI 自动化测试工具      DroidBot [82] 提取并处理应用程序的   GUI 信息, 进一步生成
   94   95   96   97   98   99   100   101   102   103   104