我刚刚被介绍过术语"程序切片。"人们想要这样的功能是完全合理的,但是它存在于任何地方吗?
这个词现在已经20岁了,我看到有很多出版物,研究论文等等。但实际的工具在哪里?人们是否真的将这个概念付诸实践,或者只是在学术上进行研究?
那里有什么,以及用什么语言?
编辑:我想我正在寻找的,我作为一个接受的答案奖励的内容,是对某些出版物/组织/等的参考,这些出版物/组织特别适合于程序切片和维护一系列工具/技术/等。
答案 0 :(得分:8)
[编辑](对OP修订问题的回应)
我已经关注了很长时间的文献。我不认为这是一个"程序切片"中心,有你想要的那种列表。大多数已经建成的程序切片机都是某种大学实验(意味着它们没有在生产中工作,并且不能用于实际目的)。你可以通过搜索scholar.google.com上的术语,猜猜是什么,"程序切片&#34 ;;我怀疑你已经知道了。 " biggies"我想你已经在这里了。
这项调查有点陈旧,但由一位出色的研究人员完成:http://www.cse.buffalo.edu/LRG/CSE605/Papers/slicing-survey-tip.pdf。这个是最近的: http://dl.acm.org/citation.cfm?id=1050865。
CodeSurfer是一个用于在C程序上执行静态切片的商业工具。我相信他们也会处理C ++。其他工具无法提供的重要优势是用于交互式探索代码片段的UI。
Indus是用于在Java上进行静态代码切片的大学研究工具。我不确定这是否还在积极发展中。
似乎有各种各样的"动态"由大学建立的Java程序切片工具。他们都没有正在积极开发或使用我所知道的。
我公司提供DMS软件再造工具包,其中包含用于程序控制和数据流分析的通用机器,包括构建自定义静态代码切片器。 DMS已被用于构建大型C程序片段以及工业过程控制程序。 (我提供了一个链接,但是当我这样做时,人们似乎很讨厌它。)
答案 1 :(得分:6)
致力于分析C代码的Frama-C platform具有完整的过程间slicing plugin。请参阅示例this page,其中用户使用此插件来简化他正在分析的程序。
答案 2 :(得分:2)
请查看Giri。
动态程序切片是一种可以在一次执行程序时精确确定哪些指令影响特定值的技术。 Giri在LLVM编译器中实现动态向后切片。
该项目最初由Swarup Kumar Sahoo,John Criswell和UIUC的Vikram S. Adve博士开发。它是由Google Summer of Code(GSoC)2013在其总体项目LLVM下选出的。 2013年6月,来自清华大学的Mingliang Liu加入了Giri。这是一个正在进行的项目,并且非常感谢拉动请求。
答案 3 :(得分:1)
查看Wala的Java。 WALA包含一个切片器,基于系统依赖图中可达性的上下文敏感列表。