Software Design
Software design is a cycle to change client requirements into some reasonable structure, which helps the developer in programming coding and execution.
To know the user requirements, an SRS document i.e. Software Requirement Document is prepared in which more detailed requirements are needed for coding and implementing. The output of this phase can be directly implemented in programming languages.
In this phase of SDLC, solution of a problem is implemented practically, which is mentioned in SRS document.
Software Design Levels:
Software designing basically have three levels.
Architectural Design: This is the level where developers get the idea of the solution to the problem which is proposed in SRS document. It recognizes software as a system with many parts communicating with one another.
High-level Design: high level design is concerned with how the system may be implemented as modules, including all of its component parts. It acknowledges the modular design of every subsystem as well as how they relate to and interact with one another.
Detailed Design: The execution of what is seen as a system and its sub-system in the preceding two designs is the focus of detailed design. It goes into further depth about the modules and how they are implemented. It outlines the logical organization of every module as well as how they are connected to one another.
Modularization:
In this technique a software system is divided into multiple modules, these modules are expected to carry out task(s) independently. These modules may work as a basic building block for the entire software. Mostly designers try to develop a module which can work independently and separately with full efficiency.
There are many advantages of modularization such as
· Beneficial from the security point of view.
· Many modules can be executed concurrently.
· High-cohesion components can be reused.
· One can introduce the desired level of abstraction into the program.
Concurrency:
Concurrency in software development means that the software is divided into multiple independent modules and then they are executed simultaneously. In other words, due to concurrency the software have the capability to execute more than one part of code simultaneously.
Coupling and Cohesion:
Coupling and Cohesion are the measurements which is used to measure quality of module designs and interaction among them. In technical terms a module should display High Cohesion and Low coupling.
Cohesion:
Degree of intra-dependability among module pieces is measured by a concept called cohesiveness. A program’s design is better the more cohesive it is.
There are seven types of cohesion, which are as follows:
Co-incidental cohesion: It is random and unplanned cohesion which may confuse programmers, that’s why it is not acceptable generally.
Logical cohesion: logical cohesiveness is the state in which components of a module are logically grouped together.
Temporal cohesion: Temporal cohesion is the state in which a module’s pieces are arranged so that they are processed at roughly the same time.
Procedural cohesion: To sequentially perform a task, elements of a module are grouped together, this is called procedural cohesion.
Communicational cohesion: In this cohesion elements of a module grouped together and worked on the same data.
Sequential cohesion: Sequential cohesion is a cohesion in which the elements of a module are grouped because the output of one element serves as input to another element.
Functional cohesion: It is widely anticipated and regarded as the pinnacle of coherence. Functional cohesiveness is the grouping of module components that all support a single, clearly defined function. It's also reusable.
Coupling:
Coupling describes the degree of interaction among software modules. High coupling indicates that modules are closely connected, and changes in one module could affect other modules. Low coupling implies that modules are independent, with changes in one module having little impact on other modules. A software having low coupling is usually preferred.
Types of Coupling
Data coupling: If the dependency between the modules depends on the fact that they communicate mainly through data, the modules are said to be data coupled. In this coupling, the components of a system communicate with each other only through data, as they are independent of one another. Example- customer billing system.
Stamp coupling: It involves tramp data as the complete data structure is passed between the modules. It may be necessary because of efficiency considerations.
Control coupling: control coupling occurs when modules communicate by transferring control parameters. These parameters can be harmful if the perform completely different behaviour, or useful if they allow for grouping and reuse of functionality.
Common coupling: When many modules have read and write access to the same global data, this is known as common or global coupling.
Content coupling: Content level coupling occurs when one module has direct access to, modifies, or refers to the content of another module.
Ideally, no coupling is considered best coupling.
Design verification:
Design verification is important to verify the output of software design which include documentation of design, pseudo codes, detailed diagrams, descriptions of all functional and non-functional requirements before starting the next phase.


0 Comments