Skip to main content
QUICK REVIEW

[论文解读] Static Code Analysis of Multilanguage Software Systems

Anas Shatnawi, Hafedh Mili|arXiv (Cornell University)|Jun 3, 2019
Software Engineering Research参考文献 20被引用 4
一句话总结

本文提出了一种针对多语言 Java EE 应用的静态代码分析方法,解决了依赖关系发现中的五个关键挑战,包括跨语言依赖、隐藏的容器服务以及配置文件分析。通过利用 KDM 元模型并扩展 MoDisco 以支持自定义规则,作者实现了 DeJEE——一种工具,其在识别 Java、JSP 和 JSF 组件之间的依赖关系时,实现了 100% 的精确率,并且召回率比 MoDisco 最高提升 70.5%。

ABSTRACT

Identifying dependency call graphs of multilanguage software systems using static code analysis is challenging. The different languages used in developing today's systems often have different lexical, syntactical, and semantic rules that make thorough analysis difficult. Also, they offer different modularization and dependency mechanisms, both within and between components. Finally, they promote and--or require varieties of frameworks offering different sets of services, which introduce hidden dependencies, invisible with current static code analysis approaches. In this paper, we identify five important challenges that static code analysis must overcome with multilanguage systems and we propose requirements to handle them. Then, we present solutions of these requirements to handle JEE applications, which combine server-side Java source code with a number of client-side Web dialects (e.g., JSP, JSF) while relying on frameworks (e.g., Web and EJB containers) that create hidden dependencies. Finally, we evaluate our implementations of the solutions by developing a set of tools to analyze JEE applications to build a dependency call graph and by applying these tools on two sample JEE applications. Our evaluation shows that our tools can solve the identified challenges and improve the recall in the identification of multilanguage dependencies compared to standard JEE static code analysis and, thus, indirectly that the proposed requirements are useful to build multilanguage static code analysis.

研究动机与目标

  • 识别并解决多语言软件系统(特别是 Java EE 应用)静态代码分析中的五个主要挑战。
  • 克服现有单语言和孤立语言分析工具的局限性,这些工具会遗漏跨语言依赖和容器服务依赖。
  • 利用与语言无关的元模型,构建异构组件(Java、JSP、JSF)之间的统一依赖调用图。
  • 通过分析源代码中不可见的配置文件和容器服务,提升依赖发现的召回率。
  • 通过在真实 JEE 应用(Java PetStore 和 JSP Blog)上实现和评估,验证该方法的有效性。

提出的方法

  • 该方法采用 OMG 的知识发现元模型(KDM)作为建模程序元素和依赖关系的与语言无关的基础。
  • 定义自定义转换规则,以解析和建模多语言代码(Java、JSP、JSF),并将其映射到 KDM 模型。
  • 通过框架规范和上下文无关文法推导出的声明式规则,对容器服务依赖进行编码。
  • 分析配置文件(如 web.xml、faces-config.xml)以提取无法在源代码中表达的隐藏依赖。
  • 将 DeJEE 工具实现为 Eclipse 插件,以自动化构建跨组件的依赖图。
  • 集成 MoDisco 的 KDM 支持用于 Java,并通过自定义解析和基于规则的依赖推断,将其扩展以处理 JSP 和 JSF 组件。

实验结果

研究问题

  • RQ1在多语言软件系统(特别是 Java EE 应用)中进行静态代码分析时,其关键挑战是什么?
  • RQ2如何系统性地识别和建模那些由容器服务和配置文件抽象的隐藏依赖?
  • RQ3基于 KDM 的统一模型在多语言系统中,能在多大程度上提升依赖调用图构建的召回率和精确率?
  • RQ4与 MoDisco 等现有工具相比,该方法在检测跨组件和跨语言依赖方面表现如何?
  • RQ5检测到以往不可见的依赖关系,对程序理解与软件维护具有哪些实际影响?

主要发现

  • DeJEE 工具成功解决了多语言 Java EE 系统静态分析中识别出的全部五个挑战,包括跨语言依赖和隐藏的容器服务依赖。
  • 对于 JSP Blog 和 Java PetStore 应用,DeJEE 在依赖检测中均实现了 100% 的精确率。
  • 在 JSP Blog 中,DeJEE 实现了 100% 的召回率;在 Java PetStore 中,也实现了高召回率,显著优于 MoDisco。
  • 在两个案例研究中,与 MoDisco 相比,DeJEE 在 KDM 实体实例上的召回率提升了 70.5%,在 KDM 关系实例上的召回率提升了 58.5%。
  • 对配置文件和容器服务的分析,使得能够检测到源代码中不可见的依赖,从而降低运行时错误的风险。
  • 基于 KDM 的统一建模使 Java、JSP 和 JSF 组件之间的依赖关系得以整合,构建出一致且连贯的依赖调用图,有助于程序理解与维护任务。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

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