Skip to content

Software Design

Software design is an early stage in the development process that serves as a bridge between requirements and implementation. The requirements are derived from the expected functions and behaviors of the system, and provide the foundation for the design activities. The input to this stage is the software requirements, while the output is the software architecture.

Software Design
[Peter Kemp & Paul Smith, Wikipedia]

The main challenge during the design phase is managing system size and complexity. A key principle is divide and conquer: decomposing the system into smaller elements and identifying the relationships and interactions between them.

Software components

Software components are high-level units of software composition. They provide well-defined interfaces and may also depend on interfaces provided by other components. Components do not expose implementation details, making them black-box abstractions that help express the system's high-level design, including its main elements and their relationships. In practice, a component may be implemented using classes, functions, files, or other software constructs.

Software components
[Wikipedia]

Software components diagram

Software components diagram
[uml-diagrams.org]

Cohesion and Coupling

Two key concepts of software design are cohesion and coupling.

Cohesion refers to the degree to which the responsibilities of a software component are related and focused on a single purpose. A highly cohesive component performs a well-defined set of closely related tasks.

Coupling, on the other hand, refers to the degree of dependency between software components. Low coupling is generally desirable, as it minimizes interdependencies and makes the system easier to understand, modify, test, and maintain.