Detection and Repair of Architectural Inconsistencies in Java

  • Slides: 90
Download presentation
Detection and Repair of Architectural Inconsistencies in Java Negar Ghorbani Donald Bren School of

Detection and Repair of Architectural Inconsistencies in Java Negar Ghorbani Donald Bren School of Information and Computer Science University of California, Irvine

Software Architecture The principal design decisions employed in the system’s construction 1

Software Architecture The principal design decisions employed in the system’s construction 1

Software Components • One of the key design decisions • How to decompose a

Software Components • One of the key design decisions • How to decompose a software system into components • A software component is an architectural entity • Encapsulates a subset of the system’s functionality and data • Has explicitly defined dependencies • Restricts access via an explicitly defined interface 2

Prescriptive vs. Descriptive Architecture • Prescriptive Architecture • Captures the design decisions made prior

Prescriptive vs. Descriptive Architecture • Prescriptive Architecture • Captures the design decisions made prior to the system’s construction • As-intended • Descriptive Architecture • Describes how the system has been built • As-implemented 3

Architectural Inconsistency Prescriptive Architecture As-Intended Descriptive Architecture As-Implemented 4

Architectural Inconsistency Prescriptive Architecture As-Intended Descriptive Architecture As-Implemented 4

Architectural Inconsistencies Matter • Determines • The Level of Access • Packaging for Deployment

Architectural Inconsistencies Matter • Determines • The Level of Access • Packaging for Deployment • Results in Security and Performance Consequences • Affects Maintenance 5

In The Literature • Bridging the gap between software architecture and implementation • Manual

In The Literature • Bridging the gap between software architecture and implementation • Manual or semi-automatic • The drastic change in the context of Java • Explicit support for component-based development • Software components (modules) • Dependencies 6

Our Objective I. Detect the architectural inconsistencies within Java application II. Repair the identified

Our Objective I. Detect the architectural inconsistencies within Java application II. Repair the identified inconsistencies 7

Outline Ø Background and Motivation Ø Java Platform Module System: Introduction Ø Inconsistent Module

Outline Ø Background and Motivation Ø Java Platform Module System: Introduction Ø Inconsistent Module Dependencies in Java Ø DARCY: Automatic Detection and Repair of Architectural Inconsistencies Ø Evaluation Ø Conclusion and Future Work 8

Java; One Of The Most Widely Used Programming Languages 9

Java; One Of The Most Widely Used Programming Languages 9

The Change Java Platform Module System First Instance of Encapsulation of Modules in Java

The Change Java Platform Module System First Instance of Encapsulation of Modules in Java 9 Rich Software Architectural Interfaces 10

What’s New in JPMS 1. Modular Source Code 2. Modular JDK 3. Encapsulate Most

What’s New in JPMS 1. Modular Source Code 2. Modular JDK 3. Encapsulate Most Internal APIs 4. Modular Run-Time Image 11

Java Applications: 8 vs. 9 9 Java 8 Application Modules Module Descriptor Packages Types

Java Applications: 8 vs. 9 9 Java 8 Application Modules Module Descriptor Packages Types (Classes, Interfaces, …) Code Data Resources: • XML • Properties • etc. 12

A Java Application App. java. logging. x java. desktop. y 13

A Java Application App. java. logging. x java. desktop. y 13

A Java Application App. java. logging. x java. desktop. y 14

A Java Application App. java. logging. x java. desktop. y 14

A Java Application App. java com. service com. foo. utils com. foo. internal com.

A Java Application App. java com. service com. foo. utils com. foo. internal com. foo. network java. logging. x com. foo. exne t com. bar. lang com. bar. impl com. bar. http java. desktop. y 15

A Java Application App. java Module: service com. service Module: foo com. foo. utils

A Java Application App. java Module: service com. service Module: foo com. foo. utils com. foo. network Module: bar com. foo. internal com. foo. exne t JDK Module: java. logging com. bar. lang com. bar. impl com. bar. http JDK Module: java. desktop 16

Java Module • A fundamental new kind of Java program component • A named,

Java Module • A fundamental new kind of Java program component • A named, self describing collection of code, data, and some resources • A set of related packages and types Module Package 1 Package 2 Type 1 Type 4 Type 2 Type 5 Type 3 Type 6 Module Descriptor Module-info. java Data + Resources 17

Module Declaration The module declaration’s body can be empty or may contain various module

