Software design
From Wikipedia, the free encyclopedia
Software development process | |
Activities and steps | |
---|---|
Requirements · Architecture Design · Implementation Testing · Deployment |
|
Models | |
Agile · Cleanroom · Iterative · RAD RUP · Spiral · Waterfall · XP · Scrum |
|
Supporting disciplines | |
Configuration management Documentation Quality assurance (SQA) Project management User experience design |
|
Software design is a process of problem-solving and planning for a software solution. After the purpose and specifications of software is determined, software developers will design or employ designers to develop a plan for a solution. It includes low-level component and algorithm implementation issues as well as the architectural view.
The software requirements analysis (SRA) step of a software development process yields specifications that are used in software engineering. If the software is "semiautomated" or user centered, software design may involve user experience design yielding a story board to help determine those specifications. If the software is completely automated (meaning no user or user interface), a software design may be as simple as a flow chart or text describing a planned sequence of events. There are also semi-standard methods like Unified Modeling Language and Fundamental modeling concepts. In either case some documentation of the plan is usually the product of the design.
A software design may be platform-independent or platform-specific, depending on the availability of the technology called for by the design.
Contents |
[edit] Design Considerations
There are many aspects to consider in the design of a piece of software. The importance of each should reflect the goals the software is trying to achieve. Some of these aspects are:
- Extensibility - New capabilities can be added to the software without major changes to the underlying architecture.
- Robustness - The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with a resilience to low memory conditions.
- Reliability - The software is able to perform a required function under stated conditions for a specified period of time.
- Fault-tolerance - The software is resistant to and able to recover from component failure.
- Security - The software is able to withstand hostile acts and influences.
- Maintainability - The software can be restored to a specified condition within a specified period of time. For example, antivirus software may include the ability to periodically receive virus definition updates in order to maintain the software's effectiveness.
- Compatibility - The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward-compatible with an older version of itself.
- Modularity - the resulting software comprises well defined, independent components. That leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project.
- Reusability - the modular components designed should capture the essence of the functionality expected out of them and no more or less. This single-minded purpose renders the components reusable wherever there are similar needs in other designs.
[edit] Design Patterns
A software designer or architect may identify a design problem which has been solved by others before. A template or pattern describing a solution to a common problem is known as a design pattern. The reuse of such patterns can speed up the software development process, having been tested and proved in the past.
[edit] Design methodologies
Design methodologies aim to provide a template process or a framework for the actual design of a system. They aim to simplify the actual process of designing a system and aim to enforce some standard design principles which improve the quality of a design. One of the earlier design methodologies is the Responsibility Driven Design (RDD) pioneered by Rebecca Wirth et al. It forms the basis of the URDAD, the Use Case, Responsibility-Driven Analysis and Design method which aims to generate a technology neutral design which is then mapped onto one's choice of implementation architecture and technologies.
[edit] Usage
Software design documentation may be reviewed or presented to allow constraints, specifications and even requirements to be adjusted prior to programming. Redesign may occur after review of a programmed simulation or prototype. It is possible to design software in the process of programming, without a plan or requirement analysis, but for more complex projects this would not be considered a professional approach. A separate design prior to programming allows for multidisciplinary designers and Subject Matter Experts (SMEs) to collaborate with highly-skilled programmers for software that is both useful and technically sound.