Key Research Findings:
Bugs in Software Architectural Cycles
In software, an architectural cycle is when a component's calls to other components loop back to itself.
Cyclicality really hurts software quality!
Components involved in cycles have more bugs than non-cycle components.
The larger the cycle, the more bugs associated with each of its component.
The implications of cyclicality are at least as important as those of modularity.
The more central a component in a cycle, the more bugs it tends to have.
Centrality is the number of paths that link a component in a cycle back to itself.
Central components have to incorporate more potential changes propagated via their high connectivity.
Failing to encapsulate cycles within a module hurts quality even more.
Multi-module cycles are common.
The average number of bugs exhibited by an in-cycle component increases with the number of modules involved in the cycle.
Developers seem to neglect the negative consequences of dealing with cyclical dependencies across modules, or are not aware of such cycles.
Key Publications: P26, P24, C17, O28
Hierarchical DSM of Java classes and function call dependencies in Apache Ant version 1.1
Shows developers’ module structure
Note the one cycle (of five components) in the second module