在上一周,我们进行了关于黑盒测试的实验并且在博客上写了一篇关于黑盒测试小结的博客,本周,我将继续对于白盒测试的内容进行一下小结!
白盒测试:又称结构测试,它一般用来测试程序的内部结构(Control Flow 控制流, Data Flow数据流)。并判定其结果是否与预期的结果一致。从这里我们便可以清晰的分辨出白盒测试
与黑盒测试的最大区别,对于黑盒测试,我们对其内部结构一无所知,而且测试的主要目的只是测试其功能性的内容,而对于白盒测试而言,我们要根据其内部结构来设计测试用例对
内部结构进行测试。
白盒测试最常用的方法有几下几种:1.静态分析测试 2.语句分支覆盖测试
首先对于静态分析测试,在课上并没有讲述过多的内容,这里·补充一些从网上查询到的资料
静态分析测试 是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,
例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。
而对于语句分支覆盖测试,则需要我们根据实际情况来设计测试用例了
对于这一部分,我们着重讲了下面这两个准则
1.控制流覆盖准则
在这当中,又包含了四个准则 A.语句覆盖准则 B. 分支覆盖准则 C.谓词测试 D.路径覆盖准则
A.语句覆盖准则
是最简单的结构性测试方法之一,它要求测试中,程序中的每条语句都得到运行。即,控制流图中的所有语句都被运行的充分必要条件是,覆盖图中的所有节点。
B.分支覆盖准则
分支覆盖要求在软件测试中,每个分支都至少获得一次真/假取值的经历。测试数据集T称为分支覆盖充分的,当且仅当LT覆盖了GP中的所有有向边。EDGE(LT)为
路径集合LT中所覆盖的GP中的有向边的集合, EG 是GP 中所有边的集合。
C.谓词覆盖准则
原子谓词准则:测试数据集T称为原子谓词覆盖充分的,如果对任意一个分支中的任意一个原子谓词,T中存在一个测试数据使其在运行时为“真”、为“假”各一次。
分支谓词覆盖准则:测试数据集T称为分支-谓词覆盖充分的,如果对任意一个分支所包含的任意一个原子谓词,T中存在一个测试数据在运行时为真/假值至少各
一次,并且任意一个复合谓词本身也至少获得真/假值各一次。
复合谓词覆盖准则:测试数据集T称为复合谓词覆盖充分的,如果任意一个分支,对该分支所包含的原子谓词的任意一个可行的真/假值组合,T中都存在一个测试
数据使该组合谓词运行时,原子谓词的取值恰好为该真/假值组合。即每个复合谓词内的原子谓词的各种可能的组合都至少出现一次。
D.路径覆盖准则
测试数据集T称为路径覆盖充分的,当且仅当LT覆盖了GP中的所有完整路径。让EP(GP)为控制流图中的所有完整路径的集合.
2.数据流覆盖准则
在这当中,又包含A定义覆盖测试准则 B引用覆盖测试准则
A.定义覆盖测试准则
测试数据集T对测试程序P满足定义覆盖准则,如果对具有数据流信息的控制流图GP中的每一个变量x的每一个定义性出现,若该定义性出现能够可行地传递到该变量
的某一个引用性出现,那么LT中存在一条路径A,它包含一条子路径A’,使得A’将该定义出现传递到某一引用性出现。
B.引用覆盖测试准则
测试数据集T对测试程序P满足引用覆盖准则,如果对具有数据流信息的控制流图GP中的每一个变量x的每一个定义n,以及该定义的每一个能够可行地传递到的引用n’,
LT中都存在一条路径A,它包含一条子路径A’,使得A’将n传递到n’。
综上所述,白盒测试的最大作用是
迫使测试人员去仔细思考软件的实现
可以检测代码中的每条分支和路径
揭示隐藏在代码中的错误
对代码的测试比较彻底