白盒测试

来源:互联网 发布:财务审计软件oa 编辑:程序博客网 时间:2024/05/16 18:52

白盒测试

又称为“结构测试”和“逻辑驱动测试”

定义: 把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。


白盒测试主要对程序模块进行如下的检查:
– 对模块的每一个独立的执行路径至少测试一次;
– 对所有的逻辑判定的每一个分支(真与假)都至少测试一次;
– 在循环的边界和运行界限内执行循环体;
– 测试内部数据结构的有效性;

代码评审:靠人发现代码中不符合规范的地方、潜在的错误;
代码性能分析:发现代码中的性能缺陷;
白盒测试:发现代码中的错误!

白盒测试用例中的输入数据从程序结构中导出,期望输出从需求规格中导出。

注:最彻底的白盒测试是覆盖程序中的每一条执行路径,但是程序中一般都有循环,路径数目很大,不可能测试每一条路径,所以只能希望用例能够覆盖代码的程度尽量高些。

覆盖标准

  1. 逻辑覆盖
    • 语句覆盖
    • 判定覆盖(分支覆盖)
    • 条件覆盖
    • 判定/条件覆盖
    • 条件组合覆盖
  2. 控制结构覆盖

    • 基本路径测试
    • 循环测试
    • 条件测试
    • 数据流测试

    五种覆盖标准的对比

五种覆盖标准的关系


基本路径法

– 在程序控制图的基础上,通过分析控制构造的环行复杂性,导出基本可执行
路径集合,从而设计测试用例。
– 设计出的测试用例要保证在测试中程序的每一个基本独立路径至少执行一次。

在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可
执行路径集合,从而设计测试用例。包括以下4 个步骤和一个工具方法:
1. 程序的控制流图:描述程序控制流的一种图示方法。
2. 程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本
路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次
所必须的测试用例数目的上界。
3. 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。
4. 准备测试用例:确保基本路径集中的每一条路径的执行。

控制流图

流图符号:
- 圆,代表一条或多条语句。
- 箭头称为边或连接,代表控制流。

基本语句对应的控制流图:
这里写图片描述

程序流程图->控制流图
这里写图片描述


独立路径( 基本路径) :一条程序执行的路径 , 至少包含一条在定义该
路径之前的其他基本路径中所不曾用过的边( 即:至少引入程序的一个
新处理语句集合或一个新条件)

计算圈复杂度:圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界
注意:独立路径不应该经过同一个判定结点的左右两侧,否则这条路径如果出现错误,则不知道是哪一侧出现错误。
三种计算方法:
1. 流图中区域的数量
2. V(G)= E-N+2,E是边数,N是结点数
3. V(G)= P+1,P是判定结点的数量

测试用例 = { 测试数据+ 期望结果}
– 测试数据是由路径和程序推论出来的;
– 预期结果是从函数说明中导出,不能根据程序结构中导出!


循环测试

四种循环:
- 简单循环
- 串接循环
- 嵌套循环
- 无结构循环

如下图所示:
这里写图片描述

边界 + 界内

对于简单循环,测试应包括以下几种,其中的n 表示循环允许的最大
次数。
– 零次循环:从循环入口直接跳到循环出口。
– 一次循环:查找循环初始值方面的错误。
– 二次循环:检查在多次循环时才能暴露的错误。
– m次循环:此时的m<n,也是检查在多次循环时才能暴露的错误。
– n(最大)次数循环、n+1(比最大次数多一)次的循环、n-1(比最大次数少一)次的循环。

对于嵌套循环:
– 从最内层循环开始,设置所有其他层的循环为最小值;
– 对最内层循环做简单循环的全部测试。测试时保持所有外层循环的循环变量为最小值。另外,对越界值和非法值做类似的测试。
– 逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取“典型”值。
– 反复进行,直到所有各层循环测试完毕。
– 对全部各层循环同时取最小循环次数,或者同时取最大循环次数。对于后一种测试,由于测试量太大,需人为指定最大循环次数。

对于串接循环,要区别两种情况。
– 如果各个循环互相独立,则串接循环可以用与简单循环相同的方法进行测试。
– 如果有两个循环处于串接状态,而前一个循环的循环变量的值是后一个循环
的初值。则这几个循环不是互相独立的,则需要使用测试嵌套循环的办法来处理。

对于非结构循环,不能测试, 应重新设计循环结构,使之成为其它循环方式,然后再进行测试。