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

发表于:2011-8-02 13:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

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

  VcTester插装实现原理

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

  inti=printf(”Iamhere”);

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

  inti=(hit_(),printf(”Iamhere”));

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

  除了hit_函数,VcTester还对if语句的条件表达式中插入if_0与if_1函数,if_0用来记录判断结果为FALSE的情况,if_1用来记录判断为TRUR的情况。类似的,针对while与for语句,插装函数是while_0、while_1、for_0、for_1,另外,针对组合子条件,插入cond_0与cond_1函数,针对MCDC覆盖统计,还插入resetMcdc_函数。

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

  VcTester覆盖率统计特点

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

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

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

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

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

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

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

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

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

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

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

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

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号