3、数据上报、接收、存储:
(1)什么时候上报数据
如果频繁上报,可能会影响App的正常使用,也并没有必要。所以考虑在一些 察觉不到/不太Care的 操作节点进行数据上报。
(2)上报哪些内容
(3)数据存储
服务端接收数据后,根据project、version、uniqueId,查询出记录的 record数据,与上报的record 数据 做按位或计算,即 只要有1出现,该位即为1,已覆盖,再将结果存储起来
所以覆盖率数据都是按 uniqueId 进行区分存储的,即每个安装包的覆盖率数据都单独存储。
4、数据合并计算:
(1)两个安装包的覆盖率数据如何合并
数据库中存储的覆盖率数据是每个安装包的数据以及基础信息,当两个安装包并不是同一个Tag,有代码差异的时候,是不能直接进行按位或计算合并数据的。
这时 methodMapping文件就起到了作用。查找到两个安装包对应的methodMapping文件,对其中的内容进行解析,就可以分别获得两个安装包中的所有类名、方法名、方法签名等信息. 通过循环对比,即可进行数据合并:
为了区分两个不同Tag的安装包,方便后续描述的理解,这里将Tag创建时间较早的安装包称之为Old, 将Tag创建时间较晚的安装包称之为New.
最终会得到以New 的代码为准的覆盖率数据,即相对较新代码的整体覆盖率数据
(2)要合并哪些安装包
我们存储了那么多安装包的覆盖率数据,那么在实际的客户端迭代流程中,我们应该合并哪些安装包的数据,才可以帮助我们进行分析,实现我们的方案目的呢?
我们对 单次打包纬度、单Tag纬度、版本纬度、分支纬度 几种统计纬度进行了利弊分析&对比,最后我们选择使用分支纬度进行覆盖率数据的汇总统计,即根据Tag的前后节点关系,合并同一分支线上的所有Tag(以前一版本的发版Tag为起点,以当前分支线中最新的Tag为终点)的所有安装包的覆盖率数据。
(3)多个安装包的数据集如何快速合并
为了保证合并计算效率,采用多线程来处理。
流程
1、简化流程

2、打包流程

3、测试过程中上报流程

4、自动计算流程

平台功能
1、查看指定版本、分支的增量代码覆盖率数据 & 依赖组件工程的增量代码覆盖率数据

2、查看组件工程中详细的类增量覆盖率数据
3、查看类增量代码中逻辑分支的详细覆盖状态 & 实时计算、渲染


4、选择Tag区间,临时计算增量覆盖率数据
5、选择同版本两个Tag ,对比计算增量覆盖率数据

后续规划
分支统计纬度的优缺点前面已经提到过,接下来我们会增加行覆盖和方法覆盖统计纬度,并且会结合Git diff,计算/渲染 Diff 代码的覆盖率数据。
现在iOS的插桩方案有些简单粗暴,效率也并不高,所以已经开始着手重构。
我们也计划在平台上增加更多的人性化的功能,提升覆盖率数据的分析效率、提升整体的使用体验。
好了,转转App代码覆盖率方案 就先给大家介绍的这里,希望能对大家有所帮助。
如果喜欢我们分享的内容,欢迎点赞、在看、分享~