"Verify the to-be architecture against the reality of the code"
Overview: What is the Dependometer?
Dependometer performs a static analysis of physical dependencies within a software system. Dependometer validates dependencies against the logical architecture structuring the system into classes, packages, subsystems, vertical slices and layers and detects cycles between these structural elements. Furthermore, it calculates a number of quality metrics on the different abstraction layers and reports any violations against the configured thresholds.
Currently, Dependometer is available for projects written in Java, C++ or C#.
Motivation for Architecture Validation
„It is the dependency architecture that is degrading, and with it the ability of the software to be maintained" Robert C. Martin 2000
„Cyclic physical dependencies in large, low-level subsystems have the greatest capacity to increase the overall cost of maintaining a system" John Lacos 1996
Design is a quality criteria
„For software to be tested effectively, it must be designed from the start with that goal in mind - Testability, like quality itself, cannot be an afterthought: it must be considered from the start - before the first line of code is ever written" John Lacos 1996.
The main features are:
Use a logical architecture description in terms of layers and subsystems and their physical mapping (n Packages implement a Subsystem) and check logical architecture violations.
Analyze the dependency architecture between layers, subsystems, resulting vertical-slices, packages, compilation-units (java files) and types (classes and interfaces)
Analyze cycles between elements
Calculate a bunch of metrics for all elements - this includes metrics from John Lakos, Robert C. Martin and Craig Larman.
Define thresholds and receive feedback upon their violation
Simulate via simple refactoring definitions and cutting unwanted dependencies changes to the physical structure possibly enhancing refactoring.
Create a complete HTML presentation. This provides browsing capabilities from layer (logical element) to compilation-unit (physical element) for a discussion which physical elements cause the logical architecture to break.
Fast analysis of prohibited dependencies and cycles
Definition of logical architecture is time consuming and must be maintained during project lifetime (dependometer.properties.xml)
Dependencies are visualized on class level only. Concrete code lines must be analyzed manually. (Future improvement addressed by the planned Eclipse plugin!)
Thanks to Bernhard we have included a new kind of tangle view in Dependometer. A tangle is a largest set of entities in which each entitiy is (directly or indirectly) depending on each other, thus it is - in the simplest case - a single cycle, but can also include many, many cycles.
Following versions have increased due to this new feature in dependometer-core:
As another module within the Dependometer toolset, a first version of Dependometer for C# is now available for download.
This release is regarded an alpha version since not all C# language features are supported yet.
I would like to suggest to dump the Messplatz and integrate Dependometer into Sonar instead. Thus we can make use of Sonar's comprehensive infrastructure and avoid reinventing the wheel.
What do you think?