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.