Basic Ideas - Software Structure
It is not uncommon for software systems to be large, containing thousands of packages. Each package contains a set of nested and sequential scopes
determinded by definition of namespaces, classes, functions, and controls.
This Structure
may not be strictly ordered as presented in the previous
sentence. For example, a function may define a local class which has methods and fields. Nevertheless, each package defines a scope placement tree
which uniquely defines its structure.
A process is implemented by one or more packages, usually a dozen or fewer. Process structure is defined by the relationships between types within
the process and calling relationships between its packages.
Systems are formed from a collection of processes. The structure of the system is determined by communication patterns between processes, through
sockets, shared memory mapped files, or services.
Perhaps the most important characteristic of structure above the package level is the call dependency graph that spans the entire system. This graph
is segmented into process subgraphs which connect with each other via the interprocess communication mechanisms cited in the prevous paragraph.
Within each process subgraph there is another interesting dynamic structure imposed by threads created within the process. Threads execute the
process's code independently, but have some shared resources - message queues, synchronization constructs, and shared objects. It is difficult
to reason effectively about concurrent processing unless the threading models are very simple.
Need for Visualization
When there are many hundreds or thousands of packages in a project it can be daunting to understand its operations. We need ways of partitioning
the system into managable chunks, abstracting out essential details, and ways of presenting views of specific structures and behaviors, e.g., communication,
sharing, concurrent processing, and dependencies. With effective presentation tools like WPF, Silverlight, and HTML5, we have the means to do that.
What we need is the imagination to use those means in ways that will enable better design of large systems.
Software Visualization References
-
Software Design Patterns - pdf
-
Pivot Viewer,
Microsoft Live Labs Pivot - Wikipedia
-
Visualization Patterns
-
Interface Design Patterns Browser
-
Google Visualization API Reference
-
Visual Complexity