“…Current strategies for decomposing monolithic applications fall under static-or dynamic-analysis techniques, i.e., they typically compute module dependencies using static and/or dynamic analysis and apply clustering or evolutionary algorithms over these dependencies to create module partitions that have desired properties (e.g., high cohesion and low coupling). Static approaches [10,11,13,15,28,31,38,45,51] suffer imprecision in computing dependencies that is inherent to static analysis. In Java Enterprise Edition (JEE) applications, which are the focus of our work, these techniques face challenges in dealing with dynamic language features, such as reflection, dynamic class loading, context, and dependency injections.…”