结构测试(白盒测试) 路径测试和数据流测试
结构测试(白盒测试) 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
基于路径的测试讨论
数据流测试
基于程序片的测试
这里要注意循环内部的语句,程序图后面的语句也可能有影响,不要漏掉了。
用于方法评估的指标: