Software Design

Tom Kelliher, CS 319

Sept. 18, 1998

Announcements:

From last time:

  1. Requirements exercise.

Outline:

  1. The design process.

  2. Design strategies.

  3. Design Quality.

Assignment: Read Chapter 22. Managers: partition and pipeline requirements definition. Engineers: develop requirements, services templates.

The Design Process

  1. What process do you see in your software designs?

  2. Design is a creative process, not really adaptable to formal methods.

  3. General stages:
    1. Study and understand the problem.

    2. Identify gross features of at least one possible solution.

    3. Analyze each abstraction used in the solution.

  4. Design activities (may be overlapped). Starting from requirements specification.
    1. Architectural design: identify and document sub-systems. Deliverable: system architecture.

    2. Abstract specification: for each sub-system, an abstract specification of services and constraints. Deliverable: software specification.

    3. Interface design: for each sub-system, design and document its interface(s) to other sub-systems. Deliverable: interface specification.

    4. Component design: assign services to components. Design component interfaces. Deliverable: Component specification.

    5. Data structure design: design and specify in detail. Deliverable: data structure specification.

    6. Algorithm design: design and specify in detail. Deliverable: algorithm specification.

    7. 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.

    8. Design descriptions and models.

Design Strategies

Functional design:

  1. Top-down design style.

  2. System viewed as a collection of functions.

  3. Function = action.

  4. Centralized, shared system state.

Object-Oriented design:

  1. Bottom-up design style.

  2. System viewed as a collection of objects.

  3. Object = entity.

  4. Decentralized, private object states.

They are complementary styles. Often combined during a design cycle.

Design Quality

``Quality is job 1.''

  1. Arbitrary, but important attributes should be identified in advance for assessment purposes.

  2. Multi-dimensional: increasing along one axis may decrease others.

  3. Maintainability.

Some Design Qualities

Seem to support maintainability.

Cohesion:

  1. Closeness of relationship between components.

  2. Cohesive component is a single unified part of the solution. Implies ease of modification because everything's in one place.

  3. Several levels of cohesion: coincidental, logical, etc.

Coupling:

  1. Strength of interconnections between components.

  2. Loose coupling implies I can understand a component design without referring to other component designs.

  3. Common coupling: shared variables. Control coupling: interchange of control information.

  4. Premature binding of names to values.

  5. Inheritance.

Understandability:

  1. Implies others will be able to change the design.

  2. Cohesion and coupling: high and low.

  3. Meaningful names.

  4. Documentation: presentation of real world model, rationale

  5. Complexity: interconnectedness, control structures.

  6. the double-edged sword of inheritance: abstraction and connectedness.

Adaptability:

  1. Implies design is easy to change.

  2. Traceability through design layers.

  3. Self-contained components (stronger requirement than loosely coupled).

  4. Inheritance is good.

What qualities might be important in an on-line banking system?

Exercises

12.5, 12.7, 12.8.



Thomas P. Kelliher
Wed Sep 16 10:33:19 EDT 1998
Tom Kelliher