1 Introduction
Object-oriented (OO) software systems are typically composed of software elements at different levels of granularity (methods/fields, classes
In this comment, if not mentioned, the term “class” designates both class and interface from here on.
/interfaces, packages, etc.) and the dependency relations between them (method call relation, inheritance relation, interface implementation relation, etc.). Software elements and their dependency relations essentially define the topological structure of a software system [1], which has a significant impact on the performance, reliability, and overall quality of the software system. Over the past decade, researchers applied theories and techniques in the field of complex networks to explore the static software structure [2], [3] and its evolution [4] by representing the software structure as networks (usually called software networks) where software elements are nodes and their dependency relations are edges. For example, many researchers proposed (or introduced) network metrics derived from software networks to characterize software structure [5], [6], [7], and further used them to predict bugs [8], [9], [10], [11]. Network metrics have been proven to be very effective in predicting software bugs [8], [11].