论文标题
使用抽象存储器模型的大型应用程序的集中动态切片
Focused Dynamic Slicing for Large Applications using an Abstract Memory-Model
论文作者
论文摘要
动态切片技术计算程序依赖项,以查找影响特定执行的程序点上变量值的所有语句。尽管有许多潜在用途,但适用性受到以下事实的限制:它们通常无法扩展超出小型应用程序。我们认为,这一限制的核心是使用内存参考来识别数据依赖性。尤其是,使用内存参考的工作阻碍了对代码切片的明显处理(例如,用户对用户感兴趣)(包括库和框架)。对不在焦点的代码进行更粗糙的分析的能力可能会提供性能提高,并可能成为迈向可伸缩性的途径。在本文中,我们提出了一种新颖的方法,该方法完全替换了与程序符号(即术语)一起使用的内存分析模型的记忆分析模型。实际上,此方法可以为不属于代码的代码而没有仪器(不生成任何跟踪)的替代方法。我们报告了用于C \#,\ textit {dynabs}的抽象动态切片机的实现,并进行了评估,该评估显示了Roslyn and Powershell的大小和相关部分 - 在Github中可以找到的两个最大和现代的C \#应用 - 在大多数几分钟内都可以在github中找到。我们还展示了如何减少对定制的焦点的焦点如何带来重要的加速,并具有边际相对精确损失。
Dynamic slicing techniques compute program dependencies to find all statements that affect the value of a variable at a program point for a specific execution. Despite their many potential uses, applicability is limited by the fact that they typically cannot scale beyond small-sized applications. We believe that at the heart of this limitation is the use of memory references to identify data-dependencies. Particularly, working with memory references hinders distinct treatment of the code-to-be-sliced (e.g., classes the user has an interest in) from the rest of the code (including libraries and frameworks). The ability to perform a coarser-grained analysis for the code that is not under focus may provide performance gains and could become one avenue toward scalability. In this paper, we propose a novel approach that completely replaces memory reference registering and processing with a memory analysis model that works with program symbols (i.e., terms). In fact, this approach enables the alternative of not instrumenting -- thus, not generating any trace -- for code that is not part of the code-to-be-sliced. We report on an implementation of an abstract dynamic slicer for C\#, \textit{DynAbs}, and an evaluation that shows how large and relevant parts of Roslyn and Powershell -- two of the largest and modern C\# applications that can be found in GitHub -- can be sliced for their test cases assertions in at most a few minutes. We also show how reducing the code-to-be-sliced focus can bring important speedups with marginal relative precision loss.