The absence of explicit architectural constructs in mainstream programming languages has prevented software developers from achieving the many benefits of architecture-based development. To address this issue, Java 9 has introduced the Java Platform Module System (JPMS), resulting in the first instance of modules with rich software architectural interfaces added to a mainstream programming language. JPMS aims to support the encapsulation, security, and maintainability of Java applications and the JDK. However, a key challenge is that JPMS allows developers to specify inconsistent dependencies among modules. To address this issue, we formally define 8 inconsistent modular dependencies that may arise in JPMS applications. We also introduce Darcy, an approach that leverages these definitions and program analyses to automatically (1) detect inconsistent dependencies and (2) repair them. From experiments on 38 open-source JPMS applications, we demonstrate the widespread prevalence of architectural inconsistencies and Darcy’s ability to detect and repair them.
A technical report is available:
"Detection and Repair of Architectural Inconsistencies in Java", Negar Ghorbani, Joshua Garcia, Sam Malek, UCI-ISR-18-4, October 2018.