智能化测试
如果无法正常显示,请先停止浏览器的去广告插件。
1.
2. 大语言模型赋能自动化测试
实践、挑战与展望
报告人:董震
复旦大学计算机学院
3. 背景介绍
案例分享
基于大语言模型的等价类划分测试技术
目录
基于大语言模型的测试输入增强
基于大语言模型的场景测试用例生成
基于大语言模型的跨APP测试用例迁移
挑战与展望
4. 一
背景介绍
5. 大语言模型(LLM)的演变
图片来源:Yang, J., Jin, H., Tang, R., Han, X., Feng, Q., Jiang, H., ... & Hu, X. (2024). Harnessing the power of llms in practice: A survey on chatgpt and beyond. ACM Transactions on Knowledge Discovery from Data, 18(6), 1-32.
6. 大语言模型(LLM)的应用
7. 大语言模型(LLM)应用案例
MetaGPT:一句话让LLM为你实现软件开发
图片来源:Hong, S., Zheng, X., Chen, J., Cheng, Y., Wang, J., Zhang, C., ... & Wu, C. (2023). Metagpt: Meta programming for multi-agent collaborative framework. arXiv preprint arXiv:2308.00352.
8. 软件测试全流程中的大语言模型(LLM)
l 缺陷预测与分析
l 测试输入生成
l 回归测试用例生成
l 测试用例生成
l 业务逻辑分析
l Oracle 生成
l 测试场景分析
测试执行
l 边界条件识别
缺陷管理与回归测
试
测试设计与实现
测试计划制定
需求分析
l 结构化报告生成
l 测试集优化与选择
l 测试用例执行
l 测试计划生成
l 风险预测
l 测试优先级建议
测试报告与评
估
l 反馈分析与策略调整
9. 二
案例分享
10. 01
基于大语言模型的
等价类划分测试技术
11. 等价类划分
示例:三角形测试
1. 用程序读取 3 个整数,分别代表三角形的边长
2. 程序显示此三角形是等边三角形(三条边都相等) 、等腰三角形(只有两条边相等)或
不等边三角形(三条边都不等)
等腰三角形
不等边三角形
等边三角形
测试这个程序需要多少个测试用例?
12. 等价类划分
测试域
输入
<x,y,z>
错误处理
的测试
非三角形
细分类
三角形
等边
三角形
基本类
不等边
三角形
根据“输出”情况细分“三角形” 主类
测试用例
等腰
三角形
<200,100,200>
<1,2,2>
代表值:
代表所有“等腰三角形”
<2,1,2>
13. 大语言模型的常识推理与代码理解能力
解释代码含义
用于判断三角形的程序代码
大语言模型对代码的理解
大语言模型具备常识推理与代码理解的能力
14. 利用大语言模型进行等价类划分测试
由于大语言模型具备常识推理和代码理解能力,我们可以利用其分析程序代码,自动划分适当的等价类。
随后,为每个等价类生成若干输入,从而提升输入生成的效率。
等价类划分
用于判断三角形的程序代码
任何一对边的和不大于第三边 (x=1,y=2,z=3),...
三条边都相等 (x=3,y=3,z=3),...
有两条边相等,第三条边不同
为每个等价类
(x=4,y=4,z=5),...
生成输入
三条边都不相等 (x=3,y=4,z=5),...
大模型划分出的等价类 大模型生成的测试输入
15. 基于大语言模型的等价类划分测试工具
由于大语言模型具备常识推理和代码理解能力,我们可以利用其分析程序代码,自动划分适当的等价类。
随后,为每个等价类生成若干输入,从而提升输入生成的效率。
输入参数的构造函数
划分等价类
程序源代码
等价类
划分结果
为每个等价类生成输入
输入参数的
实例化代码
16. 工具效果
我们从 10 个第三方开源库中选取了共 2205 个方法对工具进行了性能测试,并设计对比实验。结果如下:
① 基于大语言模型的等价类划分测试工具使用更少的输入,达到更高的覆盖
覆盖到的分支数 生成的有效输入总数
基于大语言模型的等价类划分测试工具 19,100 12,173
业界知名的测试用例自动生成工具 EvoSuite 15,725 73,790
② 在等价类划分是增加更多的深层函数信息不能提升工具的覆盖效果
覆盖到的分支数 花费成本(美元)
基于大语言模型的等价类划分测试工具 19,100 42.84
带深层信息的基于大语言模型的等价类划分测试工具 19,765 53.75
17. 结论
① 基于大语言模型的等价类划分测试工具的生成效果远好于传统的
基于搜索的软件测试生成工具以及符号执行工具,证明了将大语
言模型与等价类划分测试结合可以显著提高测试效率。
② 提供待测方法调用的更深层次代码并没有显著提高大语言模型划
分等价类的效果,反而大大增加了成本。
18. 02
基于大语言模型的
测试输入增强
19. 测试输入增强
测试输入增强:就是在现有测试用例的基础上为测试生成更多样化的输入,来覆盖不同的场景
示例:测试登录功能
增强前
增强后
常规输入 用户名: user123
密码: password123
用户名包含特殊字符 用户名: user!@#
密码: password123
空用户名 用户名:
密码: password123
超短密码 用户名: user123
密码: p
20. 基于大语言模型的测试输入增强
大语言模型凭借其语义理解和常识推理能力,能够在现有测试用例的基础上快速生成
多样化的输入组合,覆盖更多场景和边界情况
示例:测试应用在不同区域下的搜索功能,软件依据地区和时区提供符合当前区域的搜索结果
有效输入
参数名 参数含义
region 地区名称
query 搜索的内容
tz_name 时区名称
version 应用的版本号
生成输入
无效输入
地区与时区不匹配
大语言模型虽然可以快速生成大量多样化的测试输入,但缺少对参数间约束的理解,
导致大多数生成的输入不可靠,增强效果有限
21. 流量数据
使用
系统用户
录制
待测试系统
流量数据
流量数据是用户操作产生的真实测试用例,且所有数据都符合参数之间的约束条件
22. 基于流量数据的大语言模型测试输入增强工具
① 工具从流量数据中提取参数间约束关系
随机选择部份流量信息做示例
region
&
tz_name
可能关联
流量数据
截取关联字段
以约减数据量
潜在约束关系的参数对
模型推断
具体约束
经过约减的流量数据
tz_name 必须
与 region 的实
际时区一致
模型推断出的约束
23. 基于流量数据的大语言模型测试输入增强工具
② 结合参数间约束关系,辅助大语言模型生成高质量测试输入以实现输入增强
tz_name 必须
与 region 的实
际时区一致
LLM 分析出的约束条件
生成输入
结合约束生成的有效输入
生成了更多种类的地区类型
24. 工具效果
我们工具已在某企业的 2 个业务模块上进行落地实验,涵盖不同的功能接口。结果如下:
① 基于流量数据的大语言模型测试输入增强工具协助团队提升了代码覆盖率
搜索用户评论 获取热搜词
增强前的行覆盖率 34.12% 29.93%
增强后的行覆盖率 35.90% 31.73%
② 去掉预分析及流量约减后,提取出的有效约束数量减少
搜索用户评论 获取热搜词
含有预分析时提取的有效约束数量 31 25
去除预分析时提取的有效约束数量 10 9
25. 结论
① 利用实际的流量数据与大语言模型结合进行测试输入增强,可以
生成更多符合系统实际运行场景的测试输入,从而提高测试的全
面性和覆盖率。
② 预分析及流量约减对有效约束的提取至关重要,可以有效减少
LLM 处理过程中可能产生的幻觉问题,避免因数据过载或不相关
信息干扰导致的错误推断。
26. 03
基于大语言模型的
场景测试用例生成
27. 测试场景
测试场景:描述用户在某个具体情况下会怎么操作软件,用来检查系统在这个情况下能不能正常工作。
示例:测试用户网络购物的场景
搜索想购买的商品名称
点击商品进入详情页
点击立即购买
选择地址和支付方式
点击支付按钮
28. 场景测试用例
场景测试用例由操作、测试输入、预期结果构成
示例:用户购买手机的场景测试用例
操作 测试输入 预期结果
步骤 1 搜索 手机 预期显示手机商品
步骤 2 查看详情 其中一个手机 预期加载该手机详情
步骤 3 购买 当前详情页中的手机 预期进入结算页面
步骤 4 修改 地址和支付方式 预期成功修改地址和支付方式
步骤 5 提交 结算详情 预期返回支付成功提示,并生成订单号
29. 传统人工编写场景测试用例代码
① 操作步骤:根据测试用例描述文档,结合 API 文档或与开发人员沟通,人工逐步模拟用户的操作流程。
② 测试输入:根据测试需求,手动准备场景需要的测试输入。
③ 预期结果:通过理解业务逻辑,手动编写断言验证每一步操作后产生的结果是否正确。
人工理解推断后编写
API 文档
场景测试用例代码
测试用例描述文档
30. 基于大语言模型生成场景测试用例的挑战
我们尝试利用大语言模型的自然语言理解和代码生成能力,直接通过大语言模型解析测试用例描述文档和 API 文档,
生成测试用例代码,但效果不佳。经分析,主要原因是:
① 测试用例描述文档编写质量参差不齐
② API 文档维护不及时
需要真实且符合测试用例描述文档的实时数据
31. 场景流量数据
场景流量:在测试场景下,系统按顺序发送和接收的所有网络请求与响应。
示例:用户购买手机场景下的一条场景流量数据
操作步骤 用户输入 系统输出
条目 1 搜索 手机 手机商品列表
条目 2 查看详情 其中一个手机 该手机的详情
条目 3 购买 当前详情页中的手机 显示进入结算页面
条目 4 修改 地址和支付方式 成功修改地址和支付方式
条目 5 提交 结算详情 返回支付成功提示,并显示订单号
由此可见,场景流量与实际测试用例高度相关,且实时录制,避免了API文档维护不及时的问题
32. 基于大语言模型的测试用例生成工具
基于录制的场景流量数据,结合大模型对测试用例描述文档的语义理解,生成场景测试用例
场景流量信息
场景测试用例代码
测试用例描述文档
33. 工具效果与结论
目前工具已在某企业的 6 个业务功能上进行落地实验,分别为:
① 用户信息修改功能
② 钱包信息修改功能
③ 音源合同创建功能
④ 音乐制作人分成修改功能
⑤ 专辑信息修改功能
⑥ 专辑上架功能
用于验证专辑信息修改功能的测试用例
该工具在实际应用中能够大幅提升场景测试用例生成的自动化水平,
显著降低了对人工参与的依赖,具备进一步推广和应用的潜力。
34. 04
基于大语言模型的
跨APP测试用例迁移
35. 移动应用测试
测试用例
发现Bug
移动应用
36. 移动应用测试的挑战
测试生成
功能验证仍需人工介入
如何获取测试用例
解决方案
人工编写
耗费人力
测试用例迁移
37. 测试用例迁移
迁移到目标应用
源应用的测试用例
目标应用
前提:
Ø 相似应用
Ø 源应用有测试用例
Ø 目标应用的功能与源应用的测试用例功能保持一致
购物清单
应用程序
开支记录
应用程序
测试用例
IO Shopping List
测试用例
Shopping List
Money Tracker
EasyBudget
38. 测试用例迁移的挑战
事件:测试执行过程中发生的操作
两大挑战
执行流差异
事件不一致
点击事件
源应用测试用例中的事件执行顺
序不适用于目标应用程序。
目标应用中的类似功能与源应用
的事件有较大差异。
39. 案例分析
源购物清单应用的测试用例:测试价格降序功能,下图为该测试用例的流程图
源测试步骤:Family清单 → 更多选项 → 设置 → 排序 → most expensive first → 断言
40. 案例分析
而在目标应用中的价格降序功能的工作流却发生了变化,下图为流程图
目标测试步骤:Family清单 → 更多选项 → 排序 → Descending → Price → 断言
41. 测试用例迁移的挑战
源测试用例:Family清单 → 更多选项 → 设置 → 排序 → most expensive first → 断言
目标测试用例:Family清单 → 更多选项 → 排序 → Descending → Price → 断言
挑战:执行流差异
设置功能缺失
挑战:事件不一致
Descending &
Price
most
expensive first
42. 利用大模型克服挑战
源测试用例:Family清单 → 更多选项 → 设置 → 排序 → most expensive first → 断言
目标测试用例:Family清单 → 更多选项 → 排序 → Descending → Price → 断言
预先收集了点击更多
选项后会出现的功能
设置功能缺失
我知道点击设置
是为了进行排序
我还知道点击更多
选项后有排序功能
那就跳过设置这步
直接进行排序
上下文推理能力
自然语言理解能力
43. 利用大模型克服挑战
源测试用例:Family清单 → 更多选项 → 设置 → 排序 → most expensive first → 断言
目标测试用例:Family清单 → 更多选项 → 排序 → Descending → Price → 断言
Descending &
Price
上下文推理能力
most
expensive first
自然语言理解能力
44. 方法
两大难题
45. 控件上下文
点击后弹出
控件上下文指的是控件所在的环境和语境
例如:
Ø 点击:更多选项
Ø 弹出:选项栏
得到:
更多选项按钮的上下文:
点击后出现新建列表,设置等功能
46. 控件上下文
数据集
控件的ID、坐标、描述
37个应用
控件的ID、坐标、描述 + 控件上下文
结论: 提供控件基本信息与控件上下文的实验迁移成功率上升了20%,但执行耗时慢了10倍。
考虑到测试迁移并不是一个对时间要求特别紧迫的任务,所以我们采用了控件上下文的方法。
#Success Rate
#Time
提供上下文 89% 48
不提供上下文 69% 4.5
#Success Rate 成功迁移率
#Time 迁移1条测试用例的平均耗时(min)
553个测试
迁移任务
47. 控件识别
控件识别是测试迁移的关键内容
如何识别?
48. 利用XML进行控件识别
XML布局文件的功能是通过文本形式描述应用界面
包含了界面的各个控件的属性:
Ø ID
Ø 坐标
Ø 描述
Ø ...
源测试用例
目标界面的XML
49. 利用图像进行控件识别
图像即应用界面的图形
包含界面的各个控件的图形元素
源测试用例
目标界面的图像
50. XML vs 图像
数据集
37个应用
结论: 利用图像进行控件识别的迁移成功率大幅下降,下降了48%。因为XML文本信息提供了
精准的布局信息和坐标,支持测试迁移任务的顺利执行。
#Success Rate
#Success Rate:成功迁移率
XML 89%
图像 41%
553个测试
迁移任务
51. Sota对比
指标
数据集
工具对比
我们的工具AutoTM
37个应用
553个测试
迁移任务
迁移成功率 =
成功迁移数量
总测试用例数量
学术前沿论文的工具Sota
结论: 我们工具的迁移成功率为89%,Sota工具的迁移成功率为57%,由此可见我们方法的有效性。
#Event
AutoTM
Sota
4.5
#Oracle
1.75
#Success Rate #Time
89% 48
57% 10
#Event:平均事件长度
#Oracle:平均断言长度
#Success Rate:成功迁移率
#Time:迁移1条测试用例的平均耗时(min)
52. 三
挑战与展望
53. 大语言模型应用于自动化测试面临的挑战
01
幻觉
LLM 在生成测试内容时可能出现“幻觉”,即生成的内容偏离实际需求或逻辑,导致不符合预期的结果。
02
常规输出与边界条件测试的矛盾
LLM 倾向于生成常规场景下的合理输出,而边界条件测试往往涉及极端或异常状态,这与模型的常规输出偏好形成
矛盾。
03
复杂和不常见输入结构的测试用例的生成困难
一些测试需要使用非常规的输入数据结构,但 LLM 往往对这种不常见结构的生成存在困难。
04
文档缺失对预期结果生成的影响
Oracle(预期结果)的生成依赖于完整的文档支持,但在文档缺失或不完善时,LLM 难以生成可靠的测试预期结果。
54. 大语言模型赋能自动化测试的展望
01 测试用例自动化生成
02 赋能传统测试技术——检测业务逻辑相关缺陷
03 赋能传统测试技术——提升搜索效率
55. 谢
谢