Notes on Using Dependency Models to Manage Complex Software Architecture
After reading “Using Dependency Models to Manage Complex Software Architecture” (http://sdg.csail.mit.edu/pubs/2005/oopsla05-dsm.pdf) as a primer on Dependency models I wanted to expound on a few items for future reference.
The dependency structure matrix (DSM) was originally developed for optimizing product development processes. It helped to show the dependency of tasks or the flow of data in and out of a task. Since then, it was adopted by software engineering to show the interdependency of system components in a scalable manner.
The DSM is usually generated from compile time source. Since it does not generate dependencies that are only visible at runtime it does provide a somewhat limited view of the system being modeled. One of the nice things about a higher end DSM tool is that it can be used to highlight architectural deviations. It can highlight layer interoperability and communication and demonstrate how a change to the code will propagate through the layers (your applications do have layers don’t they?). A higher end DSM tool can also assist you in enforcing architectural decisions. By creating a mini-specification such as S1 cannot-use S2 eg somecode.ui cannot-use somecode.data.entities you can quickly determine if the rule is still valid after another developer finishes a feature. That kind of at a glance code review can be a huge timesaver.
A nice time to break out the DSM is when you are about to undertake a large project. It can provide a unique view to the system and can help to identify areas where you might want to refactor. You can then setup your design rules in the DSM tool and refactor. Then when you model the code again you should have addressed a design rule and made some progress in creating a more stable and modular system.
It would also be nice if the DSM tool for reflector (http://tcdev.free.fr/) had rule validation. For a great visualization of the different patterns shown by a DSM visit http://www.emilmont.net/doku.php?id=tools:lattix.