- Forward


Software Design
An Introduction


Prof. David Bernstein
James Madison University

Computer Science Department
bernstdh@jmu.edu

Print

Software Design
Back SMYC Forward
Software design is the process of specifying the nature and composition of a software system that satisfies client needs and desires, subject to constraints.
The Importance of Software Design
Back SMYC Forward

The pervasiveness of software in contemporary society means that software designers are increasingly responsible for our:

  • Quality of Life
  • Productivity
  • Economic Well-Being
  • Health
Examples of Bad Software Design
Back SMYC Forward
When I Say Leap... On Feb. 29, 1988 a supermarket was fined for having 1-day-old meat on its shelves. The meat had been processed that day.
Y19C Bug In 1992 Mary (from Winona, MN) received her application for kindergarten. She was 104.
Y2020 Bug On January 1, 2020 several parking meters, a WWE game, and many other applications stopped working because of Y2K bug "fixes" that still used 2 digits for years (i.e., they assumed 00-19 were in 2000 and 20-99 were in 1900).
B Bye In 1995 software bugs in the automated luggage system of the new Denver airport caused suitcases to be destroyed. It opened 16 months late (using a manual system).
Examples of Bad Software Design (cont.)
Back SMYC Forward
A Meter Is Approximately A Yard The $165 million Mars Polar Lander probe was destroyed in its final descent to the planet in 1999, probably because its software shut the engines off 100 feet above the surface.
Was It A Snow Day? Faulty software in anti-lock brakes forced the recall of 6,000 school buses in 2000 (not to mention 39,000 trucks and tractors).
You Want Fries With That? The MD C-17 cargo plane was $500mil over budget because of problems with its avionics software. It had 19 computers, 80 microprocessors and software written in 6 different languages.
Go Left? Right! A bug in the Rockwell Collins Aerospace-made flight management systems (FMSes) running on Combardier CRJ-200 aircraft that were trying to follow certain missed approaches caused them to turn right instead of left (or vice versa).
The Definition of Software Design Revisited
Back SMYC Forward
  • The Definition:
    • Software design is the process of specifying the nature and composition of a software system that satisfies client needs and desires, subject to constraints.
  • An Important Question:
    • What's a system?
Systems
Back SMYC Forward
    System A set of entities, their attributes, and the relationships between them.
    Entities The components of the system that are known/observed.
    Attributes The properties of the entities (i.e., the external manifestations of the way the objects are known or observed).
    Relationships The bonds that link objects and attributes
Systems (cont.)
Back SMYC Forward
  • An Important Observation:
    • We can define systems in an enormous number of ways depending on the level of detail (abstraction) used
  • The Level of Detail is Relative To:
      Environment The set of all other systems (also known as the context and the domain)
      Subsystems Parts of the whole which display a richness of interrelationships
      Elements/Atoms The smallest parts of the system (i.e., black boxes)
Product Design and Engineering Design
Back SMYC Forward
  • Software product design is the process of specifying software product features, capabilities and interfaces to satisfy client needs and desires.
  • Software engineering design is the process of specifying programs and sub-systems, and their constituent parts and workings, to meet software product specifications.
Design is Problem Solving
Back SMYC Forward
  • The Logical Process:
    • Identify Goals, Objectives and Constraints
    • Generate Alternatives
    • Evaluate Alternatives
    • Select an Alternative
  • Two Aspects of the Logical Process:
    • Analysis (to understand the problem)
    • Resolution (to "solve" the problem)
Data-Driven Problem Solving
Back SMYC Forward
  1. Identify the important data (i.e., describe things in terms of their parts). For example, a car has wheels, doors, an engine, ...
  2. Identify the processes that manipulate these data
  3. Elaborate (i.e., decompose the data into subordinate data)
Function-Driven Problem Solving
Back SMYC Forward
  1. Identify the processes/procedures/functions (i.e., describes things in terms of their processes). For example, a car can move, uses gasoline, ...
  2. Identify the data that are manipulated by these processes
  3. Elaborate (i.e., specify inputs/outputs and reduce into subordinate processes)
Responsibility-Driven Problem Solving
Back SMYC Forward
  • The Idea:
    • Start by thinking about things and the way they are used
    • Describe things in terms of their responsibilities
    • Example: A car runs, carries people, ...
  • The Resulting Object-Oriented Paradigm:
    • Focus on understanding real-world concepts
    • This involves the natural combination of data and processes
There's Always More to Learn
Back -