Design Concept In Software Engineering

CSEBLOG100
0
The Software design concept provides a framework for implementing the right software.Following are certain issues that are considered while designing the software.
  • Abstraction
  • Architecture
  • Refinement
  • Pattern
  • Information hiding
  • Functional independence 
  • Refactoring 
  • Design Classes
Abstraction:

The abstraction means an ability to cope up with the complexity. Software design occurs at different levels of abstraction. At each stage of software design process levels of abstractions should be applied to refine the software solution. At the higher level of abstraction, the solution should be started in broad terms and in the lower level more detailed description of the solution is given.

While moving through different levels of abstraction the procedural abstraction and data abstraction are created.

The procedural abstraction gives the named sequence of instructions in the specific function. That means the functionality of procedure is mentioned by its implementation details are hidden. For example : Search the record is a procedural abstraction in which implementation details are hidden.

In data abstraction the collection of data objects is represented. For example for the procedure search the data abstraction will be record. The record consists of various attributes such as Record ID, name, address and designation.

Architecture:

Architecture means representation of overall structure of an integrated system. In architecture various components interact and the data of the structure is used by various components. These components are called system elements. Architecture provides the basic framework for the software system so that important framework activities can be conducted in systematic manner.

In architectural design various system models can be used and these are structural design various system models can be used and these are structural model, Framework model, dynamic model, process model and Functional model.

Refinement: 

Refinement is actually a process of elaboration. The architecture of a program is developed by successively refining levels of procedural detail. The process of program refinement is analogous to the process of refinement and partitioning that is used during requirements analysis. 

Abstraction and refinement are complementary concepts. The major difference is that - in the abstraction low level details are suppressed. Refinement helps the designer to elaborate low-level details.

Pattern:

According to Brad Appleton the design pattern can be defined as - It is a named nugget of insight which conveys the essence of proven solution  to a recurring problem within a certain context.

In other words, design pattern acts as a design solution for a particular problem occurring in specific domain. Using design pattern designer can determine whether pattern can be reusable. Pattern can be used for current work. Pattern can be used to solve similar kind of problem with different functionality.

Information Hiding:

Informative hiding is one of the important property of effective modular design. The term information hiding means the modules are designed in such a way that information contained in one module cannot be accessible to the other module. Due to information hiding only limited amount of information can be passed to other module or to any local data structure used by other module. 

The advantage of information hiding is basically in testing and maintenance. Due to information hiding some data and procedures of one module can be hidden from another module. This ultimately avoids introduction of errors module from one module to another. Similarly one can make changes in the desired module without affecting the other module. 

Functional Independence: 

The functional independence can be achieved by developing the functional modules with single-minded approach. By using functional independence functions may be compartmentalized and interfaces are simplified. Independent modules are easier to maintain with reduced error propagation. Functional independence is a key to good design and design is the key to software quality.

The major benefit of functional independence is in achieving effective modular. The functional independence is assessed using two qualitative criteria - Cohesion and Coupling.

Cohesion: 

With the help of cohesion the information hiding can be done. A cohesive module perform only one task in software procedure with little interaction with other modules. In other words cohesive module performs only one thing.

Different types of cohesion are coincidentally cohesive, Logically cohesive, Temporal cohesion, procedural cohesion and communication cohesion. The goal is to achieve high cohesion for modules in the system. 

Coupling:

Coupling effectively represents how the modules can be connected with other module or with the outside world. Coupling is a measure of interconnection among modules in a program structure. Coupling depends on the interface complexity between modules. The goal is to strive for lowest possible coupling among modules in software design. 

The property of good coupling is that it should reduce or avoid change impact and ripple effects. It should also reduce the cost in program changes, testing and maintenance. Various types of coupling are data coupling, control coupling, common coupling and content coupling.

Refactoring:

Refactoring is necessary for simplifying the design without changing the function. Fowler has defined refactoring as "the process of changing a software system in such a way that the external function of the design do not get changed, however the internal structure gets improved.

Benefits of refactoring are the redundancy can be achieved. Inefficient algorithms can be eliminated or can be replaced by efficient one. Poorly constructed or inaccurate data structures can be removed or replaced. Other design failures can be rectified.

The decision of refactoring particular component is taken by the designer of the software system.

Design Classes: 

Design classes are defined as the classes that describe some elements of problem domain, focus on various aspects of problem from user's point of view.

The goal of design classes is to refine the analysis classes by providing the detail design, so that further implementation can be done easily. To create new set of classes for implementing the infrastructure of the software.

There are five different types of design classes they are user interface class, business domain class, process class, persistent class and system class.

Complete and efficient: A  design class must be properly encapsulated with corresponding attributes and methods. Design class must contain all those methods that are sufficient to achieve the intent of the class.

Primitiveness: Methods associated with one particular class must perform unique service and the class should not provide another way to implement the same service.

High cohesion: A cohesive class must posses small, focused set of responsibilities and these  responsibilities must be associated with all the attributes of that class.

Low coupling: Design classes must be collaborated with manageable number of classes. If one design class is collaborated with all other design classes then the implementation, testing and maintenance of the system becomes complicated. The law of Demeter suggests that the one particular design class should send the messages to the methods of design classes only.

Post a Comment

0Comments

Post Your comments,Views and thoughts Here, Give Us Time To Respond Your Queries

Post a Comment (0)