Assessing Dependency Structure Based on Design Theory and Principles

Two of the most well-known design principles are: (1) the package structure of a software system should be hierarchical; and (2) there should not be any cyclic dependencies among files. Using DV8, a user can detect the violation of these principles easily. 

(1) Whether packages form a hierarchical structure:  In a Design Structure Matrix (DSM), the hierarchical structure should form a lower triangle form, as shown below. This DSM depicts the package structure of Apache Flume, clustered using the "Tree->Cluster as Namespace" menu in DV8. In this DSM, the numbers in the cells and their coloring represent the number of dependencies between the packages. The darker the red, the more dependencies among packages.  

If the package structure cannot be represented as a lower-triangle shape, it means that there are cycles among packages. The user can detect where and how packages form cycles using DV8's Design Anti-patterns detection function. The Package Cycle anti-pattern folder will provide a detailed report on which files make the packages depend on each other. 

(2) Whether files form cycles. DV8's Design Anti-patterns detection function can also report files that form a strongly connected graph, a Clique, that prevents files from forming a strictly hierarchical structure. The Clique anti-patterns reported by DV8 cover both direct and indirect cycles among files. 

In addition to detecting cycles among packages and files, which are widely accepted as anti-patterns, using DV8 a user can also assess design structures against design theories and principles as follows: