Software Design
Requirements and -ilities
Responsiveness
Reliability
Availability
Usability
Maintainability
Resilience
Software Design
How will the software work?
Multi-level
- Architecture: strategy
- Detailed design: tactics
Traceable to
- Requirements
- Implementation
Comes mainly with experience, but also
- Looking at other folks' designs
- Reading about how design is done
Architectural and Detailed Design
Architecture: overall block diagram of what you are building
- Is it a pipeline? client-server? plugin architecture? file processor? database-driven? gui?
- What sorts of constraints does the design impose?
- How well does the architecture fit the requirements?
- All else being equal, simpler is better
Detailed Design: Module decomposition of what you are building
- Usually all the way down to "units" (procedures, functions, methods)
- Rule of 7 ± 2
- Bottom-up vs top-down
- All else being equal, simpler is better
Layering
Functional layers from "back" (primitive services) to "front" (user-facing services)
Neither too many nor too few
Client-Server Architecture
Shared data and processing on backend
Individualized interfaces and access on front-end
Need not be separated by a network (but usually are)
Compare with "Model-View-Controller pattern"
Technology Issues
Please ignore these sections of the textbook
In particular, please ignore the section on open source
Pseudocode
- Not necessarily every unit, but any that have anything interesting.
- Rules of Pseudocode:
- Should be translatable to code about as fast as you can type
- Shouldn't be code
- English to make things clearer
- Easy details omitted
- 1-5 LOC per line
Last modified: Monday, 26 October 2020, 12:33 AM