Service Candidate Identification from Monolithic Systems Based on Execution Traces

Monolithic systems increasingly suffer from maintainability and scalability issues as they grow in functionality, size, and complexity. It is widely believed that (micro)service-based architectures can alleviate these problems as each service is supposed to have the following characteristics: clearly defined functionality, sufficient modularity, and the ability to evolve independently. Industrial practices show that service extraction from a legacy monolithic system is labor-intensive and complex. Existing work on service candidate identification aims to group entities of a monolithic system into potential service candidates, but this process has two major challenges: first, it is difficult to extract service candidates with consistent quality; second, it is hard to evaluate the identified service candidates regarding the above three characteristics. To address these challenges, this paper proposes the Functionality-oriented Service Candidate Identification (FoSCI) framework to identify service candidates from a monolithic system. Our approach is to record the monolith's execution traces, and extract services candidates using a search-based functional atom grouping algorithm. We also contribute a comprehensive service candidate evaluation suite that uses interface information, structural/conceptual dependency, and commit history. This evaluation system consists of 8 metrics, measuring functionality, modularity, and evolvability respectively of identified service candidates. We compare FoSCI with three existing methods, using 6 widely-used open-source projects as our evaluation subjects. Our results show that FoSCI outperforms existing methods in most measures.

[1]  René Santaolaya Salgado,et al.  The Conceptual Coupling Metrics for Object-Oriented Systems , 2006, 2006 22nd IEEE International Conference on Software Maintenance.

[2]  Eli Tilevich,et al.  Cloud-Based Execution to Improve Mobile Application Energy Efficiency , 2014, Computer.

[3]  Gabriele Bavota,et al.  Improving software modularization via automated analysis of latent topics and dependencies , 2014, TSEM.

[4]  Patricia Lago,et al.  Research on Architecting Microservices: Trends, Focus, and Potential for Industrial Adoption , 2017, 2017 IEEE International Conference on Software Architecture (ICSA).

[5]  Ricardo Terra,et al.  Towards a Technique for Extracting Microservices from Monolithic Enterprise Systems , 2016, ArXiv.

[6]  Gabriele Bavota,et al.  Using Cohesion and Coupling for Software Remodularization , 2016, ACM Trans. Softw. Eng. Methodol..

[7]  Kalyanmoy Deb,et al.  A fast and elitist multiobjective genetic algorithm: NSGA-II , 2002, IEEE Trans. Evol. Comput..

[8]  Gabriele Bavota,et al.  Using structural and semantic measures to improve software modularization , 2012, Empirical Software Engineering.

[9]  Stefan Wagner,et al.  Automatically measuring the maintainability of service- and microservice-based systems: a literature review , 2017, IWSM-Mensura.

[10]  Wilhelm Hasselbring,et al.  Using Microservices for Legacy Software Modernization , 2018, IEEE Software.

