[发明专利]一种基于lcov实现增量代码覆盖率的检测方法、装置及设备在审
申请号: | 201911125848.6 | 申请日: | 2019-11-15 |
公开(公告)号: | CN110928776A | 公开(公告)日: | 2020-03-27 |
发明(设计)人: | 刘练;陈国庆;谢强 | 申请(专利权)人: | 武汉极意网络科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/77;G06F8/41;G06F8/61 |
代理公司: | 武汉知产时代知识产权代理有限公司 42238 | 代理人: | 易滨 |
地址: | 430000 湖北省武汉市东湖开发区大学*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 lcov 实现 增量 代码 覆盖率 检测 方法 装置 设备 | ||
1.一种基于lcov来实现增量代码覆盖率的检测方法,其特征在于,包括以下步骤:
S1、通过Xcode工具来配置编译选项,进入到编译进程中,生成应用程序安装包;其中,将生成的应用程序安装包推送给前端进行安装和运行;
S2、将编译过程中生成的“.gcno”文件进行打包压缩后上传到服务端;
S3、基于步骤S1,在应用程序的运行过程中,调用覆盖率分发函数,生成对应的“.gcda”文件,在运行结束后,从应用程序的沙盒中获取最终生成的“.gcda”文件,在对其进行压缩后,上传到服务端;
S4、在服务端对接收到的“.gcno”文件和“.gcda”文件进行整合后,通过lcov工具,基于整合后的文件生成“.info”文件;其中,生成的“.info”文件将上传至Git-开源的分布式版本控制系统;
S5、调用Git diff命令,将步骤S4生成“.info”文件与基线版本的“.info”文件进行比较,得到增量“.info”文件;
S6、通过genhtml工具,基于所述增量“.info”文件生成覆盖率报告;根据所述覆盖率报告,得到增量代码覆盖率的检测结果。
2.根据权利要求1所述的实现增量代码覆盖率的检测方法,其特征在于,步骤S2中生成的“.gcno”文件中,保存着计数插桩位置和源文件之间的关系,其中,所述计数插桩位置包括函数入口函数、以及分支函数代码行;在插入计数指令的同时即执行Basic Block-基本程序块,基本程序块内的所有指令将进一步顺序执行,当前由编译器将计数指令和程序块的执行数据写入“.gcno”文件。
3.根据权利要求2所述的实现增量代码覆盖率的检测方法,其特征在于,由编译器将计数指令和程序块的执行数据写入“.gcno”文件的过程为:
首先,基于“.gcno”文件包括的组成部分:文件结构、函数结构、Basic Block结构和Basic Block行结构,写入用于识别“.gcno文件”和“.gcda文件”的标识;然后,根据当前写入的标识遍历写入文件地址、函数名和函数在源文件中的起止行数;最后,标记BasicBlock-基本程序块之间便于后续记录函数执行情况的跳转关系。
4.根据权利要求1所述的实现增量代码覆盖率的检测方法,其特征在于,步骤S3中,覆盖率分发函数的入口分发函数是__gcov_flush(),其中,通过调用__llvm_gcov_flush函数和__llvm_gcov_writeout函数,来向“.gcda”文件中写入覆盖率信息。
5.根据权利要求4所述的实现增量代码覆盖率的检测方法,其特征在于,调用__llvm_gcov_writeout函数来向“.gcda”文件中写入覆盖率信息的过程为:
首先,生成对应源文件的“.gcda”文件;
其次,写入用于识别“.gcno文件”和“.gcda文件”的标识;
其次,循环执行llvm_gcda_emit_function函数向“.gcda”文件写入用来标记文件格式的函数信息;所述函数信息包括函数的入口行、出口行、指令代码行;
其次,循环执行llvm_gcda_emit_arcs命令向“.gcda”文件写入Basic Block的执行信息;
其次,调用llvm_gcda_summary_info命令,向“.gcda”文件中写入校验信息;
最后,调用llvm_gcda_end_file命令,结束当前的运行过程。
6.根据权利要求5所述的实现增量代码覆盖率的检测方法,其特征在于,步骤S3中,在应用程序运行结束后,通过HTTP接口将“.gcda”文件上传到服务端。
7.根据权利要求1所述的实现增量代码覆盖率的检测方法,其特征在于,步骤S4中,通过lcov工具生成“.info”文件中包括最终所需得到的覆盖率检测数据,所述覆盖率检测数据包括源码路径、函数名、函数执行次数、函数总数、函数在源文件的位置、行号、行执行次数和行总数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉极意网络科技有限公司,未经武汉极意网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911125848.6/1.html,转载请声明来源钻瓜专利网。