一种基于lcov实现增量代码覆盖率的检测方法、装置及设备制造方法及图纸

技术编号:23604522 阅读:63 留言:0更新日期:2020-03-28 05:39
本发明专利技术公开了一种基于lcov来实现增量代码覆盖率的检测方法、装置及设备,其中,通过分别将编译过程中生成的“.gcno”文件、在应用程序的运行过程中,调用覆盖率分发函数,生成对应的“.gcda”文件进行打包压缩后上传到服务端;在服务端对接收到的“.gcno”文件和“.gcda”文件进行整合后,通过lcov工具,生成“.info”文件;将生成“.info”文件与基线版本的“.info”文件进行比较,通过得到增量“.info”文件,进一步利用genhtml工具,生成覆盖率报告;根据所述覆盖率报告,得到增量代码覆盖率的检测结果。本发明专利技术将覆盖率检测与整个开发流程紧密结合在一起,生成极具可读性的覆盖率报告,通过覆盖率阈值控制Git push,以确保项目质量。

A detection method, device and equipment for incremental code coverage based on lcov

【技术实现步骤摘要】
一种基于lcov实现增量代码覆盖率的检测方法、装置及设备
本专利技术涉及软件开发代码质量监控领域,更具体地说,涉及一种基于lcov来实现增量代码覆盖率的检测方法、装置及设备。
技术介绍
在软件开发的过程中,代码覆盖率是度量开发完整性的一个手段,为了进一步提高软件的交付质量,监测开发过程中的遗漏,降低线上事故,目前对代码覆盖率的检测有了新的要求,如何精准衡量覆盖度也是众多开发人员遇到的技术瓶颈。现有的增量代码覆盖率检测方案:先获取全量代码覆盖率信息,然后通过Gitdiff获取增量代码信息,再将增量代码变更行映射至抽象语法树的行对象,遍历抽象语法树的行对象,从抽象语法树的行对象中确定增量代码的特征信息总数和增量代码的被覆盖特征信息数量,采用增量代码的被覆盖特征信息数量除以增量代码的特征信息总数,得到增量代码的覆盖率信息。现有的检测技术一般是通过使用Xcode,通过Xcode自带工具即可检测代码覆盖率,但是由于其只能检测全量代码的覆盖率,在大的工程中,代码量巨大,在每次迭代之后,再去重新关注全量代码的覆盖率的情况下,会大大降低开发者的本文档来自技高网...

【技术保护点】
1.一种基于lcov来实现增量代码覆盖率的检测方法,其特征在于,包括以下步骤:/nS1、通过Xcode工具来配置编译选项,进入到编译进程中,生成应用程序安装包;其中,将生成的应用程序安装包推送给前端进行安装和运行;/nS2、将编译过程中生成的“.gcno”文件进行打包压缩后上传到服务端;/nS3、基于步骤S1,在应用程序的运行过程中,调用覆盖率分发函数,生成对应的“.gcda”文件,在运行结束后,从应用程序的沙盒中获取最终生成的“.gcda”文件,在对其进行压缩后,上传到服务端;/nS4、在服务端对接收到的“.gcno”文件和“.gcda”文件进行整合后,通过lcov工具,基于整合后的文件生成...

【技术特征摘要】
1.一种基于lcov来实现增量代码覆盖率的检测方法,其特征在于,包括以下步骤:
S1、通过Xcode工具来配置编译选项,进入到编译进程中,生成应用程序安装包;其中,将生成的应用程序安装包推送给前端进行安装和运行;
S2、将编译过程中生成的“.gcno”文件进行打包压缩后上传到服务端;
S3、基于步骤S1,在应用程序的运行过程中,调用覆盖率分发函数,生成对应的“.gcda”文件,在运行结束后,从应用程序的沙盒中获取最终生成的“.gcda”文件,在对其进行压缩后,上传到服务端;
S4、在服务端对接收到的“.gcno”文件和“.gcda”文件进行整合后,通过lcov工具,基于整合后的文件生成“.info”文件;其中,生成的“.info”文件将上传至Git-开源的分布式版本控制系统;
S5、调用Gitdiff命令,将步骤S4生成“.info”文件与基线版本的“.info”文件进行比较,得到增量“.info”文件;
S6、通过genhtml工具,基于所述增量“.info”文件生成覆盖率报告;根据所述覆盖率报告,得到增量代码覆盖率的检测结果。


2.根据权利要求1所述的实现增量代码覆盖率的检测方法,其特征在于,步骤S2中生成的“.gcno”文件中,保存着计数插桩位置和源文件之间的关系,其中,所述计数插桩位置包括函数入口函数、以及分支函数代码行;在插入计数指令的同时即执行BasicBlock-基本程序块,基本程序块内的所有指令将进一步顺序执行,当前由编译器将计数指令和程序块的执行数据写入“.gcno”文件。


3.根据权利要求2所述的实现增量代码覆盖率的检测方法,其特征在于,由编译器将计数指令和程序块的执行数据写入“.gcno”文件的过程为:
首先,基于“.gcno”文件包括的组成部分:文件结构、函数结构、BasicBlock结构和BasicBlock行结构,写入用于识别“.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”文件写入用...

【专利技术属性】
技术研发人员:刘练陈国庆谢强
申请(专利权)人:武汉极意网络科技有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1