UNC-CH COMP 723

What is Software Design?


  1. Software design is the process of establishing a framework on which a software product is based and built upon later on. With the help of this framework, a product can grow from a mere collection of ideas that can solve a pre-defined question to a tangible object which solves the question (or up to a certain degree). Having a concrete design in place helps in product development as it leaves less room for going off-track the intended solution. However, a considerable amount of time has to be spent upfront on creating the software design so that all possible scenarios and options are considered and a good design will give enough room to accommodate unforeseen changes as well.
  2. When setting out to produce a piece of software there are an infinite number of different ways to achieve what is essentially the same end result. Thus, all software must be designed in some way or with some kind of strategy in mind (even if it is just "hack it together"). When designing software there are often specific goals in mind, such as making sure that software can be easily expanded or changed if needed, the code is easy to follow and understand, and that the software is secure so that a malicious user can not exploit it or harm the system.
  3. Software design is a developing process of software, and software is a solution to solve some specific problems. Some guidelines and principles should be followed. Also many aspects and constraints should be considered during the design process. Due to the scale of software might be huge which involved by hundreds of people, the process should be formal to minimize the difficulty.
  4. Software design is the iterative process of developing a program's structure and communication framework. This framework is built in consideration of a given set of constraints to accomplish specific tasks. Ideally, the framework should be modular, reusable, and extensible. Software design occurs throughput the development cycle as new ideas, requirements, and limitations emerge from the implementation and testing process.
  5. Software design (noun) is blueprint of a software that describes the modules of the software and the relationship among the modules to perform the desired task. Software design determines how the software will perform in certain use-cases. Software design is useful when the current version of a software needs to be upgraded or modified as it tells us what are the parts of the software and how they are interacting.
  6. Software design (verb) is to design a software to meet user requirement while optimizing the performance in terms of resource usage, computing time and correctness of output and admitting tractability. Maintaining tractability of a software is important for software design so that satisfying changed user requirements and error correction can be facilitated without much effort. Designing a software needs understanding the complexity the problem poses and design interacting components to build the software while reducing the implementation and maintenance complexity.
  7. Software design is the process of planning, implementing, and testing software tools that are used to solve a particular problem or achieve a certain goal. These goals are quantified and explained via software specifications which outline what the software is capable of achieving (i.e., computational performance, computational complexity, types of problems it solves, memory requirements, etc). In general, the software design planning process should ensure that software is designed and tested in a modular manner and before the software is brought together to a final product. This reduces the time and complexity of finding bugs and issues with the software. Software is generally implemented by programmers and tested by introducing certain non-trivial test examples to ensure its functionality.
  8. Software design can also be defined in terms of describing the blueprint of a software system. This blueprint includes architectural information, coding modules, programming languages, libraries, hardware requirements, etc. Software systems are only as useful or valuable as the clarity and useability of the documentation that goes along with it. Supporting documentation should explain the functionality of a software system in a way that someone who didn't design the system could recreate it.
  9. Software design includes both low level software implementation and high level software architecture. For low level implementation, it is about how to write clean and easy to understand code. For high level architecture, it is about how to use design patterns to better organize the software to make it can be easily extended. In particular, design patterns are useful for improving the software design skills, and can be used as a language for describing the architecture of software.