UNC-CH COMP 723
What is Software Design?
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.