一句话:提出非确定性程序图上的后向切片理论,用 commitment 封闭刻画弱/强切片并给出 O(n^3) 算法。
本文研究非确定性程序与系统的静态后向切片。作者用非确定性程序图(NDPG)表示任意非确定性分支,并定义 NDPG 与其非终止不敏感(弱)切片、非终止敏感(强)切片之间必须满足的结构与语义关系。为此提出弱/强 commitment 封闭,作为控制流图上相应控制依赖封闭在 NDPG 中的对应物。论文证明:若 NDPG 顶点子集同时满足数据依赖封闭和(弱/强)commitment 封闭,则其诱导图即为满足要求的(弱/强)切片;并给出计算最小数据与 commitment 封闭集的 O(n^3) 算法。作者以 Dijkstra 非确定性卫式命令语言(DNGCL)为例,说明程序可转换为 NDPG 后切片,且所得切片可转回有效 DNGCL 程序。
A theory of slicing non-deterministic programs and systems is developed. Non-deterministic programs and systems are represented as non-deterministic program graphs (NDPGs) that allow arbitrary non-deterministic branching to be expressed. Structural and semantic relationships that must exist between an NDPG and (1) its non-termination insensitive (weak) slices and (2) its non-termination sensitive (strong) slices are defined. Weak and strong commitment closure are introduced. These are the NDPG equivalents of being closed under non-termination sensitive and non-termination insensitive control dependence; properties defined on subsets of vertices of the equivalent deterministic structure: the control flow graph. It is proved that if a subset of the vertices of an NDPG is both data dependence closed and (weak/strong) commitment closed, then the resulting induced graph will, indeed, satisfy our structural and semantic requirements. O ( n 3 ) algorithms for computing minimal data and weak/strong commitment closed sets are given. The resulting induced graphs are thus guaranteed to be weak and strong slices, respectively. It is demonstrated, with examples, that programs written in Dijkstra's non-deterministic guarded command language (DNGCL) can be converted to NDPGs to which our slicing algorithms can then be applied. It is proved that the resulting slices (NDPGs) can always be converted back to valid DNGCL programs, highlighting the applicability of our approach to slicing at the source code level.
DOI 原文 ·
@article{paperbot314,
title = {Static Backward Slicing of Non-deterministic Programs and Systems},
author = {Sebastian Danicic and Michael R. Laurence},
journal = {ACM Transactions on Programming Languages and Systems},
volume = {40},
number = {3},
year = {2018},
doi = {10.1145/2886098}
}