DESIGN CONCEPTS AND PRINCIPLES:
Design Principles: -
Software design is both a process and a model. The design process is a sequence of steps that enable the
designer to describe all aspects of the software to be built. It is important to note, however, that the design
pƌoĐess is Ŷot siŵplLJ a Đookďook. Cƌeatiǀe skill, past edžpeƌieŶĐe, a seŶse of ǁhat ŵakes ͞good͟ softǁaƌe, aŶd
an overall commitment to quality are critical success factors for a competent design.
The desigŶ ŵodel is the eƋuiǀaleŶt of aŶ aƌĐhiteĐt͛s plaŶs foƌ a house. It ďegiŶs ďLJ ƌepƌeseŶtiŶg the totalitLJ of
the thing to be built (e.g., a three-dimensional rendering of the house) and slowly refines the thing to provide
guidance for constructing each detail (e.g., the plumbing layout). Similarly, the design model that is created for
software provides a variety of different views of the computer software. Basic design principles enable the
software engineer to navigate the design process.
Principles for software design, which have been adapted and extended in the following list:
The desigŶ pƌoĐess should Ŷot suffeƌ fƌoŵ ͞tuŶŶel ǀisioŶ.͟
The design should be traceable to the analysis model.
The design should not reinvent the wheel.
The design should ͞ŵiŶiŵize the iŶtelleĐtual distaŶĐe͟ ďetǁeeŶ the softǁaƌe aŶd the pƌoďleŵ as it
exists in the real world.
That is, the structure of the software design should (whenever possible) mimic the structure of the
problem domain.
The design should exhibit uniformity and integration.
The design should be structured to accommodate change.
The design should be structured to degrade gently.
The design should be assessed for quality as it is being created, not after the fact.
The design should be reviewed to minimize conceptual (semantic) errors.
Design concepts:
Following issues are considered while designing the software.
Abstraction: ͞AďstƌaĐtioŶ peƌŵits oŶe to ĐoŶĐeŶtƌate oŶ a pƌoďleŵ at soŵe leǀel of aďstƌaĐtioŶ
without regard to low level detail. At the highest level of abstraction a solution is stated in broad terms
using the language of the problem environment. At lower level, a procedural orientation is taken. At the
lowest level of abstraction the solution is stated in a manner that can be directly implemented.
Types of abstraction: 1. Procedural Abstraction 2. Data Abstraction
Refinement: Process of elaboration. Refinement function defined at the abstract level, decompose the
statement of function in a stepwise fashion until programming language statements are reached.
Modularity: software is divided into separately named and addressable components called modules.
Folloǁs ͞diǀide aŶd ĐoŶƋueƌ͟ ĐoŶĐept, a Đoŵpledž pƌoďleŵ is ďƌokeŶ doǁŶ iŶto seǀeƌal ŵaŶageaďle
pieces.