基于AI算法实现精准测试
如果无法正常显示,请先停止浏览器的去广告插件。
1. 360中台-高级效率平台开发工程师
基于AI 算法实现精准测试
宋泽坤
360中台-效率平台开发高级工程师
主办方:
2. 背景及技术挑战
3. 需求背景
1. 敏捷体系中,产品迭代速度比较快(一般为两周),测试人员测试周期比较短,产品影响
范围比较大。测试人员在短时间内保质保量,难免会出错。
2. 回归测试需要执行大量的自动化测试脚本,和手工测试脚本,可能会消耗大量的时间。
3. 人工评估测试范围,门槛高,需要一定的代码基础,不同语言的项目,需要的基础也不相
同。
4. 用例和函数的对应关系无法反应代码内容的更改,表现为新增,修改,删除。
4. 技术挑战
精准测试需要采集代码和用例之间的关系,根据代码变化的内容,推算出回归测试测
试的范围和提高自动化测试效率。
代码覆盖度统计
Android:开源 Jacoco 二次开发。
Windows:
VSPerfCmd,VSPerfMon。
Java 服务端: Jacoco 支持 on-
the-fly。
用例和代码之间的关系
用例重拍
Android: 代码覆盖 利用精准测试评估功能
度实时统计。 回归测试范围和提高自
Windows: 单个任务分 动化测试效率。
发统计。
5. 实现方案
6. 精准测试完整步骤
模型,部署预测
搭建网络
搭建网络模型,训练分类
特征工程
根据采集的关系数据, 提取数据
建立关系
建立用例和代码之间的对应
S1
关系,收集这些关系数据。
S2
特征。
S3
函数
S4
7. Android 整体架构-自动化用例
服务端
Android APK
用例服务
Case 1
代码覆盖度统计
执行
采集数据上传
Jacoco
Web 界面展示
覆盖度数据处理
完整case 数据
模型训练
Case 2
Case 3
APK 源码
源码上传
对 case 重排推荐
代码比对
代码 diff
模型预测
8. Android 整体架构-功能用例
APK 源码
服务端
Android APK
禅道用例系统
Case 1
代码覆盖度统计
执行
采集数据上传
Jacoco
Web 界面展示
覆盖度数据处理
完整case 数据
模型训练
Case 2
代码比对
Case 3
上传标记状态
代码 diff
对 case 重排推荐
模型预测
9. Windows整体架构-C语言
数据采集器
代码覆盖度统计
项目
代码覆盖度统计
用例服务
Case 1
VSPerfCmd.exe
执行
服务端
数据
Case 2 XML
VSPerfMon.exe
覆盖度数据处理
数据
模型训练
Case 3 XML
Case 2
Case 3
Case 1 XML
代码比对
项目源码
对 case 重排推荐
Web 界面展示
diff
模型预测
10. 数据采集特别标记
配置参数
Android 执行信息
CASE ID
DEVICES ID
Windows 执行信息
Case 唯一标识
Case 唯一标识
设备唯一标识
代码所属文件名
APP MD5
APK 唯一标识
项目运行环境
USER ID
CASE ID
用户唯一标识
FILE NAME
运行环境
11. Android 代码实时覆盖度统计优点
集成简单:减少不必要的集成逻辑,方便快捷的集成到项目中。
无代码入侵: 在代码统计的过程中,不允许因为插件集成而增加代码逻辑。
代码实时统计: 划分最小的统计单位,精准对应。
12. Android 代码实时覆盖度数据统计
队列
服务端
EC DATA
Android 实时覆盖
度统计插件
反射 rundata
Jacoco 插件
TCP/IP
EC DATA
EC DATA
覆盖度数据处
理
13. Java 文件和 class 文件对结果的影响
Java 文件 统计结果展示结果准确,获
取文件困难。
Class | APK 文件 1. 反编译后,代码有差距。
2. 对界面展示有影响。
14. 代码实时覆盖度统计-服务端
Java 文件
CASE
ID
EC
EC
统计
行号和代码的映射关系
整体覆盖度指标
+
源码行覆盖数据
Jacoco
解析
单个EC覆盖代码信息
+
源码行覆盖数据
websocket
用例代码映射关
系数据
页面展示
15. 用例和代码对应 – Android自动化用例
选择用例脚本
创建测试任
务
完成 case 执行
开始执行case
标记case
结束测试计划
获取数据并上传
16. 用例和代码对应 – Android功能用例(禅道)
选择测试用例
创建测试任
务
开始执行case 完成 case 执行
标记当前选择
的case 标记当前执行
完毕的case
获取数据并上传
17. 用例和代码对应 – Windows自动化用例
选择测试用例
创建测试任
务
标记当前选择
的case
完成 case 执行
开始执行case
采集代码数据
生成 XML 文件
18. 为什么精准测试需要使用AI算法
类与类存在一个调用关系,函数和函数之间也存在调用关系,在修改的代码片
段中,我们可以根据这种模糊的调用关系,来计算出代码之间一个相似性,从
而推算出相关的用例。而这种计算方式,也是传统编码所达不到的。
19. AI 模型-数据特征结构划分
非结构化数据
结构化数据
类路径
类名
函数名
函数描述
文件名
代码特征
代码片段
20. 结构化数据处理
单个特征
e.g.
分类,转换
归一化
com/xxx/A 1 0.1
com/xxx/B 2 0.2
不存在 com/xxx/C
0
0
21. 结构化数据处理
特征可拆分
拆分
e.g.
com/xxx/A
不存在com/xxx/C
分类,转换
归一化
类名 com/xxx/A
包名 com/xxx
com/xxx
com/xxx
0
0
22. 结构化数据处理
全局特征
纵向特征组合
唯一特征
向量化
e.g.
[String,Boolean,int,Object,未知]
组合
[0,0,0,0,0]
函数A参数类型:String , Boolean, int [1,1,1,0,0]
函数B参数类型:String ,Object, int [1,0,1,1,0]
23. 非结构化数据处理
NLP
代码片段
Jieba_fast LDA
pkuseg word2vec
分词
24. 非结构化数据处理-分词
Stopdict
特殊符号:‘=’,‘:’,‘>’,‘,’,‘;’,‘{’,‘}’,‘’’,……
关键字:class,and,if,else,Exception,public,单字母的词 ……
Userdict
特殊符号:‘||’,‘&&’,‘+=’ ……
25. 非结构化数据处理-NLP
同一模型需要保持相同语言处理算法。
LDA
单词数组
转换句子
word2vec
单词数组
单词词向量
size = 50
抽取话题
topicNum = 8 相对位置求平均
模型保存 模型保存
26. 标签处理
整个问题是一个多分类的问题,不同的用例可能存在相同的特征,在预测用例的时候,需要把
与之关联的用例全部推荐出来。
多标签转换分类:可以把相同特征的标签重新组合成一个新的标签,把多标签分类的问题转换
为单标签分类的问题。
27. 模型训练
项目 A 代码特征数据 版本 1 CASE ID 新标签 XGBT
版本 2 其他特征集合 特征集合 CNN
28. 模型预测
用户请求
TCP/IP
代码特征数据 模型服务
数据来源
(版本信息,
项目名称) 根据数据来源
加载模型
DIFF DATA
训练数据对diff
数据赋值操作
返回 JSON
带入模型
RESULT
29. 模型结构图
30. 应用效果
31. Web页代码覆盖度展示-节点覆盖
32. Web页代码覆盖度展示-代码覆盖
33. 原始数据展示
34. 原始数据展示
35. 推荐功能用例的召回率统计
功能召回率
100%
100% 100% 100% 100%
58.69% 63.04% 65.21% 89.13% 100%
90%
90%
80%
100%
70%
70%
60%
50%
40%
30%
20%
20%
10%
0%
0%
0%
4.34%
32.60%
41.30%
用例比例
36. 自动化用例节约成本
效能提升
测试专家
100%
100%
AI精准测试
100%
99%
100%
89%
12.50%
精准测试时间消耗
20%
项目了解程度
自动化脚本执行时间
预估精准度
37. 扩展和优化方向
38. 语言方面的扩展
这套模型现阶段只是初步的实现了一部分的功能,当前模型可以在各种语言之
间进行扩展,比如 IOS, PYTHON, PHP…..
智能化生成用例
1. 基于函数步骤对应关系的统计,通过统计函数执行步骤,来规划出当前用例的调用
图,统计出当前的用例步骤,生成新的用例。
2. 基于用例步骤的数据统计,根据代码的 diff 数据,分类用例步骤,生成新的用
例。
39. 优化方向
增加抽象语法树, 控制流, 数据流等结构化数据特征, 提高精准度。
优化网络结构。
跨语言的特征限制 。
40. 谢谢观看