代码覆盖率管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多个测试用例都覆盖 不到的代码
找到历史废弃代码
收集方法覆盖率,为废 弃代码判断提供依据
度量自动化用例
为自动化用例提供覆盖率
统计情况
帮助代码优化
分析热区代码,为优化提供
支撑
精准回归
构建代码调用关系,自动 选择用例
代码实时染色
新型代码调试工具
帮助定位研发过程中的问 题
辅助代码走读
使业务同学快速了解代 码
支持App:
支持多人协作阶段
覆盖率数据dump时机可 将覆盖率数据与版本号

绑定
增加上传覆盖率数据功能
部署到打包平台
遇到了瓶颈
支付宝部分组件
支持App的全部组件
来自上帝的吐槽
数据到底有没有传上去o_O??? 我擦嘞覆盖率包又crash了!!!
我都测了好几遍了,怎么还是没有数据!!!
难用 测毛线覆盖率啊:-(
咦?我测到这段代码了,怎么显示没有覆盖? 啥时候才能看到报告啊? 装个覆盖率包慢死了
插桩导致被
gcov解析gcno 、gcda过慢导
测App体积 严重膨胀
致报告生成不
及时
没有在界面 上给用户明
__gcov_flush 存在crash风险
还没有dump
确提示
完APP就被
kill了
客户端覆盖率
数据dump慢
数据处理
仓库服务
实时处理节点X多组
状态/控制数 据流
APP
受控 收集模块
执行数据流 控制数据流
连接控制 器
执行数 据流
实时解 析器
数据流
存储服务
数据推送
前端应用
控制界面
设备 管理
会话 控制
报告渲染器
报告 渲染
数值 计算
操作 APP
用户
计算进程
计算进程
报告展示
操作会话
代码实时染色产出物
实时收集计算执 行数据 +
卡点
代码 调试
性能 优化
精准 回归
用例 优化
代码 下线

移动端覆盖率服务端演进 多模块 APP 本地覆盖率收集
模块仓库
拉取依赖
预编译模块
Bundle 1 Bundle 2 Bundle 3

产生
App
覆盖率包
构建
代码仓库
拉取代码 目标模块 代码
编译
目标模块 产物
插桩
插桩器
执行数据
联合计算
覆盖率报告
H5实时覆盖率
Android实时覆盖率
一个基于流式的数据上报模块 JaCoCo
Android实时覆盖率
自研覆盖率技术iOS方案架构图
打包平台
打包平台业务层
Web层业务逻辑
持续集成
打包脚本层 release包脚本
debug包脚本
行级覆盖率包脚本
函数级覆盖率包脚本
白名单机制
Clang编译器 Driver自动链接
对覆盖率的理解
代码覆盖率是银弹 100%的覆盖率就能保证程序没有 bug
No
代码覆盖率是一种度量工具
可以使用它了解测试的效果,发现测试的死角,从而实现精准测 试,为软件质量保驾护航
Yes
分类收集覆盖率并应用
人工测试
自动化用例
App
Monkey
线上用户

覆盖率分析 服务
多维度 覆盖率 数据
研发流程 质量 打通
MB)
326. 1
dump耗时(单 位s)
操作 APP 用户
收集
计算节点
计算
仓库 1 仓库 2 仓库 3
报告服务器
bundle 1 bundle 2 bundle 3

结果
多用户覆盖率在线收集计算产出物
多 bundle 统计 +
变更覆盖率
业务线汇总
怎样让覆盖率 帮助提高测试效率?
代码实时染色 - 多用户数据实时收集计算
设备
路由/负载均 衡
编译中间产物
源代码
本地覆盖率报告
怎样支持多人协作? 怎样突出测试重点? 怎样推动覆盖率改进?
多用户覆盖率在线收集计算
编译中间文件
App 覆盖率包
构建平台
构建
APP 覆盖率 包
Bundle 1
Bundle 2
Bundle 3

安装
App 覆盖率包
构建
覆盖率服务
手机
分割
计算
上传覆盖率数据
合并
生产报告
独立统计空间
厂商
进化的覆盖率
进化的覆盖率——客户端演化篇
主讲人:翟帅 来自支付宝技术团队 负责业务: 负责iOS代码覆盖率系统研发 负责研发基于图像识别的自动化测试系统
客户端覆盖率技术演进
使用开源方案阶段:
单机阶段 iOS使用的gcov方案
Android使用 JaCoCo方案 H5使用istanbul方案
gcov方案的缺陷
编译器的缺陷
梦想还是要有的!
假如一遍边操作一边就能看到覆盖率的变化岂不是很爽!!!
嘿小哥醒醒别睡了!!!
怎么搞上帝才能满 意?
覆盖率包体积还得小
做梦呢
跑的稳稳地
打包还得块
移动端覆盖率技术演进
改造istanbul
H5实时覆盖率
一个基于流式的数据上报模块 简化版本的istanbul
代码覆盖率管理 实时代码染色
覆盖率是什么
代码覆盖是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。
代码

桩 器
编译
插桩后代码
运行
覆盖率数据
覆盖率的作用
了解测试情况
测试过程中覆盖和未覆盖的 地方,可能存在的风险
常规覆盖率工具
形成质量指标
作为版本发布的前 置要求
ຫໍສະໝຸດ Baidu
发现测试死角
APLCov
覆盖率数据 合并服务
APLCov
线下服务
从伙伴平台拉取 apln数据
从线上存储服务拉 取合并后的apda数

APLCov
Info文件
gitlab
genhtml 报告
自研覆盖率技术方案原理图
.c .cpp .m .mm file
compiler
1
插桩阶段
LLVM
AliapyInstrument插桩程序
分析程序指令并在相关 指令之间插入桩点指令
.o file
linker
2 链接阶段
link probe_lib
lib
覆盖率报告
记录函数ID、文件名、函 数名、行号 .apln file
记录函数ID、执行 次数
.apda file
dump
App
得到可执行文件
覆盖率数据解析阶段
APLCov
4
APLCov 根据hash值将apln文件 和apda文件合并,得到覆盖率数据
LLVM Pass 实现插桩
运行时Lib
探针实现 lib
带有覆盖率的App程序
App业务模块
模块1
模块2
模块3...
覆盖率数据上报模块
数据上传
数据压缩
数据上传策略
数据dump策略
配置中心
日志输出
覆盖率数据收集模块 收集覆盖率SDK
probe_lib 控制探针
云测平台
线上服务
数据存 储服务
覆盖率数据 合并服务
App
运行App阶段
3
覆盖率收集程序 记录执行函数的hash和次数 负责将覆盖率数据写入磁盘
性能指标对比——用Clang作为被测程序
插桩后产物体 积对比(单位
MB)
913. 0
执行时间 (单位 小
时)
5.2 6 4.9 1
内存开销 (单位 MB)
12. 9
数据解析耗时 (单位 秒)
1071 .0
覆盖率数据文 件大小(单位
相关文档
最新文档