Design Concepts
Summary
- Definitions
- Detail Design
- Design Method
- Issues with Validation
- Other Design Issues
- Design Documentation
- Design Rationale
- Conceptual Integrity
- Design Philosophy
Definitions
Design is deliberative, purposeful planning
Engineering is skillful or artful contrivance applying scientific and mathematical principles
Craft is a skilled occupation
Art is the use of skill, taste, and imagination in the production of aesthetic objects
Differences between Software Design and Programming include:
- Scale
- Emphasis on Non-Functional Requirements
Software Design := The process of building a program while satisfying a problem’s functional requirements and not violating its non-functional constraints
Architectural Design is the process of identifying and assigning the responsibility for aspects of behavior to various modules or components of a software
Detail Design is the process of specifying the behavior of each of the system components that you’ve identified during architectural design
Detail Design
The primary purpose of detail design is to determine which data structures and algorithms to use
Can be represented using design notation:
- Psuedocode
- Structured programming
- Flow charts/Call graphs/DAGs
- Decision Tables
All approaches to design include 3 attributes:
- Design Method
- Design Representation
- Design Validation
Design Method
A method is a systematic sequence of steps that a design team uses to solve a problem
Always a trade off between long-term maintainability and short-term schedule
Issues with Validation
- Independence of validators
- If design team does their own validation, they could miss some issues
- Dependence of design method
- On-going vs after-the-fact
Other Design Issues
- Architectural vs Detail design
- Function behavior versus non-functional constraints
- Specification (what) versus design (how)
- Application specificity
Design Documentation
Some things to document:
- Subcomponents
- Processes / activities
- data
- Control flow
- Performance
- Resources consumption
- Stakeholders
- Issue bases
- What issues were raised
- What solutions were offered
- Why were there solutions offered
- Temporal relations
- Versions
- Constraints
- Aggregates
IEEE 1016
Design Rationale
Design decisions are explicit choices of how to trade off two non-functional aspects of a design, such as speed versus size
Conceptual Integrity
Conceptual integrity is the most important part of design
Related:
- Coupling
- Cohesion
Coupling is the extent to which two components depend on each other for successful execution
- Low coupling is good
Cohesion is the extent to which one component has a single purpose or function
- High cohesion is good
Abstract Interfaces hide information and reduce coupling
Abstraction Mechanisms
- Declarative
- what, not how
- Aggregation
- container, not contents
- Generalization
- class, not individuals
- Parameterization
- binding details later
- Non-deterministic specification
- leaving choices unspecified
Design Philosophy
- Descartes
- analysis
- use of models
- Marx
- understanding the social context
- user-centered design
- Heidegger
- Tools for accomplishing goals
- Wittgenstein
- language games desktop metaphor
- inventing a vocabulary to help you think about a problem
- language games desktop metaphor