Date Added: Jun 2011
Many design guidelines state that a software system architecture should avoid cycles between its packages. Yet such cycles appear again and again in many programs. The authors believe that the existing approaches for cycle detection are too coarse to assist the developers to remove cycles from their programs. In this paper, they describe an efficient algorithm that performs a fine-grained analysis of the cycles among the packages of an application. In addition, they define a metric to rank cycles by their level of undesirability, prioritizing the cycles that seems the more undesired by the developers. Their approach is validated on two large and mature software systems in Java and Smalltalk.