Software visualization is the act of using programs or integrated development environment (IDE) plug-ins during the development and testing of software applications; this allows for the creation of a graphical representation of some aspect of the software for the purpose of determining if there are any problems or inefficiencies within the program. There are a number of types of software visualization techniques, but they most commonly are used to see details about program source code, to examine relationships between software components or to watch an abstracted view of how a program is executing, including information about how it is interacting with surrounding processes. In general, software visualization is used on complex systems to help discover out-of-the ordinary behaviors or resource usage, or to see areas of a design that are unnecessary or malfunctioning. The actual visual representation that is used varies greatly from interconnected blocks of text to two-dimensional (2D) bar graphs to elaborate three-dimensional (3D) objects that change shape as a program runs.
In some cases, it can be useful to use software visualization to look at the source code for a program. Through the use of coloring and abstraction, massive amounts of written code can be viewed at once. The intention could be to determine how much code is used for what purpose or, alternately, the display could be bound to a profiler or debugger that highlights blocks of code that take a long time to execute or that are executed frequently.
Object oriented programming languages can use software visualization to determine relationships between the different libraries, classes and methods in a program. This helps to determine dependencies between the different areas of a program, some of which might be unintentional. It also can show classes or methods in a program that are never called or that the program logic makes unreachable. Visually, a dependency or relation chart can look like a network of webs and lines, overlapping spheres of differing sizes, or even the branches of a tree.
Once a program is running, real-time software visualization can show abstract representation of how the program is executing, how different queues are being handled, and how input and output are flowing. This can help developers to see spikes or gaps in performance and areas that are receiving exceptionally high activity. These types of visualizations can look like nearly anything from moving colored blocks and waveforms to changing topographical maps that represent code segments being executed. In general, however, the visualization is kept fairly basic so anomalous events can be clearly seen and observed without excessive graphical clutter.
There are other applications for software visualization, one of which is the reverse-engineering of an application. By observing how a program is interacting and running, different segments of the code can be focused on without requiring a steep initial learning curve. One more specific use is in the realm of computer security to observe which areas of a program are interacting with outside processes, or which areas are open to attack.