作者:一个人的天空
一般软件开发人员和测试人员对白盒测试和黑盒测试的感念都有一定的认识,但认为是编代码所做的测试是白盒测试,黑盒测试不用编写代码,这其实是一种误解。
任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试。
黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
产品系统的高耦合造成的可测性较差是项目单元测试第一难题。不幸的是,程序是客观事物的反映,客观事物本来就互相关联、互相纠缠,代码之间的大量耦合无法避免。
一、
白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
二、概述
白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例的设计方法,盒子对应的是被测试的测试,"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
三、基本方法
强度由低到高:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
白盒测试的主要用例设计方法有6种:
语句覆盖,使程序的每一条可执行语句至少被执行一次。可以很直观地从源代码得到测试用例,无须细分每条判定表达式。由于这种测试方法仅仅针对程序逻辑中显式存在的语句,对于隐藏的条件和可能到达的隐式逻辑分支是无法测试的。语句覆盖对于多分支的逻辑运算是无法全面反映的,它只在乎运行一次,而不考虑其他情况。
判定覆盖,也叫分支覆盖,使程序中每个分支判断的每一种可能都至少被执行一次。判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。
条件覆盖,使程序中每一个分支判断中的每一个条件的可能结果至少被执行一次。条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
判定/条件覆盖,使程序同时满足条件覆盖和判定覆盖。判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足,缺点是未考虑条件的组合情况。
条件组合覆盖,使程序中每一个分支判断中的每一个条件的每一种组合都至少被执行一次。条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。但线性地增加了测试用例的数量。
路径覆盖,使程序中所有可能的路径都至少被执行一次。这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。但需要设计大量、复杂的测试用例,使得工作量呈指数级增长。
正确使用白盒测试,要先从代码分析入手,根据不同的代码逻辑规则、语句执行情况,选用适合的覆盖方法。任何一个高效的测试用例,都是针对具体测试场景的。逻辑测试不是片面的测试正确的结果或是测试错误的结果,而是尽可能全面地覆盖每一个逻辑路径。
四、优缺点
1. 优点
a.迫使测试人员去仔细思考软件的实现
b.可以检测代码中的每条分支和路径
c.揭示隐藏在代码中的错误
d.对代码的测试比较彻底
e.最优化
2. 缺点
a.代价昂贵
b.无法检测代码中遗漏的路径和数据敏感性错误
c.不验证规格的正确性
五、白盒测试中设计到圈复杂度的计算
首先要画出控制流图
圈复杂度计算公式为:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。
此外圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,
此外对应与控制流图区域数还有一个圈复杂度计算公式:V(G)=区域数=判定节点数+1。其中判定节点是控制流图中出现的判断条件。
六、总结
因此在设计软件架构时,就应当注意白盒测试时的方便。因此设计一套好的软件架构时非常重要的,不仅要考虑软件代码的可维护性,易阅读性,设计的尽量要清晰明了。
标签:覆盖,白盒,测试用例,判定,测试,条件 From: https://blog.51cto.com/u_6958388/5922961