顺序 Erlang 中的系统依赖图技术解析
1. 相关工作概述
程序切片传统上与命令式范式相关联,大多数基于切片的技术都是在命令式程序的背景下定义的,适用于函数式语言的工作较少。不过,系统依赖图(SDG)已被应用到面向对象和面向方面等其他范式中。
此前有尝试为函数式语言定义类似程序依赖图(PDG)的数据结构:
- 功能依赖图(FDG) :首次尝试将 PDG 应用于函数式范式,但它仅适用于高级抽象层面,无法对表达式进行切片,不适用于 Erlang。
- 项依赖图(TDG) :仅考虑带有函数调用和数据构造函数的项重写系统,不考虑复杂结构,也无法处理高阶程序。
- Haskell 程序切片 :使用 Haskell 的抽象语法树并添加数据依赖注释,但未定义新的数据结构。
还有针对 Erlang 程序的相关图结构:
- 顺序组件流图 :用于测试,能确定测试用例应覆盖的不同流路径,但不基于 SDG,缺乏精确程序切片所需信息,如摘要边,且无法分解表达式。
- 行为依赖图(BDG) :能处理模式匹配、复合表达式和 Erlang 中的所有构造,但同样缺乏 SDG 中的摘要边,导致精度损失。
这些工作主要用于过程内切片,在过程间切片时精度会降低,而 SDG 可解决此问题,这也是首次将 SDG 应用于函数式语言。
2. 预备知识
为便于理解,我们考虑 Erlang 语言的以下子集:
超级会员免费看
订阅专栏 解锁全文
71

被折叠的 条评论
为什么被折叠?



