Software Design
Software Design
preliminary
- study and understand the problem
- identify characteristics/features in the form of abstractions
- search for methods to represent those abstractions --> solutions
- describe the solution
Process: informal design outline -> informal design -> formal design -> finished design
- high-level design (architectural design): abstraction specification, decomposition
- detailed design: component design, data structure design, algorithm design, interface design
notation:
- graphical: relationships between components (flowchart, NS-diagram, HIPO)
- program description language (PDL): express intention of designer, not how it should be implemented
- informal text: artifacts that cannot be expressed formally, e.g., design rationale, non-functional considerations
Design document
- implement all explicit requirements
- readable guide
- complete picture of data, function
Models
- repository
- client/server
- abstract machine
- control (centralize, event-based – broadcast, interrupt)
design heuristics
- abstraction
- encapsulation/information hiding
- fan-in/fan-out
- modularity
considerations: selection control structures: standardization, abstraction, expressive power, orthogonality, minimality