4白盒测试 白盒测试也称为结构测试,它是根据被测试程序的逻辑结构设计测 试用例。使用白盒测试方法需要了解程序的内部结构,对程序的不同逻 辑路径进行测试。由于采用不同方法设计测试用例对程序的逻辑路径覆 盖的程度不一,白盒测试又被称为基于“覆盖”的测试。覆盖率越高, 测试越充分
4. 白盒测试 白盒测试也称为结构测试,它是根据被测试程序的逻辑结构设计测 试用例。使用白盒测试方法需要了解程序的内部结构,对程序的不同逻 辑路径进行测试。由于采用不同方法设计测试用例对程序的逻辑路径覆 盖的程度不一,白盒测试又被称为基于“覆盖”的测试。覆盖率越高, 测试越充分
5穷举测试 软件测试的主要目的是查找软件中存在的错误,而不能证明软件的 正确性。实际上采用一般的测试方法根本无法证明软件的正确性。有人 主张通过白盒或黑盒测试方法对所有可能的情况进行测试,如果所有的 情况都是正确的,则可证明程序是正确的。这种方法被称为穷举测试 实际上除了一些简单的程序外,它是无法实现的 使用黑盒测试进行穷举测试,必须穷举所有可能的输入数据。举 个简单的例子,假设输入三个无符号整数作为三角形的三条边长,判断 该三角形是否为直角三角形。C语言中无符号整数的范围为0~216-1,如 果要穷举所有的输入数据,则测试用例数为216*216*216≈3*1014,假定程 序每执行一次需要1ms,则需要一万年 白盒测试要实现穷举测试同样难以实现,当程序中包含有较复杂的 循环和条件语句嵌套时,可能的执行路径数目同样很多,测试用例要覆 盖所有的执行路径是根本不可能的
5. 穷举测试 软件测试的主要目的是查找软件中存在的错误,而不能证明软件的 正确性。实际上采用一般的测试方法根本无法证明软件的正确性。有人 主张通过白盒或黑盒测试方法对所有可能的情况进行测试,如果所有的 情况都是正确的,则可证明程序是正确的。这种方法被称为穷举测试, 实际上除了一些简单的程序外,它是无法实现的。 使用黑盒测试进行穷举测试,必须穷举所有可能的输入数据。举一 个简单的例子,假设输入三个无符号整数作为三角形的三条边长,判断 该三角形是否为直角三角形。C语言中无符号整数的范围为0~2 16 -1,如 果要穷举所有的输入数据,则测试用例数为2 16*2 16*2 16≈3*1014 ,假定程 序每执行一次需要1 ms,则需要一万年。 白盒测试要实现穷举测试同样难以实现,当程序中包含有较复杂的 循环和条件语句嵌套时,可能的执行路径数目同样很多,测试用例要覆 盖所有的执行路径是根本不可能的
614设计测试用例 使用白盒测试和黑盒测试都需要设计测试用例,上一节中已经提到 要将所有可能的情况穷举出来是不可能的,因此在设计测试用例时必须 依据一定的原则,以保证既能对程序进行充分的测试,而测试用例的数 目又不能太大。本节将介绍常用的白盒和黑盒测试用例设计的方法 1.白盒测试 白盒测试根据模块设计阶段对模块内部逻辑结构的描述设计测试用 例。根据测试用例对模块所有可能执行路径的覆盖程度,可将其分为语 句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆 盖
6.1.4 设计测试用例 使用白盒测试和黑盒测试都需要设计测试用例,上一节中已经提到 要将所有可能的情况穷举出来是不可能的,因此在设计测试用例时必须 依据一定的原则,以保证既能对程序进行充分的测试,而测试用例的数 目又不能太大。本节将介绍常用的白盒和黑盒测试用例设计的方法。 1. 白盒测试 白盒测试根据模块设计阶段对模块内部逻辑结构的描述设计测试用 例。根据测试用例对模块所有可能执行路径的覆盖程度,可将其分为语 句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆 盖
1)语句覆盖 语句覆盖要求所设计的用例使程序中的每一条语句至少执行一次 这是覆盖程度很低的一种覆盖标准。下面是一个简单的例子。 假设程序的流程图如图6.1所示,对应的C语言源程序片段如下: X=0 X=0 if(A>1|B>2) XEA+B printf("%/od”,x); 4>1orB>2 现在按语句覆盖标准设计测试用例, 只需设计一组测试用例使条件 X=A+B “A>1OrB>2成立即可,例如: 输入数据:A=2,B=0; 输出X 输出数据:X=2。 图61被测试程序的流程图
1) 语句覆盖 语句覆盖要求所设计的用例使程序中的每一条语句至少执行一次。 这是覆盖程度很低的一种覆盖标准。下面是一个简单的例子。 假设程序的流程图如图6.1所示,对应的C语言源程序片段如下: X=0; if(A>1||B>2) X=A+B; printf(“%d” , X); 现在按语句覆盖标准设计测试用例, 只需设计一组测试用例使条件 “A>1 or B>2”成立即可,例如: 输入数据:A=2,B=0; 输出数据:X=2。 A>1 or B>2 X=A+B 输出 X X=0 图6.1 被测试程序的流程图
这组测试用例虽然覆盖了所有的语句,但对条件 语句的分支测试不充分,只测试了条件为真的分支。 如果条件表达式中的第一个条件表达式A1误写为 A=1(C语言中该表达式值为真),这组测试用例无 法检测该错误。同样,如果条件表达式中的第二个条 件表达式B>2写错,这组测试用例也不能检测出程序 的错误
这组测试用例虽然覆盖了所有的语句,但对条件 语句的分支测试不充分,只测试了条件为真的分支。 如果条件表达式中的第一个条件表达式A>1误写为 A=1(C语言中该表达式值为真),这组测试用例无 法检测该错误。同样,如果条件表达式中的第二个条 件表达式B>2写错,这组测试用例也不能检测出程序 的错误