软件测试基础 第5章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章 白 盒 测 试
5.1 概述 5.2 逻辑覆盖法 5.3 基本路径测试 5.4 思考与习题
5.1 白 盒 测 试
白盒测试是对软件的过程性细节做细致的检查,把测试对象 看做一个打开的盒子,允许测试人员利用程序内部的逻辑结构及 有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。 通过在不同点检查程序状态,确定实际状态是否与预期的状态一 致。
5.2 逻 辑 覆 盖 法
【例5-1】 C++ 实现简单的数学运算。 【例5-1】流程图如图5.1所示。其中Ⅰ、Ⅱ、Ⅲ、Ⅳ、 Ⅴ是控制流上若干程序点。
图5.1 【例5-1】程序流程图
5.2.1 语句覆盖 语句覆盖又称为线覆盖面或段覆盖面。其含义是指,选择
足够数目的测试数据,使被测程序中每条语句至少执行一次。 如果例5-1测试用例选择a=2,b=2,c=4,程序按照路径
Ⅰ->Ⅲ->Ⅴ
条件判定覆盖能同时满足判定、条件两种覆盖标准,是 判定和条件覆盖设计方法的交集,具有两者的简单性却没有 两者的缺点。表面上看,条件判定覆盖测试了所有条件的取 值,但事实并非如此,往往某些条件掩盖了另一些条件,并 没有覆盖所有的“True和False”取值的条件组合情况,会遗 漏某些条件取值错误的情况。为彻底地检查所有条件的取值, 需要将判定语句中给出的复合条件表达式进行分解,形成由 多个基本判定嵌套的流程图,这样就可以有效地检查所有的 条件是否正确了。
例5-1判定覆盖测试用例如表5.1所示。
表 5.1 例 5-1 的判定覆盖测试用例
测试用例
a>0 and b>0
a>1 or c>1
执行路径
a=1,b=1,c=5
T
T
Ⅰ->Ⅱ->Ⅲ->Ⅳ->Ⅴ
a=1,b=-2, c=-3
Fபைடு நூலகம்
F
Ⅰ->Ⅲ->Ⅴ
a=1,b=1,c=-3
T
F
Ⅰ->Ⅱ->Ⅲ->Ⅴ
a=1,b=-2,c=3
F
T
Ⅰ->Ⅲ->Ⅳ->Ⅴ
判定覆盖比语句覆盖具有更强的测试能力,多出了几乎 一倍的测试路径。判定语句往往由多个逻辑条件组合而成 (如判定语句中包含and、or、case),若仅仅判断其最终结果 而忽略每个条件的取值情况,必然会遗漏部分测试路径。
由于短路操作符,判定覆盖忽略布尔表达式的内部分支。 分析下面一段代码。
If(condition1 && condition2 Statement1;
Else Statement2;
当condition1和condition2取值为真时,执行Statement1 表达式;当condition1取值为假时,则condition2取值不进行 判定,执行Statement2表达式。可以看到,这段代码控制结 构的执行,短路操作符“&&”。表达式中第一个关系为假, 则第二个就不进行判定。因此,判定语句由多个逻辑条件组 合而成,仅仅判断最终结果,忽略每个条件的取值情况,必 然会遗漏部分测试路径。
测试用例 a=2,b=-1,c=-2 a=-1,b=2,c=3
表 5.2 例 5-1 的条件覆盖测试用例
覆盖条件
具体取值条件
T1,F2,T3,F4
a>0,b<=0,a>1,c<=1
F1,T2,F3,T4
a<=0,b>0,a<=1,c>1
执行路径 Ⅰ->Ⅲ->Ⅳ->Ⅴ Ⅰ->Ⅲ->Ⅳ->Ⅴ
条件覆盖比判定覆盖增加了对符合判定情况的测试,增 加了测试路径。但是条件覆盖只能保证每个条件至少有一次 为真,而不考虑所有的判定结果。表5.2中的测试用例a=2, b=-1和测试用例a=-1,b=2满足了条件覆盖的测试用例, 保证了a>0 and b>0两个条件的可能值(True和False)至少满足 一次,但是,由于测试用例的所有判定结果都是False,并 没有满足判定覆盖,因此条件覆盖不一定包含判定覆盖。
Ⅰ->Ⅱ->Ⅲ->Ⅳ->Ⅴ执行,程序段中的5个语句均执行,符合语 句覆盖。但是,如果测试用例选择a=2,b=-2,c=4,程序按照 路径Ⅰ->Ⅲ->Ⅳ->Ⅴ执行,则未能达到语句覆盖。
语句覆盖测试方法仅仅针对程序逻辑中的显式语句,对隐 藏条件无法测试。如例5-1中第一个逻辑运算符“and”误写成 “or”,则测试用例a=2,b=2,c=4仍能达到语句覆盖的要求, 但是无法发现程序中的误写错误。
5.2.2 判定覆盖 判定覆盖又称为分支覆盖或所有边覆盖,用于测试控制
结构中布尔表达式为真或假(例如if语句和while语句)。布尔 型表达式被认为是一个整体,取值为true或false,而不考虑 内部是否包含“逻辑与”或者“逻辑或”等操作符。
判定覆盖的基本思想是所设计的测试用例使得程序中每 个判定分别取“真”分支和“假”分支并至少经历一次,即 判断真假值均被满足。
5.2.4 条件判定覆盖 既然判定条件不一定包含条件覆盖,条件覆盖也不一定
包含判定覆盖,就自然会提出一种能同时满足两种覆盖标准 的逻辑覆盖,这就是条件判定覆盖。
条件判定覆盖的含义是通过设计足够的测试用例,使得 判断条件中的所有条件至少执行一次取值,同时,所有判断 的可能结果至少执行一次。因此,条件判定覆盖的测试用例 满足如下条件:
5.2.3 条件覆盖 条件覆盖设计测试用例时,应使每个判断中每个条件的
可能取值至少满足一次。 仍以例5-1为例,针对a>0 and b>0判定条件表达式,a>0
取值为“真”,记为T1;a>0取值为“假”,记为F1;b>0 取值“真”,记为T2;b>0取值为“假”,记为F2;条件表 达式a>1 or c>1,a>1取值为“真”,记为T3;a>1取值为 “假”,记为F3;c>1取值为“真”,记为T4;c>1取值为 “假”,记为F4。则条件覆盖测试用例如表5.2所示。
白盒测试只测试软件产品的内部结构和处理过程,而不测试 软件产品的功能,用于纠正软件系统在描述、表示和规格上的错 误,是进一步测试的前提。白盒测试分静态和动态两种:静态白 盒测试是在不执行的条件下有条理地仔细审查软件设计、体系结 构和代码,从而找出软件缺陷的过程,有时也称为结构分析。动 态白盒测试也称结构化测试,通过查看并使用代码的内部结构, 设计和执行测试。
(1) 所有条件至少执行一次取值; (2) 所有判断的可能结果至少执行一次。 例5-1的条件判定覆盖测试用例如表5.3所示。
表5.3 例5-1的条件判定覆盖测试用例
测试用例 a=2,b=1,c=5 a=-1,b=-2,c=-3
覆盖条件 T1,T2,T3,T4 F1,F2,F3,F4
执行路径 Ⅰ->Ⅱ->Ⅲ->Ⅳ->Ⅴ
相关文档
最新文档