Software Visualization Patterns

A Pattern Language?

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

  1. Software Design Patterns - pdf
  2. Pivot Viewer, Microsoft Live Labs Pivot - Wikipedia
  3. Visualization Patterns
  4. Interface Design Patterns Browser
  5. Google Visualization API Reference
  6. Visual Complexity

life science photo missing