系统测试_增量覆盖率统计方法_Linux C GCOV

1 摘要

 

去年系统测试阶段测试覆盖工具试运行过几个项目,取得的效果一般,主要目前事业部的项目以维护为主,每次测试,都是增量加核心业务测试(用例很少),所以结果中会出现很多覆盖率为0或者很低的情况,所以如果分析测试覆盖会占用很多时间,投入产出比不合适;如果是新项目,版本变更比较频繁,亦不试用于项目的开始阶段。

基于上面的问题,避免升级测试出现测试覆盖不到的情况,在现有的覆盖率统计工具进行二次开发,生成增量代码的覆盖率信息(增量行覆盖率、增量分支覆盖以及增量函数覆盖率)。目前只实现了linux C程序基于gcov的增量覆盖率统计方法,该方法能够快速、准确的统计出模块的增量覆盖率信息,并将最终结果用报表的形式展示。该工具试用一段时间后,会根据效果决定是否退出JAVA基于emma的增量代码覆盖率统计工具。


2 Linux GCOV 工具介绍

gcov是gnu/gcc工具库中的一个组件,一般来说,都会被安装的,原来是linux用来测试linux内核覆盖的工具,LCOV基于GCOV进行测试覆盖率的统计。

使用步骤:

Ø    首先了解编译文件的结构,在CC编译后面增加-fprofile-arcs -ftest-coverage

Ø    启动应用程序

Ø    进行业务功能测试

Ø    收集测试数据,执行lcov -d./  -c -o testresult.info

Ø    生成HTML报告  genhtml -o testresult  testresult.info

Ø    下载查看结果,将testresult 下载到本地进行观看. 或者安装Apache服务器   将主目录指向testresult目录。


3 实现思路

获取增量代码信息

部门使用svn进行版本管理,通过使用svn diff(有时候存在不太准确的情况,不过基本是靠普的)方式获取基线版本(默认是线上运行版本,也可以是用户指定的版本)和提测版本之间的变化信息,通过开源组件SVNkit进行svndiff实现。

解析svn diff结果,过滤文件

解析svn diff出来的结果,提取发生变化的文件名称并记录这些文件中发生变化的行号,过滤发生了变化但文件名称后缀非C和h的文件。提取增量行和增量函数信息。

获取提测版本的整体覆盖率信息

运行系统测试用例,生成文本格式(格式见参考文档)的覆盖率信息文件,该文件中记录了所有代码文件中的每一行代码被覆盖的次数(该文件同时记录了代码文件中函数被覆盖的次数,以及分支覆盖的次数)。

解析覆盖率文件

解析上一步中获得的文本文件,从该文件中提取被修改的文件的每一行的覆盖次数。

统计增量行和增量函数的覆盖率

将第3步和第5步中获取的数据进行对比,增量行被覆盖的次数大于0表示该行被覆盖到,增量函数中只要有一行被覆盖说明该函数被覆盖到。统计被覆盖到的增量行的总数和被覆盖到的增量函数的总个数,计算出增量行的覆盖率和增量函数的覆盖率。计算公式见章节4

生成覆盖率结果报表

         根据步骤6生成的文件,使用lcov命令生成html格式结果。结果中只显示进行了修改了内容的文件覆盖情况。

   


4具体实现

4.1 指标计算规则

Ø  函数覆盖实现:

²  增量函数列表(FN):

   根据执行结果里面的所有函数名和开始位置,增量遍历(即每次都从上次遍历的结束位置进行遍历)代码修改记录,如果在代码修改记录中,代码行数在某两个函数的起始行之间,则说明该函数本次进行了变更。

²  增量函数执行次数(FNDA):

根据增量函数结果,在对执行结果里面的所有函数执行次数(FNDA),进行过滤,过滤掉在增量函数中不存在的函数执行FNDA.

²  增量函数总数(FN):

增量函数列表(FN)的个数.

²  增量函数执行总数(FNH):

增量函数执行次数(FNDA),里面执行次数大于0的个数.

Ø  代码行覆盖实现:

²  增量代码行(DA):

根据代码修改记录结果,在对执行结果里面的所有行行(DA),进行过滤,过滤掉在代码修改记录中不存在的函数DA.如果在DA中不存在,而在修改代码记录中存在则表明该行为无效代码,应该替掉。

²  增量代码有效行总数(LF):

上一步骤中DA的个数。

²  增量代码有效行总数中被执行到的个数(LH):

前面返回的DA记录中,执行次数非0的和。

Ø  分支覆盖实现:

²  增量分支总数(BRDA)(可能有遗漏,因为不是不是一行):

根据代码修改记录结果,在对执行结果里面的所有行分支次数(BRDA),使用代码行号进行过滤,过滤掉在代码修改记录中不存在的BRDA.

²  增量分支总数(BRF):

增量分支总数的个数

²  增量分支执行个数(BRH):

增量分支总数(BRDA)里面执行次数大于0的和。

4.2流程图



4.3使用方法

  操作步骤

Ø    首先了解编译文件的结构,在CC编译后面增加-fprofile-arcs -ftest-coverage

Ø    启动应用程序

Ø    进行业务功能测试

Ø    运行目录下./startup.sh

Ø    data目录下生成全量和增量测试覆盖结果

 

  配置文件说明

   #代码在svn的路径

   source_path=http://XXXX/svn1/FDTCR/AutoTest/XXX/gcovtest

   #svn用户名

   username=XXX

   #svn口令

   passwd=XXX

   #上次版本号

   old_version=36

   #最新版本号

   new_version=37

   #应用程序路径

   application_path=/root/tester/

5附件

https://git.oschina.net/neudbsh/gcov-increase-tool


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值