背景
Hudson是一款优秀的持续集成引擎,但是在使用中发现对于后端c语言的项目支持还没有成熟的插件,不是特别易用,覆盖率,btest等都不能直接应用到hudson中。
每次新加入的代码要经过充分单测才能保证整体的稳定性。评价单测充分性有很多指标。其中一个重要指标就是覆盖率指标。把ccover集成进hudson,并且改进一下报表和展现工具,使其更好的为保证产品质量服务。使其成为日常测试一个简单易用的工具是主要目标。
前期准备
Hudson安装请参见文档:
http://com.baidu.com/twiki/bin/viewfile/Ecom/Continuous_integration?filename=Hudson%E4%BD%BF%E7%94%A8.doc
<!--[if gte mso 9]><![endif]-->
Ccover安装请参见文档:
http://com.baidu.com/twiki/bin/view/Main/Ccover
<!--[if gte mso 9]><![endif]-->
<!--[if gte mso 9]><![endif]-->
使用ccover
先配置hudson从svn获取最新版本。
书写ant构建环境,ccover的覆盖率文件一般在bash_profile中配置为`pwd`/test.cov。如果通过这种方式编译通过后,没有产生test.cov文件。先使用cov01 –s命令检查ccover是否开启,仍不能解决建议covfile使用绝对目录的配置形式。
通过covfn,covsrc,covdir,Covclass获取html格式的覆盖率报告。通过html格式的插件展现在hudson中。
需要安装的插件如下:
htmlpublisher.hpi
ncover.hpi
配置方式如下:
先配置展现报告的目录
<!--[if mso]> <![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 10]> <![endif]--> <!--[if gte mso 9]><![endif]-->
<!--[if mso]> <![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 10]> <![endif]--> <!--[if gte mso 9]><![endif]-->
<!--[if gte mso 9]><![endif]-->
勾选keep past coverage report选项,用来保准历史运行中的覆盖率报告。
配置需要展现的报告名称,用逗号隔开
<!--[if gte mso 9]><![endif]-->
至此完成了降ccover集成进hudson中的工作。到此为止虽然我们可以查看ccover的报告了,但是还是没法发现那些函数下降了,新代码覆盖率与老代码有哪些不同。需要我们自己做一些扩展和改进。
改进
对比档次build版本的覆盖率和之前版本的覆盖率,找出差异。
lowest_warning=5 函数最低覆盖率
new_warning=10 新加入函数的最低覆盖率
drop_warning=1 旧函数最多下降的比率
发现任何一个指标低于阀值则进行报警,并将将变动的函数展现在报告中。
<!--[if gte mso 9]><![endif]-->
<!--[if gte mso 9]><![endif]-->
<!--[if gte mso 9]><![endif]-->
图形化展示历史的ccover覆盖率变化趋势,方便分析程序的变化历程。
配置如下:
#提取覆盖率信息的文件名
file_name=testsrc.html
#输出覆盖率信息的文件名
output=mydir.csv
#提取信息的匹配名称
match=avgrank_value_computation.cpp
配置成功后,可以在hudson首页查看历史的覆盖率趋势
<!--[if gte mso 9]><![endif]-->
后话
经过几步改造后,ccover已经比较好的融入到hudson。方便我们使用和查看每次版本的覆盖率,分析历史趋势。我们的持续集成还有很多需要改进的地方,希望ccover可以帮助我们更好的在前期把控质量,分析程序缺陷。不断改进,提高hudson在后端持续集成的易用性。
(作者:wangzuobo)