Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Software design

What is Software design?


Software design is a process to conceptualize the software requirements into software
implementation. Software design takes the user requirements as challenges and tries to find
optimum solution. While the software is being conceptualized, a plan is chalked out to find the
best possible design for implementing the intended solution.
Software Design is a Process that, When Performed, Translates Requirements into a Design. A
Software Design Process is a Bridge Between What the Software Needs to do (e.g.,
Requirements) and the Software Implementation (e.g., Code)

Software Design is Not Software Analysis


In software analysis, we focus on understanding what the software must do. Software analysis
gathers and organizes information that describes the needs (i.e., requirements) that the software
must fulfill. In contrast, software design focuses on the structures and behaviors that explain how
the software satisfies the requirements. Software design applies technical and application domain
knowledge to translate the needs into a design.
Software Design is Not Program Design
In program design, we focus on the coding details of our solution. Things like good variable
names, good method/function names, clean method/function signatures, and the reuse of
methods/functions are things we think about when doing program design. In software design, we
focus on a higher level of abstraction.
Design concepts
The design concepts provide the software designer with a foundation from which more
sophisticated methods can be applied. A set of fundamental design concepts has evolved. They
are as follows:
1. Abstraction - Abstraction is the process or result of generalization by reducing the
information content of a concept or an observable phenomenon, typically in order to
retain only information which is relevant for a particular purpose. It is all about hiding
complexity in building various parts of your application. It is an act of Representing
essential features without including the background details or explanations.
Example: Take another example - printing a document from your computer. You just
open the document, click on the “print” command, and in a short while, the printed
document is ready. You are not really bothered about how the computer stores the
document in 0s and 1s, nor about hoe it is transferred to the printer.
2. Refinement - It is the process of elaboration. A hierarchy is developed by decomposing a
macroscopic statement of function in a step-wise fashion until programming language
statements are reached. In each step, one or several instructions of a given program are
decomposed into more detailed instructions. Abstraction and Refinement are
complementary concepts.
3. Modularity - Software architecture is divided into components called modules.
4. Software Architecture - It refers to the overall structure of the software and the ways in
which that structure provides conceptual integrity for a system. Good software
architecture will yield a good return on investment with respect to the desired outcome of
the project, e.g. in terms of performance, quality, schedule and cost.
5. Control Hierarchy - A program structure that represents the organization of a program
component and implies a hierarchy of control.
6. Structural Partitioning - The program structure can be divided into both horizontally
and vertically. Horizontal partitions define separate branches of modular hierarchy for
each major program function. Vertical partitioning suggests that control and work should
be distributed top down in the program structure.
7. Data Structure - It is a representation of the logical relationship among individual
elements of data.
8. Software Procedure - It focuses on the processing of each module individually.
9. Information Hiding - Modules should be specified and designed so that information
contained within a module is inaccessible to other modules that have no need for such
information.
Design considerations
There are many aspects to consider in the design of a piece of software. The importance of each
consideration should reflect the goals and expectations that the software is being created to meet.
Some of these aspects are:
 Compatibility - The software is able to operate with other products that are designed for
interoperability with another product. For example, a piece of software may be backward-
compatible with an older version of itself.
 Extensibility - New capabilities can be added to the software without major changes to the
underlying architecture.
 Modularity - the resulting software comprises well defined, independent components which
leads to better maintainability. The components could be then implemented and tested in
isolation before being integrated to form a desired software system. This allows division of
work in a software development project.
 Fault-tolerance - The software is resistant to and able to recover from component failure.
 Maintainability - A measure of how easily bug fixes or functional modifications can be
accomplished. High maintainability can be the product of modularity and extensibility.
 Reliability (Software durability) - The software is able to perform a required function under
stated conditions for a specified period of time.
 Reusability - The ability to use some or all of the aspects of the preexisting software in other
projects with little to no modification.
 Robustness - The software is able to operate under stress or tolerate unpredictable or invalid
input. For example, it can be designed with resilience to low memory conditions.
 Security - The software is able to withstand and resist hostile acts and influences.
 Usability - The software user interface must be usable for its target user/audience. Default
