Basics of Software design


“Software design is the process of implementing software solutions to one or more set of problems.”- wiki

Software Design Principles:
·         Abstraction:- is a process of Identifying the essential behavior, eliminating irrelevant details
·         Coupling: - is a connection between different modules/projects. 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.
·         Modularity: - System should decompose into a set of highly cohesive (similar and relating things together) and loosely coupled modules.
·         Encapsulation: - is a hiding data and implementation. Objects encapsulate data and implementation details; Abstraction is mainly achieved through information hiding.
·         Cohesion: - Modules with high cohesion (similar and related) is recommended because high cohesion is associated with characteristics such as robustness, reliability and reusability.
·         Sufficiency & Completeness: - Software should ensuring the completeness and sufficiency as per requirement.


SOLID principles
SOLID principles also have very important role in software designs, for quick walk through of SOLID principles in c#, click here.

Design Consideration
While designing software we should keep below things in mind
·         Compatibility : - Software should be compatible with required/targeted platform
·         Extensibility: - Additional capability can be incorporated without modifying base architecture.
·         Maintainability: - Easy to manage, fix bugs & Enhancement.
·         Fault Tolerance: - Able to handle errors/failure
·         Modularity & Reusability: - Software should have well defined modules. Code can be reused with/without modifications.
·         Robustness: - good performance under stress.
·         Security: - Protect information and data from unauthorized access.
·         Interoperability: - System should be integrated with other applications and components.


As mentioned earlier, software design is a process, and this process will have various steps and process
Requirement Definition>>Architecture Design>>Logical Design>>Detail Design>>Physical Design.


Software Design Methodologies:
We have two major design methodologies/strategies
1.       Structural/Functional: - This methodology typically used in software design where development in done using function oriented languages like C
2.       Object Oriented: - This is more commonly used design strategies where development done using language’s like, Java, C#, JavaScript.




Comments

Post a Comment