To develop something, it first needs to be visualized and illustrated so as to view and understand its conceptual schema. Similarly, in the field of software engineering, a blueprint of the intended software product is outlined and prepared, which is commonly known by the term of software design.
It may be seen as a software engineering artifact derived from the available specifications and requirements of a software product, which needs to be developed. It transforms and implements the requirements, specified in the software requirement specification (SRS) in a viewable object or form so as to assist developers to carry out the development process in a particular direction in order to build a desired product.
Software designing is one of the early phases of the Software Development Life Cycle (SDLC), which provides the necessary outputs for the next phase, i.e. coding & development.
Further, these designs may be structured using different strategies, and are available in multiple variants so as to view the logical structure of a software product from multiple perspectives. Let's go through each of them.
Based on the strategy of "divide and conquer", this approach divides the whole problem into smaller multiple problems, which are concurrently solved, branched and structured to deliver multiple solutions.
This method benefits the developer in order to understand the effective solution for solving a problem. Its best use may be seen in the bigger programs, having large complexities.
In structured design, there are certain rules which are used for the purpose of communication and interaction between the small multiple modules arranged in a hierarchical form. These rules may be seen as under:
This design is used to visualize a software product from a functional point of view. It is derived from the structured design, and follows its feature of divide and rule.
In this design, flow of data in a system is being examined through data flow diagram(DFD) to assess the change produce in the data, and consequently in the state of a system by a function. Further, in this strategy, a system is seen as small multiple numbers of functions based on their working where each function is capable of executing tasks and each of the functions is described in detail. Over and above, these functions are the system placed at a top position. These functional units are able to communicate with each other through passing of information or through the available information.
However, function-oriented design works well for a system where a function considers inputs for its working, and is independent from the system state.
This approach is used to build and view software design in terms of objects or entities along with their associated attributes. Instead of functions, this designing strategy focuses on state and behaviour of the objects to model the design and generally consist of following elements and features:
Generally, there are two ways to carry out the task of software designing, which may be seen as under:
However, it is preferred to carry out the designing process using the mixed combination of both the approaches, which is commonly known by the term of Hybrid Design.