Software Design
Tom Kelliher, CS 319
Sept. 18, 1998
Announcements:
From last time:
- Requirements exercise.
Outline:
- The design process.
- Design strategies.
- Design Quality.
Assignment: Read Chapter 22. Managers: partition and pipeline requirements
definition. Engineers: develop requirements, services templates.
- What process do you see in your software designs?
- Design is a creative process, not really adaptable to formal methods.
- General stages:
- Study and understand the problem.
- Identify gross features of at least one possible solution.
- Analyze each abstraction used in the solution.
- Design activities (may be overlapped). Starting from requirements
specification.
- Architectural design: identify and document sub-systems.
Deliverable: system architecture.
- Abstract specification: for each sub-system, an abstract
specification of services and constraints. Deliverable: software
specification.
- Interface design: for each sub-system, design and document its
interface(s) to other sub-systems. Deliverable: interface
specification.
- Component design: assign services to components. Design component
interfaces. Deliverable: Component specification.
- Data structure design: design and specify in detail. Deliverable:
data structure specification.
- Algorithm design: design and specify in detail. Deliverable:
algorithm specification.
- Structured methods don't mean that there is only one correct
design. Example: step-wise refinement. Formal way of ensuring the
design remains true to the requirements specification.
- Design descriptions and models.
Functional design:
- Top-down design style.
- System viewed as a collection of functions.
- Function = action.
- Centralized, shared system state.
Object-Oriented design:
- Bottom-up design style.
- System viewed as a collection of objects.
- Object = entity.
- Decentralized, private object states.
They are complementary styles. Often combined during a design
cycle.
``Quality is job 1.''
- Arbitrary, but important attributes should be identified in advance
for assessment purposes.
- Multi-dimensional: increasing along one axis may decrease others.
- Maintainability.
Seem to support maintainability.
Cohesion:
- Closeness of relationship between components.
- Cohesive component is a single unified part of the solution. Implies
ease of modification because everything's in one place.
- Several levels of cohesion: coincidental, logical, etc.
Coupling:
- Strength of interconnections between components.
- Loose coupling implies I can understand a component design without
referring to other component designs.
- Common coupling: shared variables. Control coupling: interchange of
control information.
- Premature binding of names to values.
- Inheritance.
Understandability:
- Implies others will be able to change the design.
- Cohesion and coupling: high and low.
- Meaningful names.
- Documentation: presentation of real world model, rationale
- Complexity: interconnectedness, control structures.
- the double-edged sword of inheritance: abstraction and
connectedness.
Adaptability:
- Implies design is easy to change.
- Traceability through design layers.
- Self-contained components (stronger requirement than loosely
coupled).
- Inheritance is good.
What qualities might be important in an on-line banking system?
12.5, 12.7, 12.8.
Thomas P. Kelliher
Wed Sep 16 10:33:19 EDT 1998
Tom Kelliher