values for the parameters must be chosen so that they are a good choice for the majority of
the users.[6]
 Performance - The software performs its tasks within a time-frame that is acceptable for the
user, and does not require too much memory.
 Portability - The software should be usable across a number of different conditions and
environments.
 Scalability - The software adapts well to increasing data or added features or number of
users.

Different Software design


Software design has different variants. Some of the variants are as follows -
Structured Design
The problems of the software are categorized into different elements of solution. The design of
the solution is considered as the structured design. The way and the process of solving the
problem is made easy to understand by structured design. Structured design enables to simplify
the problem by the designer.
According to the principle of „divide and conquer‟, a particular problem is divided into well-
structured small problems and each of the small problems is solved.
By using solution modules, the divided problems are solved. The modules are designed in a well
organized manner an aims in achieving the best solution for the problem.
The modules are enabled to interact among themselves. Some of the specific rules are followed
by the modules for their interaction. They are -
Cohesion – All the elements of similar functions are grouped.
Coupling – Interaction among the modules.
A structured design that possesses high cohesion and low coupling is considered as a good
structured design.

Function Oriented Design


Functions constitute the sub-systems of a system and which are meant for executing the system
tasks. System constitutes the top view for all the functions.
Some of the properties of structured design are followed by function oriented design. Even the
Function Oriented Design follows the principle of divide and conquer.
The information and the operation of the transactions are hidden by splitting the system into
smaller functions by the function oriented design mechanism. The global information is shared
by these functional modules and the information of the modules is shared among themselves.
The state of the program is changed by the function, when that particular function is called by the
program. Other modules hesitate the change. Function oriented design best suites where the state
of program is not considered and where input is considered by the functions.
Design Process
 Data flow diagram depicts the flow of the data in the system.
 The process of changing the state and the data of the system is depicted by DFD.
 The system is divided into different smaller sub-system based on their operations is called
functions.
 Each of the functions are described.

Object Oriented Design


The main focus of object oriented design is on entities. The strategies developed by this object
oriented design also focus on the characteristics of entities. There are different concepts used in
Object Oriented Design. They are -
 Objects – Objects are the entities of the system. Examples of objects are company,
person, customer etc. Each of the entity has its own attributes which are performed by
adopting some methods.
 Classes – Object is described in a class. The instant of the class is object. The features of
the object, functions and methods are described and defined by the class.
Different sources of methods or actions, the functions are described and variables constitute
the stored attributes of the solution design.
 Encapsulation – Encapsulation is a combination of attributes and methods. The data and
the methods of the object are not allowed to access by encapsulation. This process of
restriction is known as information hiding.
 Inheritance – Similar classes are piled up in a hierarchy by the process of inheritance.
The variables and methods can be imported by the lower sub-class from the next higher
class. Inheritance facilitates in creating generalized classes by defining specific classes.
 Polymorphism – Same name can be assigned to different methods that undertake similar
task but differ in arguments. This process in known as polymorphism. A variety of tasks
are performed by a single interface. The code is executed on the basis of the function that
is invoked.

Design Process
The steps involved in the design process of object oriented design are as follows -
 The earlier system, the system sequence diagram or the requirements can be used for
developing a solution design.
 Objects with similar attribute characteristics are identified and grouped into classes.
 Define the relation and the class hierarchy.
 Define the framework of the application.
What are the different approaches for Software Design?
The following are considered as the approaches for software design.
Top Down Design
Each system is divided into several sub-systems and components. Each of the sub-systems is
further divided into set of sub-systems and components. This process of division facilitates in
forming of a system hierarchy structure.
The complete software system is considered as a single entity and in relation to the
characteristics; the system is split into sub-system and component. The same is done with each of
the sub-systems. This process is continued until the lowest level of the system is reached.
The design is started initially by defining the system as a whole and then keeps on adding
definitions of the sub-systems and components. When all the definitions are combined together,
it turns out to be a complete system.
For the solutions of the software need be developed from the ground level, top-down design best
suits the purpose.
Bottom-up Design
The design starts with the lowest level components and sub-systems. Using these components,
the next immediate higher level components and sub-systems are created or composed. The
process is continued till all the components and sub-systems are composed into a single
component and which is considered as the complete system. The amount of abstraction grows
high as the design moves to more high levels.
By using the basic information existing system, when a new system needs to be created, the
bottom-up strategy best suits the purpose.
It is to be considered that neither of the strategies is practiced individually. They are always
combined together and practiced.