Module Declaration The module declaration’s body can be empty or may contain various module directives modulename { /* A set of dependencies */ } 18

Module Dependencies requires exports Module Directives opens uses provides 19

Module Dependencies requires exports Module Directives opens uses provides 19

Module Dependencies requires Module Directives A list of modules it depends on module foo{

Module Dependencies requires Module Directives A list of modules it depends on module foo{ requires java. logging; requires transitive bar; } Module: foo requires transitive Module: bar requires JDK Module: java. logging 20

Module Dependencies requires exports Module Directives A list of modules it depends on A

Module Dependencies requires exports Module Directives A list of modules it depends on A list of packages other modules can use module foo{ exports com. foo. utils; exports com. foo. internal to bar; } exports Module: foo exports to Module: bar com. foo. utils com. foo. internal 21

Module Dependencies Module Directives requires A list of modules it depends on exports A

Module Dependencies Module Directives requires A list of modules it depends on exports A list of packages other modules can use module foo{ opens A list of packages other modules can use via reflection open module foo{ opens com. foo. network; . . . opens com. foo. exnet to bar; } } opens Module: footo Module: foo Module: bar opens com. foo. network openscom. foo. exnet com. foo. internal 22

Module Dependencies A list of modules it depends on exports A list of packages

Module Dependencies A list of modules it depends on exports A list of packages other modules can use module foo{ requires Service; uses com. service. Srv; } com. service. Srv A list of packages other modules can use via reflection Module: Service uses, requires opens uses Module: foo provides, requires Module Directives requires module bar{ requires Service; provides com. service. Srv with A list of services it consumes com. bar. Impl. Srv; } Module: bar A list of implementations for services it offers com. bar. Impl 23

All Together Module: service uses, requires Module: foo exports opens com. example. foo. utils

All Together Module: service uses, requires Module: foo exports opens com. example. foo. utils com. example. service Requires transitive exports to com. example. foo. internal exports to com. example. foo. network com. example. foo. exnet requires JDK Module: java. logging provides, requires Module: bar com. example. bar. lang exports com. example. bar. http com. example. bar. impl opens to requires JDK Module: java. desktop 24

Outline Ø Background and Motivation Ø Java Platform Module System: Introduction Ø Inconsistent Module

Outline Ø Background and Motivation Ø Java Platform Module System: Introduction Ø Inconsistent Module Dependencies in Java Ø DARCY: Automatic Detection and Repair of Architectural Inconsistencies Ø Evaluation Ø Conclusion and Future Work 25

Modules in JPMS Module: foo • Explicit Specification module-info. java • Software Components •

Modules in JPMS Module: foo • Explicit Specification module-info. java • Software Components • Dependencies com. foo. utils com. foo. network • module-info file module foo { requires java. logging; exports com. foo. utils; opens com. foo. network; } 26

However, • No Mechanism to Ensure Consistency • Prescriptive Architecture • Module-info file •

However, • No Mechanism to Ensure Consistency • Prescriptive Architecture • Module-info file • Descriptive Architecture • Module Implementation • Architectural Inconsistencies 27

Inconsistent Module Dependencies Insufficiently specified dependencies are checked by the Java platform • Compile

Inconsistent Module Dependencies Insufficiently specified dependencies are checked by the Java platform • Compile error But, excess dependencies are not handled by Java • Exposes, more than necessary • Requires, more than needed 28

Inconsistent Module Dependencies: Example Module: foo Module: bar module-info file com. foo. utils com.

Inconsistent Module Dependencies: Example Module: foo Module: bar module-info file com. foo. utils com. bar. lang com. foo. network module foo { requires java. logging; JDK Module java. logging JDK Module java. deskto p module bar { requires foo; exports com. foo. utils; requires java. logging; opens com. foo. network; } exports com. bar. lang; } 29

Potential Consequences I. Security • Excessive exports and opens • Exposing the internal of

Potential Consequences I. Security • Excessive exports and opens • Exposing the internal of a module more than it needs • Increase Attack Surface • Due to granting unnecessary access 30

Potential Consequences II. Encapsulation and Maintenance • Requiring unneeded functionalities of other modules •

Potential Consequences II. Encapsulation and Maintenance • Requiring unneeded functionalities of other modules • Increase complexity • Compromises encapsulation • Decreases maintainability 31

Potential Consequences III. Software Bloat and Scalability • Requiring unneeded modules, especially from JDK

Potential Consequences III. Software Bloat and Scalability • Requiring unneeded modules, especially from JDK • Memory utilization • Increase the size of the custom runtime-image • May result in software bloat • Compromises scalability and deployment 32

Inconsistent Module Dependencies: Types I. Inconsistent Requires Dependency II. Inconsistent JDK Requires Dependency III.

Inconsistent Module Dependencies: Types I. Inconsistent Requires Dependency II. Inconsistent JDK Requires Dependency III. Inconsistent Requires Transitive Dependency IV. Inconsistent Exports/Exports To Dependency V. Inconsistent Provides With Dependency VI. Inconsistent Uses Dependency VII. Inconsistent Open Modifier VIII. Inconsistent Opens/Opens To Dependency 33

I. Inconsistent Requires Dependency Module foo{ requires bar; } Encapsulation and Maintenance Module bar{

I. Inconsistent Requires Dependency Module foo{ requires bar; } Encapsulation and Maintenance Module bar{ … } Software Bloat and Scalability 34

II. Inconsistent Exports Dependency Module foo{ exports foo. util; } package foo. util Security

II. Inconsistent Exports Dependency Module foo{ exports foo. util; } package foo. util Security Module m{ . . . } Encapsulation and Maintenance Package p 35

III. Inconsistent Opens Dependency Module foo Security package foo. internal Encapsulation and Reflective Maintenance

III. Inconsistent Opens Dependency Module foo Security package foo. internal Encapsulation and Reflective Maintenance Package p’ Module m{ . . . } Access 36

Outline Ø Background and Motivation Ø Java Platform Module System: Introduction Ø Inconsistent Module

Outline Ø Background and Motivation Ø Java Platform Module System: Introduction Ø Inconsistent Module Dependencies in Java Ø DARCY: Automatic Detection and Repair of Architectural Inconsistencies Ø Evaluation Ø Conclusion and Future Work 37

Darcy: Automatic Detection and Repair of Architectural Inconsistencies in Java 38

Darcy: Automatic Detection and Repair of Architectural Inconsistencies in Java 38

Darcy: Automatic Detection and Repair of Architectural Inconsistencies in Java Darcy Java Inconsistency Analysis

Darcy: Automatic Detection and Repair of Architectural Inconsistencies in Java Darcy Java Inconsistency Analysis Module-Info Scanner Java Application Specified Actual Dependencies Detection Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Repair Module-info Transformer Transformed Java Application 39

Darcy: Automatic Detection and Repair of Architectural Inconsistencies in Java Darcy Detection Java Application

Darcy: Automatic Detection and Repair of Architectural Inconsistencies in Java Darcy Detection Java Application Repair Module-Info Scanner Java Inconsistency Analysis Specified Dependencies Actual Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Module-info Transformer Transformed Java Application 40

Class Dependency Analysis: Classycle[1] Package A uses Package C Package B uses Package D

Class Dependency Analysis: Classycle[1] Package A uses Package C Package B uses Package D [1] F. -J. Elmer, “Classycle: Analysing Tools for Java Class and Package Dependencies, ” How Classycle works, 41

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info Scanner Java Inconsistency Analysis Specified Dependencies Actual Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Module-info Transformer Transformed Java Application 42

Java Reflection Analysis • Leverages custom static analysis • Implemented using Soot framework •

Java Reflection Analysis • Leverages custom static analysis • Implemented using Soot framework • Identifies usage of reflection in the input application • Backward analysis 43

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info Scanner Java Inconsistency Analysis Specified Dependencies Actual Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Module-info Transformer Transformed Java Application 44

Service. Loader Usage Analysis • Leverages custom static analysis • Implemented using Soot framework

Service. Loader Usage Analysis • Leverages custom static analysis • Implemented using Soot framework • Extracting actual dependencies of type uses • • Identifies usage of java. util. Service. Loader Backward Analysis 45

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info Scanner Java Inconsistency Analysis Specified Dependencies Actual Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Module-info Transformer Transformed Java Application 46

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info Scanner Java Inconsistency Analysis Specified Dependencies Actual Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Module-info Transformer Transformed Java Application 47

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info Scanner Java Inconsistency Analysis Specified Dependencies Actual Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Module-info Transformer Transformed Java Application 48

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info Scanner Java Inconsistency Analysis Specified Dependencies Actual Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Module-info Transformer Transformed Java Application 49

Java Inconsistency Analysis • Explores actual and specified dependencies • Identifies all types of

Java Inconsistency Analysis • Explores actual and specified dependencies • Identifies all types of inconsistency scenarios Java Inconsistency Analysis • Reports • • • The identified architectural inconsistency The modules affected The specific directives involved Specified Dependencies Actual Dependencies 50

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info Scanner Java Inconsistency Analysis Specified Dependencies Actual Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Module-info Transformer Transformed Java Application 51

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info Scanner Java Inconsistency Analysis Specified Dependencies Actual Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Module-info Transformer Transformed Java Application 52

Module-Info Transformer • Deletes or Modifies the dependencies defined in module-info files • Generated

Module-Info Transformer • Deletes or Modifies the dependencies defined in module-info files • Generated a customized parser using ANTLR • Checks the records of the detected inconsistent dependencies module foo { open module foo { exports foo. internal ; requires transitive bar; … } } module foo { Module foo { opens pckg 1 to bar; }opens pckg 2 to util, bar; requires bar; …} } 53

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info Scanner Java Inconsistency Analysis Specified Dependencies Actual Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Module-info Transformer Transformed Java Application 54

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info

Darcy: Automatic Detection and Repair of Architectural Inconsistencies Darcy Detection Java Application Repair Module-Info Scanner Java Inconsistency Analysis Specified Dependencies Actual Dependencies Java Reflection Analysis Class Dependency Analysis Service. Loader Usage Analysis Inconsistent Dependencies Module-info Transformer Transformed Java Application 55

Outline Ø Background and Motivation Ø Java Platform Module System: Introduction Ø Inconsistent Module

Outline Ø Background and Motivation Ø Java Platform Module System: Introduction Ø Inconsistent Module Dependencies in Java Ø DARCY: Automatic Detection and Repair of Architectural Inconsistencies Ø Evaluation Ø Conclusion and Future Work 56

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ 5: Software Bloat RQ 6: Performance 57

RQ 1: How pervasive are inconsistent, architectural dependencies in practice?

RQ 1: How pervasive are inconsistent, architectural dependencies in practice?

RQ 1: Pervasiveness In 76% of applications • 29 out of 38 146 inconsistencies

RQ 1: Pervasiveness In 76% of applications • 29 out of 38 146 inconsistencies Exports (to) • Most Frequent Requires JDK • Most frequent among requires inconsistencies Provides • Most infrequent 59

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ 5: Software Bloat RQ 6: Performance 60

RQ 2: How accurate is DARCY at detecting inconsistent, architectural dependencies and repairing them?

RQ 2: How accurate is DARCY at detecting inconsistent, architectural dependencies and repairing them?

RQ 2: Correctness Manually checked all detected inconsistencies • All were true Successfully compiled

RQ 2: Correctness Manually checked all detected inconsistencies • All were true Successfully compiled after the repair • Darcy’s ability to correctly repair • Without introducing unexpected behavior Same test passing rate • For those applications with test suite 62

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ 5: Software Bloat RQ 6: Performance 63

RQ 3: To what extent does DARCY reduce the attack surface of Java modules?

RQ 3: To what extent does DARCY reduce the attack surface of Java modules?

RQ 3: Security • Attack surface of Java-9 applications • Reflects the likelihood of

RQ 3: Security • Attack surface of Java-9 applications • Reflects the likelihood of resources being used in security attacks • Number of packages that are accessible from outside their module • Exposed by exports(to) and opens(to) • Measured the number of exposed packages before and after Darcy 65

RQ 3: Security Reduce attack surface in 24 out of 29 applications • By

RQ 3: Security Reduce attack surface in 24 out of 29 applications • By avg. of 60. 76% 66

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ 5: Software Bloat RQ 6: Performance 67

RQ 4: To what extent does DARCY enhance encapsulation of Java modules?

RQ 4: To what extent does DARCY enhance encapsulation of Java modules?

RQ 4: Encapsulation Measured two metrics from an extensive investigation by Bouwers et al.

RQ 4: Encapsulation Measured two metrics from an extensive investigation by Bouwers et al. [1] I. Ratio of Coupling (Ro. C) • • Number of existing dependencies to all possible dependencies Ideally a low value II. Normalized Component Dependency (NCD) • • Sum of all outgoing dependencies to the total number of modules Ideally a low value [1] E. Bouwers, A. van Deursen, and J. Visser, “Quantifying the encapsulation of implemented software architectures, ” in Software Maintenance and Evolution (ICSME), 2014 IEEE International Conference on. IEEE, 2014, pp. 211– 220. 69

RQ 4: Encapsulation Reduce Ro. C in 29 applications • • By avg. of

RQ 4: Encapsulation Reduce Ro. C in 29 applications • • By avg. of 29. 5% Up to 83% Reduce NCD in 20 applications • • By avg. of 26. 8% Up to 79% 70

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ 5: Software Bloat RQ 6: Performance 71

RQ 5: To what extent does DARCY reduce the size of runtime memory?

RQ 5: To what extent does DARCY reduce the size of runtime memory?

RQ 5: Software Bloat Measured the runtime memory, before and after Darcy’s repair Runtime

RQ 5: Software Bloat Measured the runtime memory, before and after Darcy’s repair Runtime memory reduction in 15 applications • • Avg. 17% Up to 62% 73

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ

Evaluation RQ 1: Pervasiveness RQ 2: Correctness RQ 3: Security RQ 4: Encapsulation RQ 5: Software Bloat RQ 6: Performance 74

RQ 6: What is DARCY’s runtime efficiency in terms of execution time?

RQ 6: What is DARCY’s runtime efficiency in terms of execution time?

RQ 6: Performance Execution time for each component: 76

RQ 6: Performance Execution time for each component: 76

Outline Ø Background and Motivation Ø Java Platform Module System: Introduction ØInconsistent Module Dependencies

Outline Ø Background and Motivation Ø Java Platform Module System: Introduction ØInconsistent Module Dependencies in Java Ø DARCY: Automatic Detection and Repair of Architectural Inconsistencies Ø Evaluation Ø Conclusion and Future Work 77

Conclusion • Formally defined 8 types of architectural inconsistencies in Java 9 • Introduced

Conclusion • Formally defined 8 types of architectural inconsistencies in Java 9 • Introduced Darcy • Effectively detect and robustly repair architectural inconsistencies in Java • Results in • • • Significant reduction of attack security Enhancement of encapsulation Reduction of memory usage • Future Work • • • A plug-in for Java IDEs Migration to JPMS Quality Assurance and Integration Testing Thank You 78

Backup Slides

Backup Slides

Related Work Bridging the gap between architecture and implementation • Focusing on the descriptive

Related Work Bridging the gap between architecture and implementation • Focusing on the descriptive architecture • Reverse engineering • Software clustering to determine the components • Obtaining the descriptive and prescriptive architecture • Followed by checking their conformance • Reflexion Method • Providing architectural constructs in the code • Forward engineering (e. g. code generation) • Round-trip engineering (both forward and reverse) 80

Threats to Validity • False positive or negative of static analyses • Miss some

Threats to Validity • False positive or negative of static analyses • Miss some inconsistencies in the detection • Report false inconsistencies • The selection and number of Java applications in the dataset • Comprehensiveness of the identified inconsistencies 81

Inconsistent JDK Requires Dependency Module foo 82

Inconsistent JDK Requires Dependency Module foo 82

Inconsistent Requires Transitive Dependency Module m module m{ requires foo; } Module foo module

Inconsistent Requires Transitive Dependency Module m module m{ requires foo; } Module foo module foo{ requires transitive bar; } Module bar module bar{ … } 83

Inconsistent Exports To Dependency Module foo module foo{ exports foo. util package foo. util

Inconsistent Exports To Dependency Module foo module foo{ exports foo. util package foo. util to bar; } Module bar module bar{ . . . } Package p 84

Inconsistent Provides With Dependency Module foo module foo{ provides com. service Module m with

Inconsistent Provides With Dependency Module foo module foo{ provides com. service Module m with foo. srv. Impl. Srv; } module bar{ uses com. service; … } package foo. srv Class Impl. Srv 85

Inconsistent Uses Dependency Module foo Module service module foo{ requires com. service; uses com.

Inconsistent Uses Dependency Module foo Module service module foo{ requires com. service; uses com. service; } java. util. Service. Loader module service{…} Service Class Load. Service com. service 86

Inconsistent Open Modifier Dependency Module foo Module m’{ … } open module foo{ .

Inconsistent Open Modifier Dependency Module foo Module m’{ … } open module foo{ . . . } Package p Reflective Access Package p’ 87

Inconsistent Opens To Dependency Module foo Module bar{ … } module foo{ opens foo.

Inconsistent Opens To Dependency Module foo Module bar{ … } module foo{ opens foo. util to bar; } package foo. util Reflective Access Package p’ 88

89

89