Software Development: Design

Software Development: Design

Concept of Software Design

  • Software design is a phase in the software development process, where the system architecture and the software’s working flow are defined.
  • Has as its underlying objective the creation of a model that can be used by programmers to code the software.

Importance of Software Design

  • It helps to divide the whole system into smaller modules, making the system easier to handle and manage.
  • The design serves as the blueprint for software development and makes the coding and testing processes efficient.
  • It reduces complexity by breaking the systems down into manageable modules, decreasing errors and improving usability and maintainability.

Different Types of Software Design

Architectural Design

  • Architectural design refers to the high-level structure of software, the discipline of creating such structures and documenting them.
  • It explains the position and functionality of each module, providing a rough overview of the software.

Detailed Design

  • Detailed design is the complete detailed diagrams of the software systems.
  • Each module’s workings and process diagrams are provided in detail for coding.

Prototyping in Design

  • Prototyping is the process of building a model of a system, in terms of an information system, it includes acquiring data, process description, network diagrams, and techniques.
  • It allows developers to explore ideas, demonstrate the functionality of the system and gather feedback before implementing the software.

Design Principles and Concepts

Cohesion and Coupling

  • Cohesion refers to the degree to which elements of a module belong together. Higher levels of cohesion are often desirable because they reduce the complexity and increase the modularity of the program.
  • Coupling is the degree to which one module depends on others. Low coupling is often a sign of a well-structured computer system, increasing the flexibility and maintainability of the software.

Encapsulation

  • Encapsulation, or data hiding, is a key principle in object-oriented programming where the implementation of a class is hidden from the rest of the program.
  • It helps improve the modularisation of the code, making it easier to maintain and modify.

Modelling in Software Design

  • In software design, modelling can help represent complex systems and behaviour.
  • Common models used in software design include Class diagrams, Sequence diagrams, and Use case diagrams.
  • Using models allows developers to identify problems or improvements early on in the design process before coding begins.

Software Design Document

  • A Software Design Document (SDD) outlines how the software will be created and implemented.
  • It’s used as a reference for software engineers to ensure that the project scope and design are maintained.
  • The SDD includes design diagrams, use case details, and algorithm illustrations among others.

The Design Process

  • The aim of a good design process is to produce a design that is easy to understand, easy to modify, and easy to implement.
  • The design process typically starts by gaining an understanding of the problem at hand, followed by brainstorming possible solutions.
  • The solutions are evaluated and chosen based on various criteria, including simplicity, flexibility and compatibility.
  • The final design is then tested and refined as necessary, until a satisfactory solution is achieved.

Challenges in Software Design

  • Designing software can be challenging as it requires careful planning, a good understanding of the problem at hand, and a methodical approach to solving it.
  • Another challenge lies in managing the complexity of larger software systems.
  • Designers often have to find the right balance between functionality, performance, security, and other factors during the design process.