基于lcov实现的增量代码UT覆盖率检查

背景介绍

配合CppUTest单元测试框架,lcov提供了一套比较完整的工程工具来对UT覆盖率进行度量。但对有些团队来说,历史负担太重,大量的遗留代码没有相应的UT。在这种情况下,对新增代码进行覆盖率检查,可能对团队来说是一种可行性较强的措施。在此目标基础上,并提出如下需求:

1)利用现有的lcov资源;

2)可以对指定git cmmit提交的代码进行UT覆盖率检查;

3)可以指定需要UT覆盖率检查的软件模块、文件;

4)可以设置UT覆盖率阈值;

5)检查结果可视化展示,有良好的用户体验;

为实现如上需求,开发了一个ut_incremental_check.py 工具。其在jenkins集成的效果截图如下:

图一:每次构建后生成新增代码UT覆盖率报告:Unittest - incremental code coverage report

图二:新增代码UT覆盖率报告详细信息

图三:点击具体的uncovered line行号可以直接“电梯”直达到本行代码位置进行查看

工具介绍

ut_incremental_check.py有4个参数:

<since>..<until>:指定git commit SHA范围

<monitor_c_files>:指定需要关注的文件或目录列表,此参数要符合json数据格式

<lcov_dir>:lcov生成的目标文件目录

<threshold>:对新增代码UT覆盖率的下限要求。取值范围在(0,1]范围。

总体的工作流程见如下help说明。

$ ./ut_incremental_check.py

PURPOSE:
calculate UT coverage of git commits‘ new code

USAGE:
./ut_incremental_check.py <since>..<until> <monitor_c_files> <lcov_dir> <threshold>
example:
./ut_incremental_check.py "227b032..79196ba" ‘["source/soda/sp/lssp/i2c-v2/ksource"]‘ "coverage" 0.6

WORK PROCESS:
get changed file list between <since> and <until> , filter by <monitor_c_files> options;
get changed lines per changed file;
based on <lcov_dir>, search .gcov.html per file, and get uncover lines;
create report file:ut_incremental_check_report.html and check <threshold> (cover lines/new lines).

UT:
./ut_incremental_check.py ut

jenkins配置介绍

jenkins job shell命令示例:

# 运行UT(CppUTest需要使能CPPUTEST_USE_GCOV配置,此处细节与本文无关,不展开讨论)
bash -ex bspmake ut

# 生成UT覆盖率信息
lcov --capture --directory tmp/unittest/i2c-v2/ksource -b source/soda/sp/lssp/i2c-v2/unittest/ --output-file coverage.info

# 生成UT覆盖率html报告
genhtml coverage.info -p $WORKSPACE --output-directory coverage

# 生成增量代码UT覆盖率html报告
./ut_incremental_check.py $GIT_PREVIOUS_SUCCESSFUL_COMMIT".."$GIT_COMMIT ‘["source/soda/sp/lssp/i2c-v2/ksource"]‘ "coverage" 0.8

# 返回结果
exit $?

jenkins HTML报告配置示例:  

--EOF--

时间: 2024-11-11 19:01:05

基于lcov实现的增量代码UT覆盖率检查的相关文章

多环境多需求并行下的代码测试覆盖率统计工具实现

马蜂窝技术原创内容,更多干货请关注公众号:mfwtech 测试覆盖率常被用来衡量测试的充分性和完整性,也是测试有效性的一个度量.「敏捷开发」的大潮之下,如何在快速迭代的同时保证对被测代码的覆盖度和产品质量,是一个非常有挑战性的话题. 在马蜂窝大交通.酒店等交易相关业务中,项目的开发和测试实践同样遵循敏捷的原则,迭代周期短.速度快.因此,如何依据测试覆盖率数据帮助我们有效判断项目质量.了解测试状态.提升迭代效率,是我们一直很重视的工作. Part.1 测试覆盖率统计中的挑战 对于功能测试而言,通常

Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率

测试 目前主流的就bdd和tdd,自己查一下差异 推荐 mocha和tape 另外Jasmine也挺有名,angularjs用它,不过挺麻烦的,还有一个选择是qunit,最初是为jquery测试写的,在nodejs里用还是觉得怪怪的. 如果想简单可以tap,它和tape很像,下文会有详细说明 mocha mocha是tj写的 https://github.com/mochajs/mocha var assert = require("assert") describe('truth',

基于jQuery实现滚动新闻代码下载

分享一款基于jQuery实现滚动新闻代码下载.这是一款基于bootstrup 3实现的响应式jQuery滚动新闻插件.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="htmleaf-container"> <header class="htmleaf-header bgcolor-10"> <h1>基于jQuery实现滚动新闻代码下载</h1> </header>

UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现

UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现 测试数据 java代码 1 package com.hzf.spark.study; 2 3 import java.util.Map; 4 import java.util.Set; 5 6 import org.apache.spark.SparkConf; 7 import org.apache.spark.api.java.JavaPairRDD; 8 import org.apache.s

[IE编程] 多页面基于IE内核浏览器的代码示例

有不少人发信问这个问题,我把答案贴在这里: 建议参考 WTL (Windows Template Library) 的代码示例工程TabBrowser  (在WTL目录/Samples/TabBrowser 下面).该工程演示了如何用WTL + IE WebBrowser接口开发一个多Tab的IE内核浏览器, 并演示如何用ATL的IDispEventSimpleImpl监听DWebBrowserEvents2 事件, 代码简洁易懂,很有参考价值. WTL 是微软的开源项目,可以去 http://

基于jQuery表格增加删除代码

基于jQuery表格增加删除代码是一款动态增加删减表格行特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div style="width:720px;margin:20px auto;"> <table id="tab11" style="display: none"> <tbody> <tr> <td height="30" align=&

基于jquery下拉列表树插件代码

分享一款基于jquery下拉列表树插件代码.这是一款实用的jquery 树形下拉框 下拉树代码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <table width="100%" align="center" cellpadding="0" cellspacing="0"> <tr> <td colspan="1" bgcolor="#FF

粗浅的增量代码上线shell脚本--菜鸟版

1      说明 这个shell脚本是是我编写的第一代版本的增量代码上线脚本,现在代码上线脚本已更新了几个版本,关注的技术重点是可视化对代码版本任意回滚的上线系统(python语言编写),后期将逐步分享这些脚本^_^ .虽然现在看来,这个脚本写的惨不忍睹,但是在当时却改变了公司的上线方式,从交接工作时的手动上线,改变为脚本自动化上线,也算是一个起点和转折点. 2      模块分析 这个上线脚本功能比较简单,先请看上线总体流程: 以下是详细的上线流程图: 3      代码部分 请使用"not

【代码相似论文笔记】基于序列聚类的相似代码检测算法

摘要: 为了提高源程序代码之间相似性的检测效率,提出一种基于序列聚类的相似代码检测算法. 算法首先把源代码按照其自身的结构进行分段提取,然后对各个分段进行部分代码变换,再以带权重的编辑距离为相似度量标准对这些符号进行序列聚类,得到相似的程序代码片段,以达到对源程序进行相似功能检测的目的. 应用: 可以通过检测源程序中的相似代码对源程序进行简化,也可以查找出多个程序之间的相似功能,还能用于抄袭检测. 步骤: 1.提取出源代码中的功能段 2.以带权重的编辑距离为相似度量标准 3.通过聚类源程序代码序