程序结构分析
参考文献: 软件测试第4章白盒测试一
- 控制流分析:
控制流图:由节点和线组成 控制流图和矩阵: 需要注意的是:在控制流图中,节点包括菱形表示的出口的多条流线相交的汇合点。 程序结构的基本要求: a. 转向并不存在的标号; b. 没有用的语句标号; c. 从程序入口进入后无法达到的语句; d. 不能达到停机语句的语句。 检查可达性: - 数据流分析
如果程序中某一语句执行时能改变某程序变量V的值,则称V是被该语句定义的。如果一语句的执行引用了内存中变量V的值,则说该语句引用变量V。 可达性定义: a. 语句i对变量V的定义,表示为
V
i
V_i
Vi? b. 如果在控制流图中一条路径并未对变量V定义,那么该路径就是变量V的明确定义 c. 如果从节点i到节点j的入口(或出口),变量V有一条明确定义路径,定义
V
i
V_i
Vi?便说是达到了结点j的入口(或出口)。 相关定义:
s
i
s_i
si?: 表示达到i的入口的变量定义的集合。(达到其前趋出口的定义的集合,也就是前趋节点的出口的并集)
t
i
t_i
ti?: 表示达到i的出口的变量定义的集合。(去掉未定义的,加入新定义的)
p
i
p_i
pi?: 是节点i保存的所有定义的集合
c
i
c_i
ci?: 是节点i中生成的定义的集合
t
i
=
(
s
i
∩
p
i
)
∪
c
i
t_i=(s_i∩p_i)∪c_i
ti?=(si?∩pi?)∪ci?
s
i
=
?
j
∈
x
i
t
j
s_i=\bigcup\limits_{j∈x_i}t_j
si?=j∈xi???tj?
s
i
=
?
j
∈
x
i
(
s
j
∩
p
j
)
∪
d
i
s_i=\bigcup\limits_{j∈x_i}(s_j∩p_j)∪d_i
si?=j∈xi???(sj?∩pj?)∪di?
d
i
=
?
j
∈
x
i
c
j
d_i=\bigcup\limits_{j∈x_i}c_j
di?=j∈xi???cj? 引用未定义变量:对每一结点i,我们依次考虑语句i引用的每一变量,如果对任何这样的变量V,并没有V的定义达到i,那么程序含有一个错误。 未曾使用的定义:对于每一变量定义
V
i
V_i
Vi?,我们依次考虑由
V
i
V_i
Vi?达到的每个程序结点j,如果没有引用变量V的相应语句,则程序中含有一个异常。 - 信息流分析
求M、N的商,Q为商,R为余数 图a给出每一语句执行时所用到其输入值的变量。其中,为什么语句4执行时用到了M和N,我的想法是,因为循环的判断语句(3)用到了M和N。 图b给出了其执行可能直接或间接影响输出变量终值的一些语句。其中,因为对Q的定义,并未影响到R的变化,所以R不受语句1、2的影响,但是Q的值受到R值影响。 图c表明了哪个输入值可能直接或间接影响输出变量。(有赋值语句存在都算吧)
|