Table of Contents

A description of the goals behind this software clustering algorithm. Examples of such goals include:

- To decompose a software system into subsystems
- To recover the architecture of a software system
- To discover possible ways to restructure the software

Explicitly stating algorithm intent can simplify selecting a software clustering algorithm for reverse engineers, as well as understanding a clustering algorithm for software clustering researchers.

A description of the input that the software clustering algorithm expects (an algorithm's input is often called a factbase since it contains facts extracted from the software system). For example, software clustering algorithms often expect that the factbase includes only dependencies between modules.

A description of the ideal output of the software clustering algorithm. Based on experience or heuristics, the designer of the algorithm decides what a meaningful decomposition of a software system should look like. For example, a software decomposition with maximum cohesion and minimum coupling.

A brief description of the main idea behind the algorithm's implementation. For example: “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”.

A description of the properties of the decompositions that the software clustering algorithm creates. These properties are either a direct result of the clustering objective (e.g. Bunch creates decompositions whose value of the objective function is higher than that for other algorithms) or an artifact of the algorithm's implementation (e.g. Bunch creates decompositions that are more balanced than most algorithms).

Since software clustering algorithms are heuristic algorithms, their performance may depend on the type of software system being clustered. Such dependencies need to be documented here. For example, Bunch may not be well-suited for event-driven systems.

A description of ideas that did not work very well while developing the algorithm. This information is often omitted in publications but could be invaluable to the software clustering researcher.

The nuts and bolts of the algorithm's implementation are presented here. This will often be the only section of significant length in an algorithm description.

Last modified:

2009/05/08 13:36

2009/05/08 13:36