进化的覆盖率--实时代码染色

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. e t s e T o rH e m e t s e T o H r e m e t s e T o rH e m
2. e t s e T o rH e m 进化的覆盖率--实时代码染色色 e m o H r te 蚂蚁金金金服——周为、翟帅 s e T e t s e T o rH e m
3. 覆盖率是什什么 代码覆盖是软件测试中的一一种度量量,描述程序中源代码被测试的比比例例和程度,所得比比例例称为代码覆盖率。 e t s e T o rH e m 代码 e t s e T o H r e m 插桩器 编译 插桩后代码 o rH 运行行行 e t s e T 覆盖率数据 蚂蚁金金金服 e m
4. 覆盖率的作用用 e m 了解测试情况 o H r e t s e T 形成质量指标 发现测试死角 找到历史废弃代码 作为版本发布的前置要求 多个测试用例都覆盖不到 的代码 收集方法覆盖率,为废弃 代码判断提供依据 度量自动化用例 帮助代码优化 精准回归 为自动化用例提供覆盖率 统计情况 分析热区代码,为优化提供 支撑 构建代码调用关系,自动 选择用例 测试过程中覆盖和未覆盖的地方, 可能存在的风险 常规覆盖率工工具 e t s e T o H r 代码实时染色色 e m e t s e T 新型代码调试工具 辅助代码走读 帮助定位研发过程中的问题 使业务同学快速了解代码 蚂蚁金金金服 o rH e m
5. 对覆盖率的理理解 e t s e T o rH e m 代码覆盖率是银弹 e m 100%的覆盖率就能保证程序没有 bug e t s e T o H r 代码覆盖率是一一种度量量工工具 可以使用用它了了解测试的效果,发现测试的死⻆角,从而而实现精准测 试,为软件质量量保驾护航 No e Yes m o H r e t s e T 蚂蚁金金金服
6. 覆盖率数据流图 研发流程打通 e t s e T 客户端 o rH e m 质量量 卡点 人工测试 自动化用例 插桩 收集 上传 Monkey 线上用户 … e t s e T o H r e m 覆盖率服务端 计算 汇总 代码 调试 多维度 覆盖率数据 性能 优化 精准 回归 分析 用用例例 优化 e t s e T … 蚂蚁金金金服 o rH 代码 下线 e m
7. e t s e T o rH e m e m o 进化的覆盖率——服务端演化篇 H r e t s e T e t s e T o rH e m
8. 覆盖率服务端演进 — 多模块 APP 本地覆盖率收集 o rH 模块仓库 e t s e T 代码仓库 e m 预编译模块 Bundle 1 拉取依赖 Bundle 2 Bundle 3 … 构建 拉取代码 目目标模块 代码 编译 插桩 插桩器器 e t s e T 目目标模块 产物 e m App 覆盖率包 o H r 联合计算 产生生 执行行行数据 覆盖率报告 编译中间产物 源代码 e t s e T 蚂蚁金金金服 o rH e m
9. 本地覆盖率报告 e t s e T o rH e m e t s e T o H r e m 怎样支持多人协作? 怎样突出测试重点? 怎样推动覆盖率改进? e t s e T 蚂蚁金金金服 o rH e m
10. 覆盖率服务端演进 — 多用用户覆盖率在线收集计算 编译中间文文件 e m App 覆盖率包 e t s e T o rH 构建平台 构建 报告服务器 APP 覆盖率包 Bundle 1 手机 Bundle 2 Bundle 3 … 安装 上传覆盖率数据 e t s e T 操作 APP App 覆盖率包 o H r e m 用用户 bundle 1 覆盖率服务 bundle 2 分割 计算 合并 生产报告 bundle 3 … 仓库 1 计算节点 仓库 2 仓库 3 构建 收集 计算 e t s e T 蚂蚁金金金服 o rH e m 结果
11. 多用用户覆盖率在线收集计算产出物 多 bundle 统计 e t s e T o rH e m + 变更更覆盖率 e t s e T o H r e m 业务线汇总 e 怎样让覆盖率 m o 帮助提高测试效率? H r e t s e T 蚂蚁金金金服
12. 覆盖率服务端演进 — 代码实时染色色 仓库服务 设备 o rH 路路由/负载均衡 e t s e T 前端应用用 数据处理理 e m APP 实时处理理节点X多组 状态/控制数据流 连接控制器器 受控 收集模块 执行行行数据流 控制数据流 操作 APP 控制界面面 e t s e T 执行行行数据流 实时解析器器 计算进程 o H r 数据流 计算进程 设备 管理理 e m 存储服务 会话 控制 报告渲染器器 数据推送 报告 渲染 数值 计算 e t s e T 报告展示 用用户 蚂蚁金金金服 o rH e m 操作会话
13. 代码实时染色色产出物 e t s e T o rH e m e t s e T o H r e m 实时收集计算执行行行数据 + 独立立统计空间 e t s e T 蚂蚁金金金服 o rH e m
14. 进化的覆盖率 e m o H 进化的覆盖率——客户端演化篇 r e t e s e m T 主讲人:翟帅 o H r e 来自支付宝技术团队 t s e T 负责业务: 负责iOS代码覆盖率系统研发 负责研发基于图像识别的自动化测试系统 e t s e T o rH e m
15. 客户端覆盖率技术演进 使用用开源方方案阶段: e m 单机阶段 e t s e T o rH iOS使用用的gcov方方案 支支持多人人协作阶段 覆盖率数据dump时机可控 支支持App: e m 增加上传覆盖率数据功能 Android使用用的JaCoCo方方案 H5使用用istanbul方方案 将覆盖率数据与版本号绑定 e t s e T o H r 部署到打包平台 ? e m 遇到了了瓶颈 支支付宝部分组件 支支持App的全部组件 e t s e T 蚂蚁金金金服 o rH
16. 来自自上帝的吐槽 数据到底有没有传上去o_O??? e t s e T o rH e m 我擦嘞覆盖率包又又crash了了!!! 还没有dump 完APP就被 kill了 我都测了了好几几遍了了,怎么还是没有数据!!! 难用 e t s e T o H r 测毛毛线覆盖率啊:-( 咦?我测到这段代码了了,怎么显示没有覆盖? 啥时候才能看到报告啊? 装个覆盖率包慢死了了 e m gcov解析 gcno、gcda 过慢导致报告 生成不及时 没有在界面 上给用户明 确提示 插桩导致被 测App体积 严重膨胀 __gcov_flush 存在crash风险 客户端覆盖率 数据dump慢 gcov方案的缺陷 e t s e T 编译器的缺陷 蚂蚁金金金服 o rH e m
17. 梦想还是要有的! 假如一遍边操作一边就能看到覆盖率的变化岂不是很爽!!! e m o 怎么搞上帝才能满意? H r e t s e T 嘿小哥醒醒别睡了!!! 做梦呢 覆盖率包体积还得小 e t s e T o H r e m 跑的稳稳地 打包还得块 e t s e T 蚂蚁金金金服 o rH e m
18. 移动端覆盖率技术演进 e t s e T o rH e m H5实时覆盖率 一个基于流式的数据上报模块 改造istanbul 简化版本的istanbul o H r e m H5实时覆盖率 e t s Android实时覆盖率 e T 一个基于流式的数据上报模块 Android实时覆盖率 JaCoCo e t s e T o rH e m
19. 自自研覆盖率技术iOS方方案架构图 打包平台 打包平台业务层 o rH Web层业务逻辑 e t s e T e m 持续集成 release包脚本 debug包脚本 行级覆盖率包脚本 函数级覆盖率包脚本 白名单机制 线上服务 模块2 模块1 模块3... 数据上传 o H r 运行时Lib e m 数据压缩 e t s e T 数据上传策略 数据dump策略 配置中心 Driver自动链接 LLVM Pass 实现插桩 App业务模块 覆盖率数据上报模块 打包脚本层 Clang编译器 云测平台 带有覆盖率的App程序 数据存 储服务 覆盖率数据合 并服务 覆盖率数据合 并服务 APLCov APLCov 线下服务 从伙伴平台拉取apln数据 从线上存储服务拉取合 并后的apda数据 日志输出 覆盖率数据收集模块 收集覆盖率SDK 探针实现lib APLCov e t s e T genhtml probe_lib 控制探针 o rH gitlab Info文件 报告 蚂蚁金金金服 e m
20. 自自研覆盖率技术方方案原理理图 .c .cpp .m .mm file e t s e T o rH e m 覆盖率报告 compiler 插桩阶段 1 记录函数ID、文文件名、函 数名、行行行号 e m 覆盖率数据解析阶段 LLVM o H r .apln file AliapyInstrument插桩程序 分析程序指令并在相关 指令之间插入入桩点指令 e t s e T 4 APLCov APLCov 根据hash值将apln文文件 和apda文文件合并,得到覆盖率数据 记录函数ID、执行行行 次数 .o file .apda file dump linker 链接阶段 link 2 运行行行App阶段 覆盖率收集程序 App 3 e t s e T 记录执行行行函数的hash和次数 负责将覆盖率数据写入入磁盘 probe_lib lib App 得到可执行行行文文件 蚂蚁金金金服 o rH e m
21. 性能指标对比比——用用Clang作为被测程序 插桩后产物体 积对比(单位 MB) 1000.0 e t s e T 913.0 o rH 750.0 500.0 308.4 e m 内存开销(单 位 MB) 执行时间(单 位 小时) 12.9 13.0 6.0 数据解析耗 时(单位 秒) 1200.0 覆盖率数据 文件大小 (单位 MB) 140.0 400.0 e m dump耗时(单 位s) 1071.0 5.26 4.91 4.5 9.8 3.0 6.5 1.5 3.3 e t s e T 6.6 7.1 6.7 o H r 326.1 300.0 105.0 600.0 200.0 70.0 300.0 100.0 35.0 900.0 323 311.9 250.0 0.93 0.42 0.0 0.0 未插桩 0.0 Gcov Alipay行级 0.0 Alipay方法级 25.0 131.0 0.0 e t s e T 75.0 0.0 蚂蚁金金金服 o rH 0.1 e m
22. 自自研覆盖率方方案演示 e t s e T o rH e m e t s e T o H r e m e t s e T 蚂蚁金金金服 o rH e m
23. 真香香警告——自自研覆盖率带来了了什什么? e t s e T o rH e m 吐槽声音少了,好评声多了 找我们排查问题的人少了 e m o H 代码覆盖率也可以用来排查问题了 r e t s e T 测试同学的负担轻了,工作效率高了 代码覆盖率的应用更广了 e t s e T 蚂蚁金金金服 o rH e m
24. 技术红利利 业务方可以复用覆盖率方案 意义:极大降低业务开发成本 e t s e T o rH monkey测试 提供了一种动态分析框架 意义:极大的降低了技术门槛,为动态分析的技术探索和创 新提供支撑。 e m 热区分析 code_cover 覆盖率功能 精准回归 o H r 自动化埋点 e t s e T probe_lib 提供探针的实现、保证线程安全 e m 调用链路分析 伙伴平台可以打出带有这些探针的包 行级别插桩能力 函数级别插桩能力 拥有控制编译器读取、修改IR(中间代码)的能力 提供一种在IR代码上做 静态分析的手段 依赖分析、泄漏分析、crash e t s e T 静态分析能力 蚂蚁金金金服 o rH e m
25. 进化的覆盖率—总结 实时生成报告 统一插桩 e t s e T o rH 实时上传 多次数据合并 功能丰富 跨版本迁移 单机版覆盖率 覆盖率入门阶段 在单元测试中使用 推动的动力: e m 支持多人协作情 况下的覆盖率 覆盖率平台化 支撑质量红线 动态分析框架 数据解析 自动收集/上传 数据展示维 度的丰富 插桩 e m 函数级覆盖率 实时代码覆盖率 e t s e T 多版本管理 o H r 5 自研覆盖率 基于覆盖率技 术提供一个创新 实验平台 提升monkey算法 方法执行耗时 依赖分析 调用链路分析 变更覆盖率 以版本设备为 维度展示数据 满足业务方提出的需求 效能提升 创新 e t s e T 蚂蚁金金金服 o rH e m
26. 招聘广广告 支付宝终端工程技术部招人了 o rH App打包构建 e t s e T App性能分析 e m App诊断分析 图像识别 自动化测试工具 e t s e T H5、小程序、 浏览器内核 JAVA、算法、iOS、Android、前端, 都有岗位哦,职级目目前不不设上限的。 zhaishuai.zs@antfin.com o H r e m e t s e T 蚂蚁金金金服 o rH e m
27. e t s e T o rH e m e t s e T o H r e m e t s e T o rH e m

trang chủ - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 14:28
浙ICP备14020137号-1 $bản đồ khách truy cập$