Large software systems consist of many components some of which are more significant than others. A component is deemed significant if it plays an important role and can have a significant impact on the rest of the system when modified. Identifying such core components is important since change is inevitable as a normal course of evolution in any system and core components must be designed to minimize their impact of change. Several different graph-based strategies exist for ranking software components that can be used to identify the core components within a software system. However, each ranking strategy behaves differently and most fail to pick up all of the significant core components among their top tier of highly ranked components. In this paper, we propose a component ranking approach that models the component graph of a system as a Discrete-Time Markov Chain and uses it as a basis for component ranking. Using this approach produces results that are superior to ranking strategies based on centrality measures such as closeness, betweenness and eigenvector centrality. We demonstrate the utility of the metric and compare it against existing graph-based measures, in the analysis of Kona and JUnit, two published systems with documented architectures.
All Science Journal Classification (ASJC) codes