Refactoring is often needed to ensure that software systems meet their performance requirements in deployments with different operational profiles, or when these operational profiles are not fully known or change over time. This is a complex activity in which software engineers have to choose from numerous combinations of refactoring actions. Our paper introduces a novel approach that uses performance antipatterns and stochastic modelling to support this activity. The new approach computes the performance antipatterns present across the operational profile space of a software system under development, enabling engineers to identify operational profiles likely to be problematic for the analysed design, and supporting the selection of refactoring actions when performance requirements are violated for an operational profile region of interest. We demonstrate the application of our approach for a software system comprising a combination of internal (i.e., in-house) components and external third-party services.
This work has been partially supported by the PRIN project “SEDUCE” n. 2017TWRCNB and by Microsoft Research through its PhD Scholarship Programme.
Aldeida Aleti, Barbora Buhnova, Lars Grunske, Anne Koziolek, and Indika Meedeniya. Software architecture optimization methods: A systematic literature review. IEEE Transactions on Software Engineering, 39(5):658–683, 2012
Aldeida Aleti, Catia Trubiani, André van Hoorn, and Pooyan Jamshidi. An efficient method for uncertainty propagation in robust software performance estimation. Journal of Systems and Software, 138:222–235, 2018.
Vahid Alizadeh and Marouane Kessentini. Reducing interactive refactoring effort via clustering-based multi-objective search. In ASE’18, pages 464–474, 2018.
Davide Arcelli, Vittorio Cortellessa, and Catia Trubiani. Antipattern-based model refactoring for software performance improvement. In QoSA’12, pages 33–42, 2012.
Gabriele Bavota, Andrea De Lucia, Massimiliano Di Penta, Rocco Oliveto, and Fabio Palomba. An experimental investigation on the innate relationship between quality and refactoring. Journal of Systems and Software, 107:1–14, 2015.
Simona Bernardi, José Merseguer, and Dorina C. Petriu. Dependability modeling and analysis of software systems specified with UML. ACM Comput. Surv., 45(1):2:1–2:48, 2012.
Gunter Bolch, Stefan Greiner, Hermann De Meer, and Kishor S Trivedi. Queueing networks and Markov chains: modeling and performance evaluation with computer science applications. John Wiley & Sons, 2006.
William H Brown, Raphael C Malveau, Hays W McCormick, and Thomas J Mowbray. AntiPatterns: refactoring software, architectures, and projects in crisis. John Wiley & Sons, 1998.
Axel Busch, Dominik Fuchss, and Anne Koziolek. Peropteryx: Automated improvement of software architectures. In ICSA-C’19, pages 162–165, 2019.
Radu Calinescu, Carlo Ghezzi, Marta Z. Kwiatkowska, and Raffaela Mirandola. Self-adaptive software needs quantitative verification at runtime. Commun. ACM, 55(9):69–77, 2012.
Radu Calinescu, Milan Ceska Jr., Simos Gerasimou, Marta Kwiatkowska, and Nicola Paoletti. Efficient synthesis of robust models for stochastic systems. Journal of Systems and Software, 143:140–158, 2018.
Radu Calinescu and Shinji Kikuchi. Formal methods @ runtime. In Monterey Workshop, pages 122–135. Springer, 2010.
Radu Calinescu and Marta Kwiatkowska. CADS*: Computer-aided development of self-* systems. In FASE’09, pages 421–424. Springer, 2009.
Radu Calinescu, Danny Weyns, Simos Gerasimou, Muhammad Usman Iftikhar, Ibrahim Habli, and Tim Kelly. Engineering trustworthy self-adaptive software with dynamic assurance cases. IEEE Transactions on Software Engineering, 44(11), 1039–1069, 2018.
Xi Chen, Zibin Zheng, Qi Yu, and Michael R. Lyu. Web service recommendation via exploiting location and qos information. IEEE Trans. Parallel Distrib. Syst., 25(7):1913–1924, 2014.
Vittorio Cortellessa, Antinisca Di Marco, and Paola Inverardi. Model-Based Software Performance Analysis. Springer, 2011.
Vittorio Cortellessa, Antinisca Di Marco, and Catia Trubiani. An approach for modeling and detecting software performance antipatterns based on first-order logics. Software and Systems Modeling, 13(1):391–432, 2014.
Christian Dehnert, Sebastian Junges, Joost-Pieter Katoen, and Matthias Volk. A storm is coming: A modern probabilistic model checker. In Computer Aided Verification, pages 592–600. Springer International Publishing, 2017.
Michalis Famelis and Marsha Chechik. Managing design-time uncertainty. Software and Systems Modeling, 18(2):1249–1284, 2019.
Simos Gerasimou, Radu Calinescu, and Giordano Tamburrelli. Synthesis of probabilistic models for quality-of-service software engineering. Autom. Softw. Eng., 25(4):785–831, 2018.
Shadi Ghaith, Miao Wang, Philip Perry, Zhen Ming Jiang, Patrick O’Sullivan, and John Murphy. Anomaly detection in performance regression testing by transaction profile estimation. Softw. Test., Verif. Reliab., 26(1):4–39, 2016.
Sunil Kamavaram and Katerina Goseva-Popstojanova. Sensitivity of software usage to changes in the operational profile. In Annual Workshop of NASA Goddard Software Engineering, pages 157–164, 2003.
Arijit Khan, Xifeng Yan, Shu Tao, and Nikos Anerousis. Workload characterization and prediction in the cloud: A multiple time series approach. In NOMS’12, pages 1287–1294, 2012.
M. Kwiatkowska, G. Norman, and D. Parker. PRISM 4.0: Verification of probabilistic real-time systems. In CAV’11, volume 6806 of LNCS, pages 585–591, 2011.
Adrian Nistor, Po-Chun Chang, Cosmin Radoi, and Shan Lu. Caramel: Detecting and fixing performance problems that have non-intrusive fixes. In ICSE’15, pages 902–912, 2015.
Ali Ouni, Marouane Kessentini, Mel Ó Cinnéide, Houari A. Sahraoui, Kalyanmoy Deb, and Katsuro Inoue. MORE: A multi-objective refactoring recommendation approach to introducing design patterns and fixing code smells. Journal of Software: Evolution and Process, 29(5), 2017.
Süleyman Özekici and Refik Soyer. Reliability of software with an operational profile. European Journal of Operational Research, 149(2):459–474, 2003.
Sebastian Ruland, Géza Kulcsár, Erhan Leblebici, Sven Peldszus, and Malte Lochau. Controlling the attack surface of object-oriented refactorings. In FASE’18, pages 38–55, 2018.
Martina De Sanctis, Catia Trubiani, Vittorio Cortellessa, Antinisca Di Marco, and Mirko Flamminj. A model-driven approach to catch performance antipatterns in ADL specifications. Information & Software Technology, 83:35–54, 2017.
Carol Smidts, Chetan Mutha, Manuel Rodríguez, and Matthew J Gerber. Software testing with an operational profile: Op definition. ACM Computing Surveys (CSUR), 46(3):39, 2014.
Connie U. Smith and Lloyd G. Williams. Software performance antipatterns for identifying and correcting performance problems. In CMG’12, 2012.
Mirco Tribastone, Stephen Gilmore, and Jane Hillston. Scalable differential analysis of process algebra models. IEEE Trans. Software Eng., 38(1):205–219, 2012.
Kishor S. Trivedi and Andrea Bobbio. Reliability and Availability Engineering - Modeling, Analysis,and Applications. Cambridge University Press, 2017.
Alexander Wert, Jens Happe, and Lucia Happe. Supporting swift reaction: automatically uncovering performance problems by systematic experiments. In ICSE’13, pages 552–561, 2013.
Xiao Yu, Shi Han, Dongmei Zhang, and Tao Xie. Comprehending performance from real-world execution traces: Adevice-driver case. In ACM SIGPLAN Notices, volume 49, pages 193–206, 2014.
Editors and Affiliations
© 2020 The Author(s)
About this paper
Cite this paper
Calinescu, R., Cortellessa, V., Stefanakos, I., Trubiani, C. (2020). Analysis and Refactoring of Software Systems Using Performance Antipattern Profiles. In: Wehrheim, H., Cabot, J. (eds) Fundamental Approaches to Software Engineering. FASE 2020. Lecture Notes in Computer Science(), vol 12076. Springer, Cham. https://doi.org/10.1007/978-3-030-45234-6_18
Publisher Name: Springer, Cham
Print ISBN: 978-3-030-45233-9
Online ISBN: 978-3-030-45234-6