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

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


                 上下文记忆能力和学习能力, 能完成上下文关联的多段输出                   [104] . 同时, 在大模型训练的语料库中包含大量应用程
                 序的使用教程和测试报告, 大模型在训练阶段已经学习了触发应用程序某个功能或重现某个缺陷的分步说明. 因
                 此, 基于大模型的     GUI 自动化测试工具具有生成相关联的复杂事件序列的能力. 当向大模型提供了应用程序的结
                 构和语义信息以及测试历史后, 大模型可以捕获               GUI 页面之间的历史依赖关系, 从而生成复杂的输入事件序列.
                    (4) 优先探索重要程序状态: 大模型的训练数据包含大量应用程序版本迭代和修复的历史信息, 这些信息通常
                 将应用程序的重要功能、频繁迭代而没有充分测试的部件以及出错率高的功能突出. 因此, 基于大模型的                                  GUI 自
                 动化测试技术隐含地了解这些重要测试信息, 并可以优先探索那些更为关键和更易发现缺陷的程序状态                                  [100] .
                    (5) 应用程序快速变更下的低成本测试: 目前移动应用的                 GUI 页面随着版本迭代迅速更新, 大模型可以通过
                 提示技术或微调技术对需求和产品手册进行学习, 进而快速了解应用程序的功能和                            GUI 页面的变更, 而无需测试
                 人员在每次版本变更都手动维护测试脚本. 此外, 目前基于大模型的                    GUI 测试技术仅需与      GUI 页面翻译转换而成
                 的文本进行交互, 自然地解决了          GUI 页面变化对整体测试流程的影响. 因此, 基于大模型的                GUI 测试技术在当今
                 应用程序快速变更下可以以较低成本进行               GUI 自动化测试.
                    (6) 高可信度的    GUI 缺陷报告: 由于真实移动应用程序的复杂性, 传统              GUI 自动化测试常常出现误报和漏报
                 输入以及约束规则构建新的提示词, 以要求大模型生成变异规则
                 等问题. 一个具体的情景是: 同样的测试用例, 在同样的测试执行环境下, 测试的结果有时正确, 有时错误. 这样的
                 情况极大降低了      GUI 自动化测试的有效性. 而大模型在预训练阶段已经充分学习了应用程序的正常行为以及常
                 见错误类型, 因此可以高效自动化地判别             GUI 缺陷是否准确, 提升了      GUI 缺陷报告的可信度.
                    鉴于大模型在      GUI 自动化测试任务上的特性, 研究人员尝试将大模型与                GUI 自动化测试相结合, 以克服过去
                 传统和基于学习技术的关键挑战, 实现更加智能的                GUI 自动化测试.
                    针对传统    GUI 自动化测试工具在文本输入上表现较差的问题, Liu                等人提出了     QTypist [102] . 该工具使用经
                 过提示微调    (prompt tuning) 后的  GPT-3  模型在文本输入部件中生成高质量的文本输入. 首先, 研究者对大量需要
                 文本输入的应用程序页面进行了分析和调研, 并进行手动分类以确定需要输入文本内容的                               GUI 部件类型. 然后,
                 对于一个文本输入部件及其          GUI 页面, QTypist 从视图层次文件中提取上下文信息, 经过处理后生成输入                  GPT  模
                 型的提示词. 最后, 根据     GPT  的反馈, QTypist 得到输入文本, 并填入相应的文本输入部件中, 从而实现与文本输入
                 部件的交互. 研究者为进一步分析            QTypist 的真实使用体验, 让测试人员使用不同            GUI 自动测试工具并进行
                 5-Likert 尺度反馈调查. 调查结果表明, 测试人员强烈同意            QTypist 生成输入内容具有多样性和有效性, 并对其他
                 自动  GUI 自动测试工具生成的文本输入表示强烈不满, 认为这些工具生成本文内容没有语义含义和实际意义. 此
                 外, 在实验评估中, QTypist 的文本输入通过率为           87%, 相较过去工作有显著提升. 同时, 集成了           QTypist 的传统
                 GUI 自动化测试工具的覆盖率均有所提高, 并检测到更多的缺陷, 验证了                    QTypist 在  GUI 自动化测试中的有效性.
                    不同于   QTypist [102] 侧重于生成能够通过   GUI 文本输入部件的有效文本输入, InputBlaster      [105] 旨在利用大模型
                 生成能导致程序崩溃的异常文本输入. InputBlaster 的核心思想是将异常文本输入生成问题转化为利用大模型生
                 成文本输入测试生成器        (即一个程序函数, 其输出一系列用于对文本输入部件进行测试的异常文本) 的任务, 每个
                 生成器都能根据相应的变异规则生成一系列异常文本输入. 具体来说, InputBlaster 首先从程序中提取                         GUI 信息,
                 利用大模型生成有效文本输入, 以及该文本输入部件的输入约束规则. 进一步, InputBlaster 利用生成的有效文本
                                                                   (即如何从有效文本输入变异生成异常文本输入
                 的自然语言描述) 和相应的测试生成器. InputBlaster 通过将测试生成器生成的测试文本输入到移动应用程序中,
                 检验这些输入能否触发应用崩溃. 应用程序的反馈随后被用来迭代优化大型语言模型, 从而生成新的变异规则和
                 测试生成器, 实现持续的循环测试过程. 同时, 为使大模型考虑更加丰富的变异规则, InputBlaster 结合上下文学习
                 模式, 通过为大模型提供触发异常文本输入错误的历史报告作为学习样本, 以增强模型的性能. InputBlaster 在实
                 验中对   31  个热门  Android  应用程序的  36  个文本输入小部件进行了评估, 显示出          78%  的错误检测率, 比现有最佳
                 基准高出   136%. 此外, 研究者将    InputBlaster 集成到自动化  GUI 测试工具中, 并在    Google Play  的实际应用程序中
                 检测到   37  个之前未见的崩溃. 这些特点使        InputBlaster 在移动应用程序的异常文本输入测试领域表现突出, 有效
                 提高了   GUI 自动化测试的深度和覆盖率.
   93   94   95   96   97   98   99   100   101   102   103