2015 IEEE 26th International Symposium on Software Reliability Engineering (ISSRE) (2015)
Gaithersbury, MD, USA
Nov. 2, 2015 to Nov. 5, 2015
Gustavo Ansaldi Oliva , Department of Computer Science, University of São Paulo (USP) São Paulo, Brazil
Marco Aurelio Gerosa , Department of Computer Science, University of São Paulo (USP) São Paulo, Brazil
Real world object-oriented systems are composed of hundreds or even thousands of classes that are structurally interconnected in many different ways. In this highly complex scenario, it is unclear how changes propagate. Given the high maintenance cost brought by change propagation, these questions become particularly relevant in practice. In this paper, we set out to investigate the influence of structural dependencies on change propagation. We historically analyzed thousands of code snapshots coming from 4 open-source Java projects of different sizes and domains. Our results indicated that, in general, it is more likely that two artifacts will not co-change just because one depends on the other. However, the rate with which an artifact co-changes with another is higher when the former structurally depends on the latter. This rate becomes higher if we track down dependencies to the low-level entities that are changed in commits. This implies, for instance, that developers should be aware of dependencies on methods that are added or changed, as these dependencies tend to propagate changes more often. Finally, we also found several cases where software changes could not be justified using structural dependencies, meaning that co-changes might be induced by other subtler kinds of relationships.
software maintenance, change propagation, structural dependencies, dependency analysis, mining software repositories, software analysis
G. A. Oliva and M. A. Gerosa, "Experience report: How do structural dependencies influence change propagation? An empirical study," 2015 IEEE 26th International Symposium on Software Reliability Engineering (ISSRE), Gaithersbury, MD, USA, 2015, pp. 250-260.