Software design is a process to transform user requirements into some suitable form, which helps the programmer in software coding and implementation. Once the requirements for a system have been documented, software engineers design a software system to meet them. Thus, the purpose of design phase is to produce a solution to a problem given in SRS document. This phase is the first step in moving from the problem domain to the solution domain.
Software design is the most important
phase of the software development cycle. During the software design phase,
the design document is produced, based on the SRS document. Hence the aim of this phase is to transform the SRS
document into the design document. The design document produced at
the end of the design phase should be implemented using a programming language
in the coding phase. A good design is the key to successful product. A well
designed system is easy to implement, reliable, understandable and allows for
smooth evolution.
Items developed during Software Design Phase:
For a design to be easily implemented in a conventional programming language, the following items must be designed during the design phase:
- Different
modules required to implement the design solution.
- Control
relationships among the identified modules.
- Interfaces among
different modules
- Data structures of
the individual modules
- Algorithms
required to implement the individual modules
Classification of design activities:
A good software design is rarely arrived by using a single step procedure but rather through several iterations through a series of steps called the design activities. Depending on the order in which various design activities are performed, we can broadly classify them into two important stages:
- Preliminary or high-level design
- Detailed design
Preliminary (High-Level) Design:
Through high-level design, a problem is decomposed into a set of modules, the control relationships among various modules identified, and also the interfaces among various modules are identified. The outcome of the high-level design is called the software architecture or the program structure. Many different types of notations have been used to represent a high-level design. A notation that is widely being used for procedural development is a tree-like diagram called the Structure Chart.
Detailed Design:
During detailed design, the data structure and the algorithms
of the different modules are designed. The outcome of the detailed design stage
is usually documented in the form of module-specification (MSPEC)
document.
Following are the characteristics of a good software design:
Correctness: A good software design should correctly implement all the functionalities identified in the SRS document.
Completeness: Completeness requires that all the different components of the design should be verified i.e., all the relevant data structures, modules, external interfaces and module interconnections are specified.
Consistency: Consistency requires that there should not be any inconsistency in the design.
Efficiency: The software design must be efficient. Efficiency of any system is mainly concerned with the proper use of resources by the system. The need for efficiency arises due to cost considerations. If some resources are scarce and expensive, it is then desirable that those resources be used efficiently.
Understandability: A good design should be easily understandable, unless a design is easily understandable, it would be difficult to implement and maintain it.
Traceability: Traceability is an important property that can get design verification. It requires that all the design elements must be traceable to the requirements.
Maintainability: The software design must be in such a way that modifications can be easily made in it. This is because every software needs time to time modifications and maintenance. Any change made in the software design must not affect the other available features, and if the features are getting affected, then they must be handled properly.
0 Comments
if you have any doubts plz let me know...