一句话:针对 Java 9 模块系统定义 8 类不一致依赖,并提出静态分析与自动修复方法 DARCY。
Java 缺乏对软件组件等架构构造的显式支持,Java 9 引入的 Java Platform Module System(JPMS)首次为主流语言带来具有丰富架构接口的模块封装。然而,模块声明未必反映应用中模块的实际使用,开发者可能错误地指定不一致的模块依赖。本文形式化定义了 Java 9 应用中可能出现的 8 种不一致模块依赖,并提出 DARCY,利用这些定义和静态程序分析自动检测 Java 应用中的指定不一致依赖并进行修复。作者在 38 个开源 Java 9 应用上开展实验,结果表明架构不一致普遍存在,并验证了 DARCY 在自动检测与修复这些不一致方面的效果。
Java is one of the most widely used programming languages. However, the absence of explicit support for architectural constructs, such as software components, in the programming language itself has prevented software developers from achieving the many benefits that come with architecture-based development. To address this issue, Java 9 has introduced the Java Platform Module System (JPMS), resulting in the first instance of encapsulation of modules with rich software architectural interfaces added to a mainstream programming language. The primary goal of JPMS is to construct and maintain large applications efficiently-as well as improve the encapsulation, security, and maintainability of Java applications in general and the JDK itself. A challenge, however, is that module declarations do not necessarily reflect actual usage of modules in an application, allowing developers to mistakenly specify inconsistent dependencies among the modules. In this paper, we formally define 8 inconsistent modular dependencies that may arise in Java-9 applications. We also present DARCY, an approach that leverages these definitions and static program analyses to automatically (1) detect the specified inconsistent dependencies within Java applications and (2) repair those identified inconsistencies. The results of our experiments, conducted over 38 open-source Java-9 applications, indicate that architectural inconsistencies are widespread and demonstrate the benefits of DARCY in automated detection and repair of these inconsistencies.