白盒测试的价值和局限:http://www.kailesoft.com/help/TestBox/WhiteShort.htm
白盒测试将被测软件看作一个透明的盒子,软件内部的逻辑结构是可见的。
测试人员有针对性的设计测试用例,对程序进行覆盖测试。
基本的白盒测试方法:
·逻辑覆盖测试;
·路径覆盖测试。
3.1 逻辑覆盖测试
·以程序内逻辑结构为基础的动态白盒测试方法;
·不同覆盖标准的测试强度是不相同的:
3.1.1 语句覆盖
·要求程序中每条可运行语句至少被运行一次;
·一种较弱的覆盖准则;
·只关注程序中语句的覆盖结果,不考虑分支的覆盖情况;
·缺陷检测能力较低。
3.1.2 分支覆盖(判定覆盖)
·要求程序中每个条件判定语句的真值结果和假值结果都至少出现一次;
3.1.3 条件覆盖
·要求程序中每个条件判定语句的每个条件至少取一次真值和一次假值;
3.1.4 条件/判定覆盖
·要求程序中每个条件判定语句的真值结果和假值结果都至少出现一次,且每个条件判定语句中的每个条件至少取一次真值和假值;
3.1.5 修正条件/判定覆盖
·满足条件/判定覆盖;
·测试用例要同时满足:
①程序中的每个入口点和出口点至少被执行一次;
②每个条件都曾独立地影响判定结果,即在其他条件不变的情况下,改变该条件的值使得判定结果发生改变;
·解释:
①首先要求实现 条件覆盖、判定覆盖,在此基础上,对于每一个条件C,要求存在符合以下条件的 两次计算 :
②条件C所在判定内的所有条件,除条件C外,其他条件的取值完全相同;
③条件C的取值相反;
④判定的计算结果相反;
·感觉用法和格雷码很像。
3.1.6 条件组合覆盖
·要求每条条件判定语句中的条件取值的各种组合至少出现一次;
·若一条分支判定语句包含两个条件,则需要 “真-真” 、 “真-假” 、 “假-真” 、 “假-假” ;
·实用性较差。(选用修正条件/判定覆盖)
3.2 路径覆盖测试
3.2.1 环复杂度(离散数学)
·“简单就是可靠”
·软件复杂度越高,其所需的开发成本和维护成本也更高;
·程序复杂度 度量方法;
·实现方法:
①基于区域数目的计算方法NUM(area):v = NUM(area);
②基于边和节点数目的计算方法NUM(edge)和NUM(node):v = NUM(edge) - NUM(node) + 2;
③基于判定节点数目的计算方法NUM(node_branch):v = NUM(node_branch) + 1;
3.2.2 基本路径覆盖
①构建程序 控制流图,用于描述程序的控制流结构;
②计算环复杂度,用于确定程序基本路径集合中独立路径条数的上界;
③根据环复杂度 确定独立路径集合;
④针对每一条独立路径 设计测试用例。
3.2.3 主路径覆盖
·对程序设计测试用例,以覆盖所有主路径的测试过程;
·主路径:不是其他简单路径的子路径的简单路径;
·简单路径:
·起点和终点不同,但是不存在重复出现的结点的路径;
·起点和终点相同,但是不存在重复出现的其他结点的路径;
3.2.4 循环结构测试
·对循环变量采用边界值测试来验证其正确性;
·对于不同的循环结构,需要针对性地设计相应的测试方法:
·简单循环测试;
·连接循环测试;
·嵌套循环测试;
·非结构循环测试。