[11]  Kamran Sartipi,et al.  Dynamic Analysis of Software Systems using Execution Pattern Mining , 2006, 14th IEEE International Conference on Program Comprehension (ICPC'06).

[12]  Kalyanmoy Deb,et al.  Finding Knees in Multi-objective Optimization , 2004, PPSN.

[13]  Wilhelm Hasselbring,et al.  Kieker: a framework for application performance monitoring and dynamic software analysis , 2012, ICPE '12.

[14]  Salah Sadou,et al.  From Object-Oriented Applications to Component-Oriented Applications via Component-Oriented Architecture , 2011, 2011 Ninth Working IEEE/IFIP Conference on Software Architecture.

[15]  Olaf Zimmermann,et al.  Service Cutter: A Systematic Approach to Service Decomposition , 2016, ESOCC.

[16]  Arie van Deursen,et al.  A Systematic Survey of Program Comprehension through Dynamic Analysis , 2008, IEEE Transactions on Software Engineering.

[17]  Philippe Kruchten,et al.  The 4+1 View Model of Architecture , 1995, IEEE Softw..

[18]  Sam Newman,et al.  Building microservices - designing fine-grained systems, 1st Edition , 2015 .

[19]  Jürgen Cito,et al.  Extraction of Microservices from Monolithic Software Architectures , 2017, 2017 IEEE International Conference on Web Services (ICWS).

[20]  Martin Fowler,et al.  Patterns of Enterprise Application Architecture , 2002 .

[21]  J. Rubin,et al.  Semantic Slicing of Software Version Histories , 2018, IEEE Transactions on Software Engineering.

[22]  Rudolf Ferenc,et al.  Using the Conceptual Cohesion of Classes for Fault Prediction in Object-Oriented Systems , 2008, IEEE Transactions on Software Engineering.

[23]  Nenad Medvidovic,et al.  A comparative analysis of software architecture recovery techniques , 2013, 2013 28th IEEE/ACM International Conference on Automated Software Engineering (ASE).

[24]  Xin Yao,et al.  Software Module Clustering as a Multi-Objective Search Problem , 2011, IEEE Transactions on Software Engineering.

[25]  Richard C. Holt,et al.  ACCD: an algorithm for comprehension-driven clustering , 2000, Proceedings Seventh Working Conference on Reverse Engineering.

[26]  Emden R. Gansner,et al.  Using automatic clustering to produce high-level system organizations of source code , 1998, Proceedings. 6th International Workshop on Program Comprehension. IWPC'98 (Cat. No.98TB100242).

[27]  Nour Ali,et al.  A Systematic Mapping Study in Microservice Architecture , 2016, 2016 IEEE 9th International Conference on Service-Oriented Computing and Applications (SOCA).

[28]  Luigi Lo Iacono,et al.  Guidelines for adopting frontend architectures and patterns in microservices-based systems , 2017, ESEC/SIGSOFT FSE.

[29]  Jonathan I. Maletic,et al.  Journal of Software Maintenance and Evolution: Research and Practice Survey a Survey and Taxonomy of Approaches for Mining Software Repositories in the Context of Software Evolution , 2022 .

[30]  Abdelwahab Hamou-Lhadj,et al.  Software Clustering Using Dynamic Analysis and Static Dependencies , 2009, 2009 13th European Conference on Software Maintenance and Reengineering.

[31]  Ying Zhang,et al.  Refactoring android Java code for on-demand computation offloading , 2012, OOPSLA '12.

[32]  Emden R. Gansner,et al.  Bunch: a clustering tool for the recovery and maintenance of software system structures , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[33]  Shanshan Li,et al.  From Monolith to Microservices: A Dataflow-Driven Approach , 2017, 2017 24th Asia-Pacific Software Engineering Conference (APSEC).

[34]  Ivica Crnkovic,et al.  A systematic review of software architecture evolution research , 2012, Inf. Softw. Technol..

[35]  Eli Tilevich,et al.  Cloud refactoring: automated transitioning to cloud-based services , 2013, Automated Software Engineering.

[36]  Mike Amundsen,et al.  Microservice Architecture: Aligning Principles, Practices, and Culture , 2016 .

[37]  Qinghua Zheng,et al.  Functionality-Oriented Microservice Extraction Based on Execution Trace Clustering , 2018, 2018 IEEE International Conference on Web Services (ICWS).

[38]  Abdelwahab Hamou-Lhadj,et al.  Summarizing the Content of Large Traces to Facilitate the Understanding of the Behaviour of a Software System , 2006, 14th IEEE International Conference on Program Comprehension (ICPC'06).

[39]  Nenad Medvidovic,et al.  Enhancing architectural recovery using concerns , 2011, 2011 26th IEEE/ACM International Conference on Automated Software Engineering (ASE 2011).

[40]  Fabrizio Montesi,et al.  Microservices: Yesterday, Today, and Tomorrow , 2017, Present and Ulterior Software Engineering.

[41]  Sajal K. Das,et al.  WCA: A Weighted Clustering Algorithm for Mobile Ad Hoc Networks , 2002, Cluster Computing.

[42]  Derek Rayside,et al.  Measuring the Impact of Code Dependencies on Software Architecture Recovery Techniques , 2018, IEEE Transactions on Software Engineering.

[43]  Bogdan Dit,et al.  Feature location in source code: a taxonomy and survey , 2013, J. Softw. Evol. Process..

[44]  D. L. Parnas,et al.  On the criteria to be used in decomposing systems into modules , 1972, Software Pioneers.

[45]  Ali Mesbah,et al.  Inferring Hierarchical Motifs from Execution Traces , 2018, 2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE).

[46]  Valérie Issarny,et al.  Cohesion-Driven Decomposition of Service Interfaces without Access to Source Code , 2015, IEEE Transactions on Services Computing.

[47]  Houari A. Sahraoui,et al.  Identifying Components from Object-Oriented APIs Based on Dynamic Analysis , 2018, ArXiv.

[48]  Periklis Andritsos,et al.  Information-theoretic software clustering , 2005, IEEE Transactions on Software Engineering.