Software Design Methodology

Generally speaking, a design space represents a domain knowledge related to the design of a set of artefacts that have the same main functional characteristics, but these artefacts have various other functional and structural features. A design space normally divides the features associated to each artefact into two groups: functional properties and structural features. This manifests two types of knowledge. Firstly, it provides the knowledge about what is the variety of the designs in the domain in terms of what are valid combinations of the functional and structural properties. Secondly, it represents the relationships between functions and structures in the specific domain of design. A design space represented in such a way enables designers to solve both synthesis and analysis design problems. A synthesis design problem is to find the appropriate structure of a system so that certain functional requirements are met. An analysis design problem is to find out the properties of a design when the structure of the design is provided, at least partially provided.
The general theory of design space can be applied to software design in the study of the variety of software architectural elements. The domain knowledge of software architectural elements can be represented and described through a set of static properties and a set of behaviour properties. Behaviour properties characterise architectural elements through their run-time behaviours. They are defined in terms of the temporal relationships between various run-time events, such as the acceptances and transmissions of control and data.