A software analysis pattern is a method of designing a computer program by equating abstract processes or patterns with the workings of the program being developed. The concept is to compare some type of pattern that works effectively in some context, usually in the real world, and then apply the same logic and sometimes the terminology of the pattern to the program being designed. By assessing the overall functioning of a program or module in this way, the goal is to find smaller patterns during software analysis and, potentially, appropriate design patterns to begin working out actual implementation details. Unlike design patterns that often are used to help design implementation and code, a software analysis pattern is more intended to provide a framework for thinking about a project so complexities are better visualized. There is no formal definition for the use or development of a software analysis pattern, although several examples of patterns exist.
In the beginning stages of software development, a software analysis pattern is intended to assist in structuring the broad view of a program and how its parts relate to one another. The pattern is intended for abstract analysis, however, and not for working out the smaller details of an application, such as individual methods, variables or file formats. One reason for the abstraction is so the concept of a single software analysis pattern can be modified only slightly and then reused for other software that might, in reality, be performing a wholly different task.
When developing the software analysis pattern, real-world examples are most often used. One example could be using a post office as a software analysis pattern for a simple message server. In this example, the letters would represent a message and a stamp might represent some type of server validation. A mailbox becomes a message queue, and the pick-up and drop-off times are tied to send and receive processes. In this way, the complex structure of the application can be abstracted and thought of in a more concrete way, so much so that the terminology of the source of the pattern often can translate into the names of the classes or components of the program itself during implementation.
Complications can occur when using a software analysis pattern, especially for very large programs. Over-simplifying a program during development is possible so some subsystems might, during implementation, not fall strictly within the analytical pattern once realized. Alternately, a pattern might be so structured that events within the program are modeled in a way that matches the pattern and are clear, but might not necessarily be very efficient.