Detection and Repair of Architectural Inconsistencies in Java

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 research project, 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.

How does Darcy work?

Figure below depicts a high-level overview of Darcy comprised of two phases, Detection and Repair. Darcy is implemented in Java and Python. The detection phase takes a Java application as input and leverages static analyses to identify any instance of the specified inconsistent dependencies. The repair section takes the identified inconsistencies in the detection phase and deletes or modifies the explicit dependencies defined in the module-info files within the Java application.

[Darcy picture]


The artifacts are available for download from here.


More details about this project can be found in our publication below:

[seal's logo]
[uci's logo]