Codifying Hidden Dependencies in Legacy J2EE Applications

J2EE applications tend to be multi-tier and multi-language applications. They rely on the J2EE platform and containers that offer infrastructure and architectural services to ensure distributed, secure, safe, and scalable executions. These mechanisms hide many program dependencies, which helps development but hinders maintenance, evolution, and re-engineering of J2EE applications. In this paper, we study (i) the J2EE specifications to extract a declarative specification of the dependencies that are inherent in the services offered and that are not visible in the user code that uses them. Then, we introduce (ii) a codification of the dependencies into rules, and (iii) a tool that supports the specification of those dependencies and their detection in J2EE applications. We validate our approach and tool on a sample of 10 J2EE applications. We also compare our tool against JRipples, a state-of-the-art tool for change-impact analysis tasks. Results show that our tool adds, on average, 15% more call dependencies, which would have been missed otherwise. On change impact analysis tasks, our tool outperforms JRipples in all 10 applications, especially for the early iterations of change propagation exploration.

[1]  Jurriaan Hage,et al.  Migrating a large scale legacy application to SOA: Challenges and lessons learned , 2013, 2013 20th Working Conference on Reverse Engineering (WCRE).

[2]  Cesare Pautasso,et al.  Restful web services vs. "big"' web services: making the right architectural decision , 2008, WWW.

[3]  Paolina Centonze,et al.  Static analysis of role-based access control in J2EE applications , 2004, SOEN.

[4]  Yann-Gaël Guéhéneuc,et al.  Analyzing Program Dependencies in Java EE Applications , 2017, 2017 IEEE/ACM 14th International Conference on Mining Software Repositories (MSR).

[5]  Duc Anh Nguyen,et al.  JCIA: A Tool for Change Impact Analysis of Java EE Applications , 2018 .

[6]  Hafedh Mili,et al.  Reconstructing Architectural Views from Legacy Systems , 2012, 2012 19th Working Conference on Reverse Engineering.

[7]  Harald C. Gall,et al.  A Tool for Visual Understanding of Source Code Dependencies , 2008, 2008 16th IEEE International Conference on Program Comprehension.

[8]  Karl J. Ottenstein,et al.  The program dependence graph in a software development environment , 1984, SDE 1.

[9]  Paolo Tonella,et al.  Construction of the system dependence graph for Web application slicing , 2002, Proceedings. Second IEEE International Workshop on Source Code Analysis and Manipulation.

[10]  Fernando Macías,et al.  Generating a REST Service Layer from a Legacy System , 2013, ISD.

[11]  Philippe Preux,et al.  A large-scale study of call graph-based impact prediction using mutation testing , 2016, Software Quality Journal.

[12]  Christian Kirkegaard,et al.  Static Analysis for Java Servlets and JSP , 2006 .

[13]  Jordi Cabot,et al.  MoDisco: A model driven reverse engineering framework , 2014, Inf. Softw. Technol..

[14]  Rubby Casallas,et al.  Towards the understanding and evolution of monolithic applications as microservices , 2016, 2016 XLII Latin American Computing Conference (CLEI).

[15]  Kenny Wong,et al.  Extracting and representing cross-language dependencies in diverse software systems , 2005, 12th Working Conference on Reverse Engineering (WCRE'05).

[16]  Václav Rajlich,et al.  JRipples: a tool for program comprehension during incremental change , 2005, 13th International Workshop on Program Comprehension (IWPC'05).

[17]  Panagiotis K. Linos,et al.  A tool for understanding multi-language program dependencies , 2003, 11th IEEE International Workshop on Program Comprehension, 2003..

[18]  Leon Moonen,et al.  Crossing the boundaries while analyzing heterogeneous component-based software systems , 2011, 2011 27th IEEE International Conference on Software Maintenance (ICSM).

[19]  Oscar Nierstrasz,et al.  Recovery and analysis of transaction scope from scattered information in Java Enterprise Applications , 2010, 2010 IEEE International Conference on Software Maintenance.

[20]  Fabrizio Perin Reverse Engineering Heterogeneous Applications , 2012 .

[21]  Nouredine Melab,et al.  Analysis and manipulation of distributed multi-language software code , 2001, Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation.

[22]  Jeffrey S. Foster,et al.  Polymorphic Type Inference for the JNI , 2006, ESOP.

[23]  Hareton K. N. Leung,et al.  WAVE-CIA: a novel CIA approach based on call graph mining , 2013, SAC '13.

[24]  Giuseppe A. Di Lucca,et al.  WARE: a tool for the reverse engineering of Web applications , 2002, Proceedings of the Sixth European Conference on Software Maintenance and Reengineering.