# 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.