What do you mean by Coupling and Cohesion?


By modularization, a software system is separated into a number of independent modules. Each
module includes set of instructions used for performing a task. Each of the modules is considered
independent but they work in a relation with each other. The quality of designing the modules and
their interaction is quantified by using certain measures which are known as coupling and cohesion.
Cohesion
For the elements that are within the module, the level of their intra-dependability is defined by
Cohesion. It is considered that the program design is better when the rate of cohesion is high.
Cohesion is of different types. They are -
 Co-incidental cohesion – When modularization is practiced simply for the sake of it
without any planning, such cohesion is known as co-incidental cohesion. It is usually not
preferred and accepted by the programmers as there are chances of cohesion confusing
the programmers.
 Logical cohesion – When modularization is practiced on the basis of certain logic, and
the elements are made together in a particular module based on that logic, such cohesion
is known as logical cohesion.
 Temporal Cohesion – When all the elements of the module are structured in such a
manner it enables the modules to be processed at the same time, such cohesion is known
as temporal cohesion.
 Procedural cohesion – All the elements of the module are structured in such a manner
that it enables to execute them one after the other for performing a specified task, such
cohesion is known as procedural cohesion.
 Communicational cohesion – All the elements of the module are structured in such a
manner that they are sequentially executed on the same data; such cohesion is known as
communicational cohesion.
 Sequential cohesion – The elements of the modules are arranged in such a manner that
the input for the second module will be the output of the previous module, such cohesion
is known as sequential cohesion.
 Functional cohesion – All the elements of the module are grouped in such a way that
they work for a single function, such cohesion is known as Functional cohesion.

Coupling
For the modules of a software program, the inter-dependability level is quantified by the measure
known as Coupling. A particular level at which the modules interface and interact is measured by
Coupling. It is considered that the software program is better when coupling is low.
Coupling has five different levels. They are -
 Content coupling – When the content of the module can be accessed directly by other
modules, it is known as content coupling.
 Common coupling- When the global data can be accessed for reading and writing by
multiple modules, it is known as common coupling.
 Control coupling- When the execution flow of the module is changed and when the
functions of the modules are designed by other module, it is known as control coupling.
 Stamp coupling- When the data structure is commonly shared by multiple modules, it is
known as stamp coupling.
 Data coupling- When a module uses the components as passed by other module, it is
known as data coupling.

What do you mean by Design Verification?


All the functional and non-functional requirements are processed and executed by software
design for accomplishing a specific task. The process of software design comes up with output
which is in many forms. The output of the process include – design documentation, pseudo
codes, logical and process diagrams.
Depending on these outputs, the software is implemented.
It is mandatory to check the output prior to implementation. It is always better to detect mistakes
if any, at early stage. If not, it is not possible to detect until the stage of testing. Verification tools
which are associated with specific phase of the design are used for detecting errors. In other way,
verification and validation cab be done by a detailed and through review of the design.
At some instances, some conditions remain overlooked which may lead to some defects. These
defects can be detected by using a approach of structured verification which is usually done by
the reviewers. For a software design to a good, accurate and qualitative, it is essential to have a
good design review.

What is Software User Interface Design?


The view of the application through which the user can interact and use the software is the User
interface of the software. User interface enables the user to control and operate the software and
hardware. For all forms of digital technology that appears in mobile phones, computers, music
players and all the other sources, user interface appears and is used.
The information about the software is made available to the user by user interface. The platform
for human-computer interaction is offered by UI.
There can be different forms of UI. On the basis of combination of the hardware and the
software, UI can take any of the forms such as audio-video based, text-based, it can be graphical
form.

The following features of the user interface enables to increase the popularity of the software.
 Attractive
 Simple to use
 Responsive in short time
 Clear to understand
 Consistent on all interfacing screens

What are the different types of Software User Interface?


