An empirical study on the interplay between semantic coupling and co-change of software classes
Coupling and co-evolution are at the core of software engineering. Coupling measures the structural dependencies at the source code level, induced via the system architecture, while co-evolution is a measure of the logical dependencies, that is, the degree to which two or more components were co-changed.
Correlation studies have been proposed in the past, and results indicate that indeed there is a link between coupling and co-change. An open question seems to be related to the strength of the coupling between two entities: if A and B are linked by a stronger coupling link, will they need to co-change more in the future?
Our contribution to this question is an empirical study with 10 Java projects, 4,000 revisions and some 20,000 coupled pairs of classes: for each coupled pair, we extracted (i) the coupling strength, per revision, and (ii) the number of co-changes that the pair underwent. Our objective is to statistically ascertain whether different co-change patterns are related to the strength of the coupling link between pairs of classes. Using four mutually exclusive co-change clusters, our results show that, for a pair of coupled classes, the behaviour of the co-change depends on the strength of their coupling link.