目录 |
白盒测试是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。白盒测试一般用来分析程序的内部结构,对测试者而言是透明的,测试者可以看到被测程序源代码,并分析其内部结构。因此,白盒测试也叫结构测试或逻辑驱动测试。[1]
白盒测试主要是对程序模块进行如下检查:对程序模块的所有独立的执行路径至少测试一遍:对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍:在循环的边界和运行的界限内执行循环体;测试内部数据结构的有效性等等。
白盒测试技术用于测试证明每种内部操作和过程是否符合没汁规格和要求,允许测试人员利用被测程序内部的逻辑结构和有关信息设计或选择测试用例,对程序所有逻辑路径进行测试。白盒测试主要对程馍块进行以下检查:
1)对程序模块的所有独立的执行路至少测试一次;
2)对所有的逻辑判定,取TURE与取FAISE的两种情况都能至少测试一次;
3)存循环的边界和运行界限内执行循环体;
4)测试内部数据的有效性等
白盒测试设计是以开发人员为主。
白盒测试是针对软件内部结构的测试,主要是用覆盖的方式对程序代码进行测试。下面就白盒测试中的六种典型覆盖方法进行探讨。
1)语句覆盖
作为最基本的逻辑覆盖方法,语句覆盖的含义是:选择足够多的测试数据,使得被测程序中的每个语句至少执行一次。通过语句覆盖,可以直观地从源代码得到测试用例,无须细分每条判定表达式;然而,语句覆盖对程序的逻辑覆盖很少,对于一个包含多个条件的判定表达式,它只关心判定表达式的值,并没有分别测试判定表达式中每个条件取不同值的情况。所以语句覆盖无法全面反映多分支的逻辑运算,是很弱的逻辑覆盖标准。
2)判定覆盖
判定覆盖也称分支覆盖。其含义为:不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,即每个判定的每个分支都至少执行一次判定覆盖相对于语句覆盖,其逻辑覆盖能力更强。然而判定覆盖也具有和语句覆盖一样的简单性,大部分的判定语句是南多个逻辑条件组合而成,它也仅判断判定表达式的最终结果,而忽略每个条件的取值情况,故在执行过程中必然会遗漏部分测试路径。
3)条件覆盖
条件覆盖的含义是,不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。相对于判定覆盖,条件覆盖的覆盖能力更强,因为判定覆盖只关心整个判定表达式的值,而条件覆盖使判定表达式中每个条件都取到了不同的结果。条件覆盖增加了对符合判定情况的测试。然而,要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。因此,条件覆盖只能保证每个条件至少有一次为真,而未考虑所有的判定结果。
4)判定/条件覆盖
由于判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。故提出一种既能满足判定覆盖标准又能满足条件覆盖标准的覆盖方法,即:判定/条件覆盖。其含义是:选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。判定/条件覆盖准则的缺点是未能考虑条件的组合情况。
5)条件组合覆盖
条件组合覆盖是更强的逻辑覆盖标准,其含义是:选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。满足条件组合覆盖准则的测试数据必然满足判定覆盖、条件覆盖和判定/条件覆盖准则。因此,条件组合覆盖是述几种覆盖标准中最强的。然而,条件组合覆盖存在两个不足之处:是线性地增加了测试数据的数量;二是满足条件组合覆盖标准的测试数据不一定能使序中的每条路径都执行到。
6)路径覆盖
路径覆盖要求选取足够多的测试数据,覆盖序中所有可能的路径。其优点是:可以对程序进行彻底的测试,比前述五种的覆盖面都广。然而,由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),故需要设计大量、复杂的测试用例,使得工作量呈指数级增长。
1.白盒法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。白盒法是穷举路径测试。在使用这一方案时,要求测试者必须检查程序的内部结构.从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范.即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。
2.白盒测试是工作量巨大并且枯燥的工作.可视化的设计对于测试来说是十分重要的。在选购白盒测试工具时,应当考虑该款测试工具的可视化是否良好。例如:测试过程中是否可以显示覆盖率的函数分布图和上升趋势图,是否使用不同的颜色区分已执行和未执行的代码段显示分配内存情况实时图表等,这些对于测试效率和测试质量的提高是具有很大的作用的。白盒测试目前主要用在具有高可靠性要求的软件领域,例如:军工软件、航天航空软件、工业控制软件等等。
新开发的软件通过了黑盒测试和白盒测试以后.可以说基本满足了设计要求,但并不能保证该软件没有问题存在.只有经过实际试运行的检验,才能更进一步完善和优化,达到软件最优状态。
总之,软件测试的目的不仅是为了发现软件缺陷与错误,而且是对软件质量进行度量和评估,以提高软件的质量。