Tightly coupled and interdependent systems inhibit productivity by requiring
developers to carefully coordinate their changes, even when modifying
subsystems that should be independent of one another. Poor architectural
decisions frequently lead to the presence of large, change-prone source files
that are at the center of complexes of technical debt. This kind of technical
debt quickly incurs interest both through coordination costs and
error-proneness. In this paper, we present a new approach for decomposing these
``large-active'' files to pay down critical technical debt. We package our
approach as a refactoring recommendation system. Each recommendation is
determined by analyzing patterns of co-change and mutual dependency among
files. Each recommendation corresponds to a responsibility the large-active
file has in relation to the rest of the system. By moving recommended
functionality from the large-active file into smaller files, developers can
reduce the impact of a debt-laden file and clarify its essential
responsibilities. A key advantage of this approach over prior work is that we
better focus effort; we avoid spending developer effort refactoring code that
is only superficially problematic. We achieve this by incorporating revision
history into both determining and ranking recommendations. Each recommendation
corresponds to some change-prone responsibility. We present some examples of
this approach in action and outline our future plans.
Metrics
14 Record Views
Details
Title
Towards the Assisted Decomposition of Large-Active Files