标签:
白盒测试法全面了解程序内部逻辑结构, 对所有逻辑路径进行测试。 白盒测试法是穷举路径测试。在使用这一方案时, 测试者必须检查程序的内部结构, 从检查程序的逻辑着手 , 得出测试数据。
1.白盒测试的范围
白盒测试是软件测试体系中一个分支, 测试关注对象是一行行可见代码,如果代码不可见,就不是白盒,而是黑盒测试了。 白盒测试也通常被认为是单元测试与集成测试的统称, 但这个概念是相对的, 与当前项目遵循的研发流程有关,某些流程把白盒测试划分为单元测试与集成测试, 而另一些流程, 把白盒测试划分为模块单元测试、模块系统测试、多模块集成测试, 还有一些流程把单元测试与集成测试混为一体,统称为持续集成测试。白盒测试方法, 范围限定在功能测试之前,针对源码行的所有测试, 即被测对象是看得到的功能源码,每个测试者必须先获得源码才能实施测试。
2.白盒测试的目的
通过检查软件内部的逻辑结构, 对软件中的逻辑路径进行覆盖测试; 在程序不同地方设立检查点, 检查程序的状态, 以确定实际运行状态与预期状态是否一致。
3.白盒测试的特点
依据软件设计说明书进行测试,对程序内部细节严密检验, 针对特定条件设计测试用例, 对软件的逻辑路径进行覆盖测试。
4.白盒测试的步骤
测试计划阶段: 根据需求说明书, 制定测试进度;
测试设计阶段: 依据程序设计说明书,按照一定规范化的方法进行软件结构划分和设计测试用例。
测试执行阶段: 输入测试用例, 得到测试结果。
测试总结阶段: 对比测试的结果和代码的预期结果,分析错误原因, 找到并解决错误。
5.白盒测试的方法
总体上分为静态方法和动态方法两大类。
静态分析是一种不通过执行程序而进行测试的技术。 静态分析的关键功能是检查软件的表示和描述是否一致, 有没有冲突或者有没有歧义。
动态分析的主要特点 是 当 软 件 系 统 在 模 拟 的 或 真 实 的 环中执行之前、之中和之后, 对软件系统行为的分析。 动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。 在动态分析技术中,最重要的技术是路径和分支测试。
下面就白盒测试中具体的六种典型覆盖方法进行探讨
1) 语句覆盖
作为最基本的逻辑覆盖方法,语句覆盖的含义是:选择足够多的测试数据,使得被测程序中的每个语句至少执行一次。 通过语句覆盖,可以直观地从源代码得到测试用例,无须细分每条判定表达式;然而,语句覆盖对程序的逻辑覆盖很少,对于一个包含多个条件的判定表达式,它只关心判定表达式的值,并没有分别测试判定表达式中每个条件取不同值的情况。 所以语句覆盖无法全面反映多分支的逻辑运算,是很弱的逻辑覆盖标准。
2) 判定覆盖
判定覆盖也称分支覆盖,其含义为:不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次 ,即每个判定的每个分支都至少执行一次。 判定覆盖相对于语句覆盖,其逻辑覆盖能力更强。 然而判定覆盖也具有和语句覆盖一样的简单性,大部分的判定语句是由多个逻辑条件组合而成,它也仅判断判定表达式的最终结果,而忽略每个条件的取值情况,故在执行过程中必然会遗漏部分测试路径。
3) 条件覆盖
条件覆盖的含义是,不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。 相对于判定覆盖,条件覆盖的覆盖能力更强,因为判定覆盖只关心整个判定表达式的值,而条件覆盖使判定表达式中每个条件都取到了不同的结果。条件覆盖增加了对符合判定情况的测试。 然而,要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。 因此,条件覆盖只能保证每个条件至少有一次为真,而未考虑所有的判定结果。
4) 判定/条件覆盖
由于判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖,故提出一种既能满足判定覆盖标准又能满足条件覆盖标准的覆盖方法,即:判定/条件覆盖。 其含义是:选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。 判定/条件覆盖准则的缺点是未能考虑条件的组合情况。
5) 条件组合覆盖
条件组合覆盖是更强的逻辑覆盖标准,其含义是:选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。 满足条件组合覆盖准则的测试数据必然满足判定覆盖、条件覆盖和判定/条件覆盖准则。 因此,条件组合覆盖是上述几种覆盖标准中最强的。 然而,条件组合覆盖存在在两个不足之处:一是线性地增加了测试数据的数量;二是满足条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到。
6) 路径覆盖
路径覆盖要求选取足够多的测试数据,覆盖程序中所有可能的路径。 其优点是:可以对程序进行彻底的测试,比前述五种的覆盖面都广。 然而,由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),故需要设计大量、复杂的测试用例,使得工作量呈指数级增长。
6.关于白盒测试方法的一个实例
在六种白盒测试方法中,覆盖率最高的就是路径覆盖技术,所以本文以路径覆盖测试技术为例来具体研究白盒测试方法。
在路径覆盖中,关键就是要找出其中的路径数。 图 1 是一个具有两个判定表达式的程序流程图,要计算其独立路径数,可以采用如图 2 的方法:
首先,找出图 1 中的所有必经节点。 所谓必经节点,指的是在程序执行过程中任何独立路径都必须经过的节点。 将该节点记为 N(i)。 此时必经节点数为整数,节点数大于等于零且小于等于所有节点数。其次,依次找出程序中所有的必经节点之间的独立路径数 W(i)。最后,根据独立路径数的乘法法则,可以得到独立路径数 W(i)等于所有的必经节点之间的独立路径数的乘积,即独立路径数= W(0)* W(1)* ... * W(N-1)。
从图 1 可以看出,程序图中包含两个判定表达式,在执行过程中,测试数据只针对判定表达式的最终结果进行分析,并未对判定表达式中的各个条件进行不同取值,所有程序流程图中可能包含一定的隐藏路径,即不能找出程序中的完全路径。 完全路径是指所有独立路径的集合,非完全路径就是所有独立路径集合的真子集。 要消除图 1 中 的 隐 藏 路 径 ,可 以 通 过 如 下 方 式 :将 图 1判定表达式中的两个判定条件分解为多个判定,即把图 1 的程序流图转换成如图 3 所示,图 4 是其对应的流图。
图 4 中可以看出,必经节点有三个:分别为节点 1、节点 4 以及节点 7 为,从节点 1 到节点 4 之间的独立路径数有 3 条,从节点4 到节点 7 之间的独立路径也有 3 条,根据乘法法则,可知整个程序流图中的独立路径数一共有 3*3=9 条。 所以,需要设计 9 个测试用例才能完全的路径覆盖。 根据线性代码序列与跳转的测试覆盖准则,将程序在必经节点处割断,分别对每一段程序进行完全路径覆盖的充分测试。 由于没有参数入口,被割断的程序片断可以在程序片断的开头增加代码对参数进行初始化。 从而达到完全测试,缓解测试量过大与测试不足的矛盾。
标签:
原文地址:http://www.cnblogs.com/dulun/p/4439149.html