Managing the maintenance process and estimating accurately the effort and duration required for a new release is considered to be a crucial task as it affects successful software project survival and progress over time. In this study, we propose the combination of two well-known machine learning (ML) techniques, Bayesian networks (BNs), and association rules (ARs) for modeling the maintenance process by identifying the relationships among the internal and external quality metrics related to a particular project release to both the maintainability of the project and the maintenance process indicators (ie, effort and duration). We also exploit Bayesian inference, to test the effect of certain changes in internal and external project factors to the maintainability of a project. We evaluate our approach through a case study on 957 releases of five open source JavaScript applications. The results show that the maintainability of a release, the changes observed between subsequent releases, and the time required between two releases can be accurately predicted from size, complexity, and activity metrics. The proposed combined approach achieves higher accuracy when evaluated against the BN model accuracy.
KEYWORDSdevelopers' activity, JavaScript, maintainability, maintenance, software quality, source code quality 1 | INTRODUCTION Software quality involves many different activities throughout the operational lifecycle of an application all targeted to the delivery of software that meets the specified requirements and satisfies the evolving needs of end-users. Quality concerns are often intertwined with software maintenance that is closely related to technical debt. 1 Software maintenance is one of the most demanding activities during the software lifecycle, consuming up to 75% of the total project resources, 2 mainly due to the many constraints related to the interdependencies of the source code artifacts of the software under maintenance. According to the IEEE 1219 3 software standards document, software maintenance is defined as the "Modification of a software product after delivery to correct faults, to improve performance or other attributes, or to adapt the product to a modified environment." The maintainability is "the ease of performing maintenance activities," while maintenance effort is subsequently defined as the "effort required to reduce or eliminate maintenance problems." Despite the importance of software maintenance and its crucial effect on the quality of a software application over time, its management and assessment is still an immature discipline in software engineering research and practice. The main problem is that software maintainability (as a single synthesized factor) and maintenance process indicators (ie, effort and number of modifications) are most of the times addressed separately without being able to test the effect of the low level internal and external metrics to both maintainability and maintenance indicators at the same time.This gap can be alleviated by modeling the relationship among t...