Skip to main content
QUICK REVIEW

[论文解读] A Static Program Slicing Approach for Output Stream Objects in JEE Applications

Anas Shatnawi, Hafedh Mili|arXiv (Cornell University)|Jan 1, 2017
Software Testing and Debugging Techniques参考文献 2被引用 4
一句话总结

本文提出了一种针对 Java EE(JEE)应用程序中输出流对象的静态程序切片方法,通过从 KDM 模型构建依赖调用图,并在转置图上应用广度优先搜索,以识别所有影响输出流的语句。该方法实现了对 JEE 服务器端代码的精确、语言无关的分析,支持变更影响分析和调试等任务,能够以高精度隔离相关程序切片。

ABSTRACT

In this paper, we propose a program slicing approach for the output stream object in JEE applications. Our approach is based on extracting a dependency call graph from KDM models of JEE applications. Then, it applies breath-first search algorithm to identify the program slice as a graph reachability problem. The proposed approach is implemented as an extension of our DeJEE tool.

研究动机与目标

  • 为解决在混合使用服务器端 Java 与客户端 Web 语言的复杂 JEE 应用程序中,识别输出流对象程序切片的挑战。
  • 克服现有切片技术在 JEE 环境中因嵌套流、反射、多态性和配置文件带来的局限性。
  • 基于 KDM 模型开发一种语言无关的切片方法,以支持多语言 JEE 应用程序。
  • 将该方法实现为 DeJEE 工具的扩展,以在软件维护与分析中实现实际应用。

提出的方法

  • 从 JEE 源代码的 KDM 模型构建依赖调用图(G = ⟨V, E⟩),其中节点表示语句,边表示数据依赖或控制依赖。
  • 将数据依赖建模为语句之间的写后读关系,并通过顺序执行确保执行顺序。
  • 通过将条件语句(如 if、for)链接到其内部语句来建模控制依赖,以方法原型作为根节点。
  • 通过反转依赖调用图中的所有边,生成转置图 GT,以支持反向可达性分析。
  • 在 GT 上从输出流方法调用(如 out.print、out.write)开始应用广度优先搜索(BFS)算法,以识别所有可达节点。
  • 将最终的程序切片提取为可达节点的集合,表示所有影响输出流值的语句。

实验结果

研究问题

  • RQ1在混合语言代码和容器依赖复杂的 JEE 应用程序中,如何有效应用程序切片于输出流对象?
  • RQ2KDM 建模在多语言 JEE 系统中能在多大程度上实现语言无关的程序切片?
  • RQ3基于 KDM 模型构建的依赖调用图能否准确捕获用于切片目的的数据和控制依赖?
  • RQ4在转置图上使用图可达性分析结合广度优先搜索,对于识别 JEE 应用程序中的最小程序切片有多高效?

主要发现

  • 所提出的方法通过在 KDM 基础的程序表示中建模依赖关系,成功识别出所有影响输出流对象的语句。
  • 使用 KDM 模型实现了语言独立性,使该切片方法可应用于 JEE 应用程序中的多种编程语言。
  • 依赖调用图的构建准确捕获了数据和控制依赖,为切片奠定了坚实基础。
  • 在转置图上应用广度优先搜索高效计算出可达节点集合,生成了最小且精确的程序切片。
  • 作为 DeJEE 工具的扩展实现,证明了该方法在真实 JEE 应用程序分析中的可行性和实用性。
  • 该方法在静态分析中有效处理了复杂的 JEE 模式,如嵌套流、方法重载和多态分派。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。