Software change impact analysis (or impact analysis) plays a crucial role in software maintenance and evolution. Impact analysis aims at identifying the possible effects of a source code modification. It is often used to evaluate the effects of a change after its implementation. However, more proactive approaches use impact analysis to predict the effects of a change before it is implemented. In this way, impact analysis provides useful information that can be used, among others, to guide the implementation of the change and to support regression tests selection. This paper aims at proposing a change impact analysis model for Java programs. The model was designed to support predictive impact analysis. It includes several impact rules based on the Java language constructs. We performed an empirical evaluation of the model using several Java programs. In order to assess the model prediction quality, we used two measures (precision and recall). The reported results show that the model is able to achieve high accuracy.Key words: Software maintenance, software evolution, change, ripple effect, impact analysis, predictive analysis, model, impact rules, and empirical analysis.
IntroductionAs software systems are used for a long period of time, software evolution is inevitable. Indeed, software systems need to continually evolve for various reasons including: adding new features to satisfy user requirements, changing business needs, introducing novel technologies, correcting faults, improving quality, and so forth. So, as software evolves, the changes made to the software must be carefully managed. It is particularly important to ensure that modified software still verifies its specification and whether new errors were introduced inadvertently [1]- [3]. It is, therefore, crucial to find where changes occur and to identify parts of the software that are possibly affected by the changes, parts that must be correctly retested. Indeed, for obvious reasons, retesting all the software after instantiating a change is inefficient, costly, and unacceptable in practice [4].Software evolution faces many challenges [5]- [8]. Software maintenance is, in this context, a vital activity [9]. It is, however, costly [10], [11]. Several experts agree that two of the most important activities of software maintenance are: understanding the software and evaluating the potential effects of a change [12]-[16]. The second activity is closely related to the first one. Indeed, to understand the effects of a given change, it is necessary to understand the system beforehand [17]. The software design, particularly the dependencies between its components, can make this task difficult. A change to a system, however minor, can lead to several unintended effects (ripple-effect). One effective way to deal with this important issue is to develop models (and techniques) that can be used to support the evaluation of the potential effects of a change. This can be used to Software change impact analysis (or impact analysis) plays a crucial role in s...