Dependency Models and UML: Why you need both
Dependency models use inter-module dependencies to specify and represent software systems. They are lightweight and particularly useful for providing a precise big picture view of a software system. It is also easy to check the conformance of an implementation to a dependency model.
- Look down a column to see the dependencies for each system.
- Decomposition hierarchy enables massive scalability.
- Design rules allow precise specification of layering and componentization.
- Control exactly how 3rd party libraries are used.

Figure: Conceptual View of the Ant Utility
The conceptual view is derived from the dependency model. The conceptual view does not contain the precise information that is available in a DSM but is often effective for showing the intended layered hierarchical decomposition.

Figure: UML Model - A Partial Class Diagram of Ant
This picture focues on a key class which is subclassed by a large number of classes. UML is good for detailed design.
Dependency Models are lightweight
Even though they can be used for forward engineering or for reverse engineering, you do not have to worry about keeping them synchronized. You can test an existing implementation against a dependency model – on every build if you choose or even after months of development.
Dependency Models are highly scalable
The Dependency model approach is higly scalable. We have already applied it to software systems with more than 20,000 classes. The approach naturally permits teams of developers to focus on their part of the system while maintaining the big picture.
Dependency Models may be created to model any complex system
Dependency models may be created for any language: procedural or object oriented. Dependency models can be created from just about any system description. This includes “C” code, “ ADA” code, even UML files and object code. It is even possible to conceive of dependency models for hardware and software systems.
Dependency Models use a matrix representation while UML uses a directed graph representation
The matrix representation is simple, intuitive and easily scales to tens of thousands of subsystems. UML diagrams get cluttered quickly and eventually become impossible to understand as the number of boxes and lines increase. Macro architectural patterns are easier to discover and spot in a matrix, whereas the directed graph is useful for following specific paths for a detailed understanding of the system.
Dependency Models are less expressive than UML Models but well suited for software architecture
Even though, dependency models lack the expressive power of UML Models they are well suited for expressing key architectural patterns. In fact dependency models can easily express patterns such as layering and componentization which cannot even be expressed easily in any of the commonly used modern languages.
Dependency Models contain less detail
Dependency models cannot be used for code generation. Indeed, it is possible to have different implementations of a system all conforming to the same dependency model. UML models are detailed and are often used for code generation.
Dependency Models complement UML
Dependency models are ideal for architecture management. However, it is unlikely that dependency models will ever be used for the kind of detailed modeling that takes place with UML.