Unstable Interface


Rationale: According to the design rule theory and design principles [1] , essential and influential abstractions (design rules) should be stable. Otherwise, their bugs and changes can be propagated to multiple files. We have observed that unstable or poorly-designed abstractions are often related to high-maintenance and deserve special attention. 

Description:  If a highly influential file (files with a large number of dependents) is changed frequently with other files, as shown in the revision history, we call it an Unstable Interface (UIF). 

Visualization: To visualize an instance of Unstable Interface using the DV8 GUI, click "Analysis-> Load Issue File" and select a ".dv8-issue" file.  For an Unstable Interface issue, DV8 will automatically arrange the files so that the interface files are placed at the top of the DSM, and the violations are highlighted.

Fig.: An example of Unstable Interface

x indicates structural dependencies, such as extend, depend, etc. 

The above figure depicts an instance of an Unstable Interface in the Cassandra project. An "x" in a cell indicates a structural dependency between the file on the row and the file on the column; a number represents the historical co-change frequency of these two files. We can see that multiple files structurally depend on StreamSession.java and that these files have changed together frequently with it, as evidenced by the project's revision history. 

To visualize an instance of Unstable Interface using the DV8 GUI, click "Analysis-> Load Issue File", and select a ".dv8-issue" file. For an Unstable Interface issue, DV8 will automatically arrange the files so that the interface file is placed at the top of the DSM, and the influenced files are highlighted.