Article Preview
TopIntroduction
Application software keeps on evolving and changing rapidly to cope with technological advances in software and technology industry. The more modifications software engineers apply to a software system during development, the more complicated the system is likely to become, which will affect the complexity of the design and potentially increasing the maintenance effort. Software developers should be aware that the reliability and worth of the software depend on the quality of the modernization and how quickly the new developments are adopted. As a result, the software maintenance phase has the highest cost, which is estimated to have twice the original development cost in the lifetime of application software, compared to other software development life cycle (SDLC) phases (Al-Badareen et al., 2010). Software maintenance is the process of fine-tuning existing software by restructuring it due to bug fixes or adding new features. Whenever there is a need to make any changes to existing software, many modules of the software may be affected by that change, and this can lead to massive changes in the modules that are affected by that change. As a consequence, performing any changes in a software version is a challenging task that needs an extensive number of resources in terms of time, financial capital, and human resources including developers.
Change-proneness is the process of identifying classes that are more likely to change after the new release of software. Predicting class change proneness helps developers to concentrate on preventive actions such as testing, peer reviews, and inspections, which allows them to be more efficient in utilizing the available resources to produce more-improved software with lower maintenance costs and higher quality. The developers will be more adept at finding fixable classes and altering classes that are predicted to be more prone to change. Also, change proneness has been widely used as a means of estimating maintenance effort; thus, allocating resources will be more effective and better planed, avoiding time loss, extra efforts, and additional labor (Eski & Buzluca, 2011). Moreover, detecting change-prone classes can help developers to make better software design decisions by reducing the links between classes and detecting classes that have a greater impact on other classes, aiming to reduce the complexity of the software design, resulting in an effective model with fewer change-prone classes and, consequently, better maintenance (A. R. Han et al., 2010).
This study aimed to examine the relationship between Object-Oriented (OO) metrics and the change proneness of software classes. Also, a second aim is to analyze the performance of several Machine Learning (ML) techniques for software change prediction, these are; OneR, Bayesian Network, Naïve Bayes, Multilayer Perceptron, Bagging, AdaBoost, Logit Boost, IBK, J48, and Random Forest. The novelty of this research lies in presenting heterogeneous combining methods that combine different ML techniques for the prediction of class change proneness. Therefore, we evaluated different combining methods by grouping classifiers with voting, Select-Best, and stacking scheme, as another approach to find whether we can get more accurate results to predict change-prone classes. The study is carried out on a large dataset from a commercial software system containing the values of eight static OO metrics. The performances of the ML techniques were compared, and the results were evaluated using different measures such as precision, recall, f-measure, receiver operating characteristic (ROC) curve, and accuracy.