Software Design (Wikipedia)
Wikipedia article on Software Design. Covers the software design process, its position in the software lifecycle, design principles, design concepts, and quality considerations (design considerations).
Summary
A Wikipedia article providing a general overview of software design as a process and discipline. Covers the definition and relationship to requirements analysis and coding, key design concepts (abstraction, modularity, information hiding, etc.), design principles (Davis’s 10 principles), and a comprehensive list of design considerations (quality attributes at the design level). Also covers modeling languages used in software design.
Key Claims / Arguments
- Software design is the process of conceptualizing how a system will work before implementation — and also refers to the result of that process
- Design applies at multiple levels of abstraction from high-level architecture down to individual functions and algorithms
- At lower levels, design is often informal — code itself is the design artifact (Knuth’s TeX experience)
- Grady Booch identifies four fundamental design principles: abstraction, encapsulation, modularization, hierarchy (PHAME)
- Davis’s principles include: avoid tunnel vision, don’t reinvent the wheel, minimize intellectual distance between software and problem domain, degrade gracefully, assess quality during creation not after
- Iterative design (Ford and Richards) is the recommended approach to right-sizing components
- Scalability is defined by Marc Brooker: “a system is scalable in the range where marginal cost of additional workload is nearly constant”
- Design considerations include: compatibility, extensibility, fault-tolerance, maintainability, modularity, performance, portability, reliability, reusability, robustness, scalability, security, usability
Concepts Covered
- Software Design vs Software Architecture
- Abstraction
- Modularity
- Information Hiding
- Encapsulation
- Quality Attributes
- Separation of Concerns
Quality Notes
Standard Wikipedia article with academic citations (Booch, Davis, Knuth/Dijkstra quotes on code as design, Ralph and Wand’s formal definition). The design considerations section is comprehensive and well-structured. The article is descriptive/encyclopedic rather than prescriptive. As with all Wikipedia articles, it is a synthesis; individual claims should be verified against primary sources for academic use.