一、定义节点
二、使用节点
三、谓词使用(p-use)、计算使用(c-use)
类似if X>0 then中的X,为谓词使用,其余都属于计算使用。
四、du-pairs
(d,u): d为一个定义v的节点,u为v的使用节点或者边。
关于变量 v 的定义使用对(“du-pair”)的严谨版本定义:
(d,u):使得 d 是程序流图中定义 v 的节点,u 是使用 v 的节点或边,并且有一个关于 v 从 d 到 u 的 def-clear 路径。
五、简单路径和无循环路径(simple/loop-free path)
如果路径中的所有边都不同,则路径(部分或完整)是简单的。(可以有1个环路)
如果路径中的所有节点都是不同的,则该路径是无循环的。
path | simple? | loop-free? |
<1,3,4,2> | ✔ | ✔ |
<1,2,3,2> | ✔ | × |
<1,2,3,1,2> | × | × |
<1,2,3,2,4> | ✔ | × |
六、paths
定义清除路径:如果路径中没有重新定义 v,则路径相对于变量 v 的定义是清晰的(“def-clear”)。
例一 :变量为A
例二:变量为x
七、du-path
若路径 <n1,n2,...,nj,nk> 是相对于变量 v 的 du-path,必须满足以下其中的一点:
①如果在节点 n1 处定义了 v,并且在节点 NK 处有一个 V 的 C 使用,<n1,n2,...,nj,nk> 是一个简单路径
②在边缘 <NJ,NK> 处P使用 V,<N1,N2,...NJ> 是一个无环路路径。
八、全定义
对于每个程序变量 v,必须涵盖从 v 的每个定义到至少一个 c 使用 或 v 的一个 p 使用的至少一个 def-clear 路径。
All-defs:
由于 <1,2,3,4,5> 涵盖了从 A/B 的每个定义到至少一个 A/B 的 c 使用 或 p 使用的 def-clear 路径,因此实现了 All-Defs 覆盖。
九、全使用
对于每个程序变量 v,必须涵盖从 v 的每个定义到每个 c 使用和 v 的每个 p 使用至少一条 def-clear 路径。
十、All-du-paths
对于每个程序变量 v,必须涵盖从 v 的每个定义到每个c使用和每个p使用的每个du-path。