Software Design is consider as a phase in software engineering which develops a blueprint that will be a base for constructing the software system. Once the requirements document regarding the software to be develop is presented, the phase of software design gets started.
The requirement specification activity is consider purely related with the problem domain. Whereas design is consider as the initial phase of transforming the problem into a solution.
IEEE defines software design as ‘both a process of defining the architecture, components and interface and the result of that process’. In the design phase, important and strategic decisions are require to get the expected functionality and quality of the system.
In design process there are several elements such as set of principles, concepts and practices. It help a software engineer to model the system or product which is to be built. The design model is assess for quality and review before generation of code and execution of tests. The design model gives us detail information regarding software data structures which are necessary to employ the system.
Software design encompasses the set of principles, concepts and practices that lead to the development of a high-quality system or product. Design concepts must be understood before the design practices are applied. Design practice itself leads to the creation of various representations of the software. It serve as a guide for the construction activity that follows.
Qualities of Good Software Design :
(1) Innovative – Innovatives design can be either completely new design or redesign of existing products. New design gives unseen values to market, where as redesign improves the quality of an existing product.
(2) Functional – Good design fulfils all its intended functions to solve users problem. It focuses on usefulness of a product by optimizing the functionality.
(3) Honest – A good design is honest. An honest design expresses the functions and values it offers. It never attempts to modify Organiser’s and User’s view with promises it can’t keep.
(4) User-oriented – Good design is develop based on its use and intended to improve solution to problem for the user. User-oriented design gives intellectual as well as material value to system which in turn achieve user’s satisfaction.
(5) Correctness – Correctness is an important quality of good design. A good design should correctly achieves all required functionalities as per SRS Document.
Design Principles :
Following are important design principles :
(1) The design process should not suffer from ‘tunnel vision’.
(2) It should be traceable to the analysis model and should not reinvent the wheel.
(3) Design should ‘minimize the Intellectual distance’ between the software and the problem as it exists in the real world
(4) Uniformity and Integration must be exhibit from the design.
(5) Design is not coding, coding is not design.
Design Concepts :
(A) Abstraction : Abstraction refers to a process by which designers consider components at an abstract level. There are two ways to use the concept of abstraction; as a process and as an entity.
(B) Information Hiding : The way of hiding unnecessary details is refer to as information hiding. In Information Hiding, only require information is transfer between the modules.
(C) Software Architecture : Software Architecture refers to the structure of the system, which consists of several components regarding a program or system. It helps the software engineers in the process of analyzing the software design proficiently.
(D) Modularity : Modularity can be achieve by the process of dividing the software into components which are uniquely name and addressable.
(E) Concurrency : It is important to utilize the resources efficiently as much as possible. For this multiple tasks must be execute concurrently. This aspects makes concurrency one of the important concepts of software design.
(F) Verification : Verification is described as a mechanism of confirmation by examining and giving evidence that there is no mismatch in design output and the design input specifications.