基于AI算法实现精准测试

2021-09-04 69浏览

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