What is Software Design?
Software Design – The Blueprint for Developing Software
The successful development of software requires an interlocking procedure that combines different phases, information and decisions. The software design describes a blueprint that deals with the realisation of defined requirements through the definition of
- the infrastructure as the technical basis,
- the software architecture and
- the drafting of subsystems, components, modules and classes.
According to IEEE 1990, software design refers to the process of defining the architecture, components, interfaces and other characteristics of a software (sub)system.¹ And the Software Engineering Body of Knowledge (SWEBOK), identifies software design as one of 15 knowledge areas of software engineering, where fundamentals and key topics, software structure and architecture, user interface design, design notations, and strategies and methods are defined.²
Software Design and Process Models
Various publications state that software design is based on the results of requirements analysis. Requirements analysis is a part of requirements engineering, which is understood as a systematic procedure for specifying and managing requirements for a system, product or software. Implicitly, this idea leads to sequential process models with self-contained phases that separate, for example, analysis, design, programming, testing, acceptance and operation or maintenance from each other.
Interestingly, however, there are also approaches such as the Twin Peaks Model that accept an interaction between requirements and architecture from the very beginning. Such iterative approaches use the knowledge that arises in the course of a development, so that, for example, work is done on selected aspects or with smaller designs in each iteration.
And there are also approaches that enable a combined procedure, e.g. the V-Modell XT. The V-Modell XT is a phase-based process model. Among other things, it defines project implementation strategies for incremental system development and uses so-called decision gates for process control. Decision gates mark quality measurement points at which decisions are made about the release of further project phases with the help of defined products (e.g. design documents). However, employees can flexibly “work ahead” for other phases, because only the decision gates have to be passed through sequentially according to the flow rules.
Contents in software design
The software design is a tool and blueprint for programmers. It often includes information about
- the infrastructure of hardware, tools and services (e.g. development environments, software development kits, programming languages, libraries) used by developers to build the software,
- the software architecture (e.g. client-server architecture, web architecture or service-oriented architecture) and the operating systems, network protocols, database systems, etc. to be used.
- subsystems as well as the specification of interfaces,
- components, modules and classes and their relationships to each other.
Software design is thus about identifying and defining a common basis for software development and important technical relationships. The goal is to define a foundation that is easy to understand, change, extend and maintain. The art of development subsequently lies in establishing a stable solution that is nevertheless flexible enough to allow for later variability.
Impulse to discuss:
During software design, developers often face recurring problems for which there are so-called design patterns. How important is the developers’ know-how when applying these patterns?
Notes:
[1]Â IEEE Standard Glossary of Software Engineering Terminology
[2]Â SWEBOK
And here you will find additional information from our Smartpedia section: