Thursday, April 14, 2016

About_SoftwareDesign

Great Article

http://www.csharpstar.com/software-design-overview/

Software Design Overview

In this article, we will discuss:

  • Introduction to Software Design
  • Software Design Principles
  • Software Design Considerations
  • Software Design Process
  • Software Design Strategies and Methodologies

In this article, we will understand what is software design in real IT world and why is it important ?

What is Software Design?

Software Design

“Software design is the process of implementing software solutions to one or more set of problems. One of the important parts of software design is the software requirements analysis (SRA). It is a part of the software development process that lists specifications used in software engineering. ” ~Wiki


“Software Design describes how software is decomposed and organized into components and the interfaces between those components. It also describes the component at a level of detail that enable their construction.” ~IEEE Definition


In my own words:

“Software Design is the process of Analysing system requirements to enable building components and interfaces between those components.”



Software Design Principles:

Software Principles
  1. Abstraction

    • Process of Identifying the essential behavior, eliminating irrelevant details
  2. Coupling

    • Low coupling is recommended for good design
    • Advantages of loosely coupled system is changes in one module does not cause changes in other modules but in tightly coupled system, changes to one module causes changes in other modules.
  3. Modularity

    • System decomposed into a set of highly cohesive and loosely coupled modules
  4. Encapsulation

    • Abstraction is mainly achieved through information hiding.Objects encapsulate data and implementation details
  5. Cohesion

    • Modules with high cohesion is recommended because high cohesion is associated with characteristics such as robustness, reliability and reusability
  6. Sufficiency & Completeness

    • Ensuring the completeness and sufficiency of software with respect to given requirements
Also we need to follow SOLID principles. You can read more on SOLID principles here.

Software Design Considerations:

Software Design Considerations

Software Design Process:

Software Design Process

Architectural Design Decisions:

  • This is the stage between requirement specification and actual designs where we decide:
    • How to decompose the system into modules?
    • How the system will be distributed?
    • Which approach should be followed to define the system?
    • Which platform to be used?
    • WHat would be the communication topology etc..

Logical and Physical Design Decisions:

  • In this stage the more detailed description for the component and sub component is provided
  • Logical design is more theoreetical and abstract than physical design

Software Design Strategies and Methodologies:

There are 2 major design methodologies.
  • Structured or functional decomposition
  • Object oriented approach

Structured Design Methodologies:

  • This is a systems approach to the analysis and design of information systems
  • There are multiple stages involved in it
Stage 1: Feasibility study
This is required to determine whether or not a given project is feasible.
Technical – is the project technically possible?
Financial – can the business afford to carry out the project?
Organizational – will the new system be compatible with existing practices?
Ethical – is the impact of the new system socially acceptable?
Stage 2: Analysis on the Current environment
This is required to validate if the current environment can support the expected changes.
Stage 3: Reuirement Specifications
In this stage, The requirement needs to be specified to build the new system
Stage 4: Technical System Options
  • the hardware architectures
  • the software to use
  • the cost of the implementation
  • the staffing required
  • the physical limitations such as a space occupied by the system
  • the distribution including any networks which that may require
  • the overall format of the interface
Stage 5: Logical Design
The product of this stage is the logical design which is made up of:
  • Data catalogue
  • Required logical data structure
  • Logical process model – includes dialogues and model for the update and inquiry processes
  • Design document at component and sub component level
Stage 6: Physical Design
This is the final stage where all the logical specifications of the system are converted to descriptions of the system in terms of real hardware and software

Object Oriented Design Methodologies:

The five basic concepts of object-oriented design are the implementation level features that are built into the programming language.
These features are often referred to by these common names:
1. Object/Class: A tight coupling or association of data structures with the methods or functions that act on the data. This is called a class, or object (an object is created based on a class). Each object serves a separate function. It is defined by its properties, what it is and what it can do. An object can be part of a class, which is a set of objects that are similar.
2. Information hiding: The ability to protect some components of the object from external entities.
3. Inheritance: The ability for a class to extend or override functionality of another class. The subclass has a whole section that is derived (inherited) from the superclass and then it has its own set of functions and data.
4. Interface: The ability to defer the implementation of a method. The ability to define the functions or methods signatures without implementing them.
5. Polymorphism : The ability to replace an object with its subobjects. The ability of an object-variable to contain, not only that object, but also all of its subobjects.

The input artifacts for object oriented designs are:
  • Conceptual model
  • Use case
  • System Sequence diagram
  • Relational data model etc..

We will look at each of the software design methodologies/strategies  in detail in next articles

No comments:

HTMLCode

HTMLCode Content