结构测试(白盒测试) 路径测试和数据流测试

                    结构测试(白盒测试)  Structure Test

结构性测试的方法:路径测试、数据流测试

结构性测试力求提高测试覆盖率。

结构性测试主要用于软件验证:

    are we creating a system correctly?

功能性测试是一种确认技术;

    are we creating a correct system?


黑白盒测试的比较

黑盒:根据程序外部特征进行测试。     (按规格说明书设计测试用例)

白盒:根据程序内部逻辑结构进行测试

从完全不同,完全对立的的起点出发。

单元测试一般采用白盒测试。

集成或系统测试大都采用黑盒测试。


为什么需要白盒测试?

1、如果程序外部特性本身有问题或者规格说明书的规定有误,黑盒测试是发现不了的。

2、即使黑盒测试软件输入输出都是正确的,并不能说明软件就是正确的。


Three Part

路径测试、数据流测试、测试的效率


首先需要知道一个概念:程序图

程序图是一种有向图,图中的节点表示语句片段,边表示控制流(可以立即连续执行的两个节点)。


路径测试

一个概念:DD-路径图(决策到决策)

程序流图可以有多种,所有程序流图都可以简化为唯一的DD-路径图。


DD-路径定义:

结构测试(白盒测试) 路径测试和数据流测试

即,DD-路径是程序图中的最小独立路径,它不能被包括在其他DD-路径之中。

结构测试(白盒测试) 路径测试和数据流测试

注意,DD路径的节点是DD路径,因为上面五种情况的每一种都是一条DD-路径。

结构测试(白盒测试) 路径测试和数据流测试


测试覆盖指标

评测方法:覆盖和质量

最常用的覆盖评测:基于需求的测试覆盖,基于代码的测试覆盖。


语句覆盖:所有语句(每一可执行语句至少执行一次)

分支覆盖:所有DD-路径(所有分支的整体判断的正误都cover)

条件覆盖:所有判断的每种分支(判断的每项的正误都cover)

多条件覆盖:每个判断表达式中条件的各种可能组合都至少出现一次,条件组合覆盖。

多条件覆盖并不能覆盖程序的每一条路径。

分支/条件覆盖:就是分支+条件覆盖。

路径测试:覆盖被测试对象中的所有可能路径。


数据流测试

DD-路径的依赖对偶??


循环测试:

单循环、嵌套循环、级联循环、不规则循环

结构测试(白盒测试) 路径测试和数据流测试

结构测试(白盒测试) 路径测试和数据流测试

这里的嵌套循环测试有个问题:

测试不是最内部循环某一层的时候,更里面的循环不也需要循环吗?其他循环次数为1是什么意思?

难道就是更内层循环进去一次就break吗,那很麻烦吗,要改很多代码,而且这种测试也不太合理。

还是说循环次数为1只是针对更外层循环的。

anyway,it is not a critical problem. but i doubt it.


一个概念:基路径

同向量空间中的 基向量。

基路径:程序图中相互独立的一组路径,使得该程序中的所有路径都可以用基路径表示。

圈复杂度:

计算程序的基本路径数目的一种度量。

基本路径:从起始点到终止点的路径,

而且包含一条其他基本路径不曾用到的边。或者至少引入一个新处理语句或者新判断。

对于循环而言,基本路径应包含不执行循环和执行一次循环的路径。


McCabe圈数:

V(G)=e-n+2p

e:边数,n:节点数,p:连接区域数。

连接区域数?? 不过好像一般取1.

我想起来了,大概是这个有向图 分成几块连通的区域。

不过这里连通上面有些trick,比如是单向就可以,还是必须双向(这好像涉及到强连通的问题,不想复习那个了)

总之,看到一个图,基本上连通区域数都是1


如何寻找McCabe路径?

BFS&DFS


基于路径的测试讨论

结构测试(白盒测试) 路径测试和数据流测试

数据流测试

结构测试(白盒测试) 路径测试和数据流测试

结构测试(白盒测试) 路径测试和数据流测试

结构测试(白盒测试) 路径测试和数据流测试

结构测试(白盒测试) 路径测试和数据流测试

结构测试(白盒测试) 路径测试和数据流测试


基于程序片的测试

结构测试(白盒测试) 路径测试和数据流测试

这里要注意循环内部的语句,程序图后面的语句也可能有影响,不要漏掉了。


用于方法评估的指标:

结构测试(白盒测试) 路径测试和数据流测试

结构测试(白盒测试) 路径测试和数据流测试

结构测试(白盒测试) 路径测试和数据流测试