现在的位置: 首页 > 综合 > 正文

第4代白盒测试方法实践之“VcTester插装原理与各种覆盖率配置”

2013年10月14日 ⁄ 综合 ⁄ 共 2435字 ⁄ 字号 评论关闭

VcTester与常见C/C++语言覆盖测试工具一样,提供多种覆盖率统计,已涵盖语句覆盖、分支覆盖、条件分支覆盖、MCDC覆盖。本文讲解VcTester的插装实现原理、描述该工具的覆盖率使用特点。

VcTester插装实现原理

VcTester是基于函数调用进行覆盖统计的,比如下面被测语句:

int i = printf(”I am here”);

源码经过插装改造,变为:

int i = (hit_(),printf(”I am here”));

上面借助逗号表达式,在不影响原语句的语法含义前提下插入hit_调用,hit_函数运行过程中自动记录该行语句是否已运行。

除了hit_函数,VcTester还对if语句的条件表达式中插入if_0if_1函数,if_0用来记录判断结果为FALSE的情况,if_1用来记录判断为TRUR的情况。类似的,针对whilefor语句,插装函数是while_0while_1for_0for_1,另外,针对组合子条件,插入cond_0cond_1函数,针对MCDC覆盖统计,还插入resetMcdc_函数。

VcTester的插装不仅支持覆盖率统计,单步调试功能也由插装来支持,VcSmithVcTester在某一行语句设断点支持单步停住,就是在上述hit_函数中实现的。

VcTester覆盖率统计特点

首先,VcTester针对CSE脚本也提供覆盖率统计,即,大家用脚本编写测试用例,这样的脚本也可以当作被测代码进行调试与测试。CSE脚本的覆盖率统计与分析在共享版VcSmith已提供,可免费使用。

其次,VcTester可配置按脚本代码的覆盖率(即LICCLDCC)方式统计,还是按C/C++的覆盖方式进行统计。这两者实际是基于同一原理,都是分析函数主调与被调关系实现统计的,若按C/C++方式统计额外附加一点转换即可,我们在Option对话框中将“Translate to Statement Coverage and Condition/Decision Coverage”选择框置上,如下图:


图:转成C/C++风格覆盖率

然后,VcTester支持的覆盖率统计还可灵活配置,配置包括“例外被测函数列表”(Except definition)与“例外被调函数列表”(Except function call),前者决定特定被测函数不纳入测试统计,比如某些特定的异常处理函数,因为实现逻辑简单,但模拟出异常实现覆盖测试的代价很高,就可以把这些异常处理函数定义到“例外被测函数列表”。

这一特点使VcTester覆盖统计具备一种柔性,对在各种类型风格的代码都维持确定的质量标准,还适应在不同阶段(如原型阶段、联调阶段、测试阶段)分别按不同质量标准进行控制。

CSE脚本风格与C/C++风格的覆盖统计还可统一起来,只需配置按LICCLDCC的方式(即脚本方式)统计覆盖率,然后在“例外被调函数列表”(Except function call)指定哪些插装函数不作统计,即定制各种类别的覆盖率。比如缺省情况下针对C/C++统计的是条件判定覆盖率,如果配置if_0if_1while_0while_1for_0for_1cond_0cond_1不统计,把这些函数定义到例外被调函数列表,系统对C/C++代码就只统计hit_,统计结果就变成语句覆盖,如果只排除cond_0与、cond_1则得到判定覆盖。上述这些配置对脚本的覆盖统计不产生影响。

CSE软件在V1.6以后版本支持混合编程后,上述脚本与C/C++合一的覆盖率统计显得比较有价值,产品代码可以用CSE脚本来写,以调试与测试,自动翻译成C/C++代码,产品研发过程中,脚本形式的产品代码与C/C++形式的产品代码会长时间并存。

支持写一点测一点的开发模式

采用持续集成开发模式的项目,代码往往写一点、调一点、测一点,依次不停的做迭代。该方式要求测试工具对测试过程评估要更加“过程化”,要适应对每一步迭代过程的研发质量做出评价。

VcTester工具的Option对话框可定义代码过程质量的通过标准(请参考见VcSmithVcTester使用手册)。VcTester提供一种红绿灯通行机制,在主界面右上角设计3个红绿灯,如下图:

图:测试红绿灯与覆盖率

分别表示当前测试的状态、覆盖率与测试程度情况,如果当前测试未通过,最左边的标志灯会亮红灯,这时用户应先解决问题,如果代码覆盖率或用例覆盖度没达标,中间或右边的标志灯会亮黄灯,用户应加强测试,直至这两个标志灯都变绿色。遵循红绿灯机制的基本规则就是:

3个绿灯时时亮起,亮绿灯是常态,亮红灯是暂态。

如果团队每位成员都很好的遵守这个规则,就能保证软件开发一直按照确定质量标准平稳向前推进,研发进度与风险都在受控范围内。

 

参考文献:

1.         ezTester,《VcSmith使用手册》

2.         ezTester,《VcTester使用手册》

================ END ==========================

本专题相关的文章:


 
4代白盒测试方法介绍--理论篇

 4代白盒测试方法介绍--VcTester实践篇

 4代白盒测试方法通俗释义

 

 4代白盒测试方法之为什么要做白盒测试

 4代白盒测试方法之企业如何推行白盒测试

 4代白盒测试方法之实施白盒测试的几个误区

 4代白盒测试方法之如何选择嵌入式白盒测试工具

 

 4代白盒测试方法实践之“VcTester持续集成框架的应用价值

 4代白盒测试方法实践之使用VcTester实施持续集成的组织管理模式

 4代白盒测试方法实践之如何在VcTester集成自动构建功能

 4代白盒测试方法实践之使用VcTester构造持续集成及每日构建平台

 4代白盒测试方法实践之内存泄露检查工具VLD如何与VcTester配合使用

 4代白盒测试方法实践之如何将Pclint嵌入到VcTester中使用

抱歉!评论已关闭.