Design Representation
Abstract
Following usual software life cycle models the early phases of the software development process consist of activities like problem analysis, requirement definition, and system design. During these early phases only a rather imprecise, insecure, incomplete, and usually very abstract knowledge exists about the software system to be developed. On the other hand, there is a need to communicate about this knowledge by the developers as well as by potential users and, of course, between both groups of people. Furthermore, the decisions cast during the early stages of system development have a far-reaching effect throughout the life cycle up to maintenance and thus must be well documented.
There is a need to describe the system on a high level in a general way, which has the intended level of preciseness on one hand and is easy to understand on the other. The description languages employed during the early phases are to a large part graphical or semigraphical in nature (annotated by formal or semiformal texts) because this helps to cope with the problems cited above.
The design phase is that phase in the software development process by which the documents produced during system analysis and requirement definition are to be transformed into an ideally coarse but precise and rigorous description of the intended system.
The outcome of the design phase is a set of documents that altogether describe the system to be built and form the basis for implementation; that is, these documents altogether represent the design description (design representation) of the system under development.
Of course, the large set of different documents that comprise a design description cannot be handled without appropriate tools.
This article gives an overview on the different approaches to depict software designs, that is, how to represent the outcome of the design phase in design documents. The design description languages used to write design documents range from informal natural-language approaches to formal specification languages or even programming languages. Since the design activity very much interacts with the other early phases of software development, many of the languages described below are also in use for representing analyses and/or requirement definitions.
The methodical aspects of software design are not the focus of this article; here the descriptive aspect of the design description languages is stressed. Furthermore, the focus is especially on conventional sequential systems. Aspects dealing with the additional problems that come in with concurrent and/or distributed systems are not addressed.
The description given here is arranged according to the main paradigms that are used in identifying software components. For each of these paradigms there exist numerous variants and dialects, each with their individual methodical background.
After a general discussion on how to represent architectures of large systems, each design representation paradigm is discussed separately with its basic concepts, historical background, and main variants. Then some multiparadigmatic approaches are discussed, which integrate several of the aspects introduced before.