Developed by Vassilios Tzerpos.
ACDC produces flat or nested decompositions of a software system. The algorithm assigns meaningful names to the clusters it creates.
The factbase includes only dependencies between entities.
The produced decomposition has the following properties:
ACDC creates clusters by detecting established subsystem patterns in the given software system. Software entities that are not clustered this way are assigned to the subsystem that depends the most on them.
The algorithm is not suitable for systems with less than 100 source files.
ACDC produces a software decomposition from a software system into stages:
The Skeleton construction phase creates a skeleton of the final decomposition by identifying subsystems using a pattern-driven approach. Depending on the pattern used, the subsystems are given names. In the second stage, the algorithm completes the decomposition by using the Orphan Adoption algorithm.
The skeleton construction phase has seven steps:
All apply pattern steps are straight forward grouping entities according to the pattern rule. The other steps are described below.
Algorithm creates a list of all modules in the systems. The list is sorted in order of ascending out-degree, i.e. the first element in the list is the one with smallest number of outgoing edges.
ACDC removes from the potential dominator list, all modules that have an in- or out-degree larger than 20. These nodes are placed in two listed:
The ACDC goes through each module n in the potential dominator list and examines whether n is dominator node of a subsystem, according to the sub-graph dominator pattern.
When dominator node is found then ACDC creates a subsystem containing the dominator node and dominator set. Nodes in the dominator set are removed from the potential dominator list, unless the cardinality of the dominated set was larger than 20.
After all modules from the potential dominator list have been examined, ACDC organizes the obtained subsystems, so that the containment hierarchy is a tree.
In the previous phase, the skeleton of a software decomposition was constructed. Some modules are left unassigned from the first phase. In this phase, the algorithm assigns all non-clustered modules to an already created subsystem, in particular the subsystem that depends the most on the unassigned module.
The official implementation of ACDC can be downloaded here.