Subsystem Architecture DiagramsIn mid-to-large sized software systems, breaking the overall functionality and implementation down into well segmented subsystems with cleanly specified interfaces is one of the principle challenges of a software architect. Success in this endeavor is key in ensuring that the source code can be efficiently developed, enhanced, tested and maintained. But such success is not always achieved. And even when the initial system architecture is well structured, the software structure can degrade over the life of the system. Imagix 4D's Subsystem Architecture Diagram view provides visualization and analysis of the existing architecture of a software system. The diagram is based on the Subsystem Interface Dependency View, described by Jeff Garland and Richard Anthony in Large-Scale Software Architecture, A Practical Guide Using UML. For a software architecture that is well structured, the diagram provides immediate understanding of the essential design of the system, and facilitates on-going tracking to ensure that the good structure is maintained. For poorly structured software, the challenges of modifying and testing software are greater. Here, the insight into dependencies provided by the diagram can be significant in reducing both effort and defects as source code is changed. The diagram can also serve as a critical tool for initiatives to measure and improve the subsystem partitioning, layering and interfaces.
As initially generated, the diagrams represent the current partitioning of a software system, showing its subsystems, layers and interfaces. For C code, this is the physical partitioning (directory to file to functions and global variables). For C++ and Java, this partitioning can be either physical (directory to file to class to member) or logical (namespace/package to class to member). To the extent that the physical or logical partitions have been used to segregate the source code's functionality, these diagrams also provide valuable understanding of the inherent components of the software architecture.