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_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_函数。