The software User Interface can be divided into -
 Command Line Interface
 Graphical User Interface

Command Line Interface (CLI)


Prior to the monitor displaying videos, Command Line Interface (CLI) was widely used a
common toll of UI. The minimum interface that a user has been obtained by the software is CLI.
Many of the programmers and technical users prefer CLI as their best option.
The user can communicate through using codes in a command prompt facilitated by the CLI. The
syntax of all the commands are to be known by the user. The errors of the users were not handled
perfectly by the earlier version of the CLI.
The instruction according to which the system has to execute is represented in the form of
commands. The users are enabled to easily operate by making available some of the methods
such as macros and scripts.
The resources of the computer are used in minimal by CLI.
CLI Elements

The different elements of the CLI are as follows -


 Command Prompt – The command prompt displays the user context. Software system
generates the command prompt.
 Cursor – The position of the character that is being typed is represented by the small
horizontal line or a vertical bar known as cursor. When something is written or deleted by the
user, the cursor moves accordingly.
 Command – The instruction that needs to be executed is known as command. On execution
of the command, the output is displayed on the screen. Command prompt appears on the next
line on production of the output.

Graphical User Interface


The user is facilitated with the graphical means for communicating with the system and which is
known as Graphical User Interface. Hardware and software combine together and constitute
GUI. The software is interpreted by the user with the help of GUI.
When compared with CLI, amount of the resources utilized is high for GUI. More complex GUI
designs are developed by the designers and programmers for increasing the accuracy, efficiency
and speed of the interface.
GUI Elements
The hardware or software system can be communicated through GUI by a means of different
components.
Different ways by which the user is enabled to interact and work with the system are made
available by the components of the GUI. GUI system includes the following elements -

 Window – The application contents that are displayed either as icons or as lists in a window.
The structure of the file is demonstrated by a window. A window can be explored and a file
ca ne easily found in the system. It is possible to minimize, resize or maximize the size of the
window. They can be dragged and moved as desired on the screen. A window with another
window of same application is known as child window.
 Tabs – Users are enabled to open more than one document in the same window. This is
facilitated by tabbed document interface. This feature is used by almost all the web browsers.
 Menu – All the standard commands are collected, grouped together, arranged and are
displayed at a place that is clearly visible inside the window. As desired, an option is provided
to either hide or display the menu, by certain programming.
 Icon – An application is replicated by small picture known as an icon. The application
window can be visited and opened on clicking on this icon. All the programs installed on the
system and the applications are displayed by using small pictures as Icons.
 Cursor – Cursor include all the devices used for interaction such as mouse, digital pen, touch
pad etc. The cursor acts according to the instruction of the hardware. The desired menu,
window or an application can be selected by using a cursor.

What are the different activities performed by a User Interface Design?


User Interface design performs many activities. The design and implementation of GUI is similar to
that of SDLC design. Among the different models such as Waterfall, Iterative or Spiral, any one of
them can be chosen for implementing GUI.
Some of the specific steps need to be satisfied or followed by any model that is selected for the
design and the implementation of GUI. The steps are as follows -

 GUI Requirement Gathering – All the functional and non-functional requirements of


GUI need to be collected, gathered and maintained by the designers.
 User Analysis – The user of the GUI is analyzed by the designer. As per the knowledge
and level of competency of the user, the design is changed. Advanced GUI is implemented
for the technical savvy user. More basic information on how to use the software is
provided for the non-technical user.
 Task Analysis – The task that is to be taken up the software is analyzed by the designer.
In GUI the tasks are analyzed by breaking the major task into sub-tasks. The goals to be
achieved by the GUI are determined by these tasks. The content that has to pass through
the GUI is determined by the information that flows in the sub-tasks.
 GUI Design & implementation – Considering the user environment, tasks and the
knowledge about the requirements, GUI is designed and implemented. Initially GUI is
implemented on a dummy project to testing.
 Testing – GUI can be tested in different ways. Some of them include in-house
verification, user involvement and introduction of beta version. The usability of GUI, the
acceptance of GUI by the user and the GUI compatibility are Some of the aspects on
which testing.

You might also like