Design Anti-Patterns
DV8 can detect 6 types of design anti-patterns as defined in . (Note that, in these publications, they are also referred to as architecture issues.) These anti-patterns were defined based on Baldwin and Clark's design rule theory [1] and violation of prevailing design principles, such as the famous SOLID principle.
The following anti-patterns can be detected using structural information only:
- Clique: a group of related files, forming a strongly connected "component".
- Package Cycle: a group of packages that depend on each other in a cyclic relation.
- Improper Inheritance: an inheritance hierarchy that violates the Liskov Substitution Principle.
The following three anti-patterns can only be detected using both structural relation and co-change information:
- Unstable Interface: file(s) that have many dependents and frequently change with these dependents.
- Crossing: a file with both high fan-in and high fan-out and frequently changes with all of its relationships—the set of files that it depends on and the set of files that depend on it.
- Modularity Violation: a group of files that do not have structural relationships but frequently change together.
The rationale, description, and visualization of these anti-patterns are elaborated on in the following subsections.