JMU
Software Design
An Introduction


Prof. David Bernstein
James Madison University

Computer Science Department
bernstdh@jmu.edu


Software Design
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

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

Examples of Bad Software Design
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.)
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
Systems
Systems (cont.)
Product Design and Engineering Design
Design is Problem Solving
Data-Driven Problem Solving
  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
  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