基于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. 谢谢观看

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-24 00:47
浙ICP备14020137号-1 $访客地图$