 |
|
Systems Home |
Introduction |
Needs Assessment |
Requirements Specification |
Requirements Analysis |
Preliminary Design |
Detailed Design |
Implementation |
Testing
Systems Development: Requirements, Design, Implementation, Testing
Preliminary Design
What is Design? Good Design? Bad Design
We have finally completed our requirements phase and are starting the design phase. Note we split this phase into two sub-phases: preliminary and detailed design.
Design answers the "how" question, namely "How will the system meet its specified requirements?" We know (or should know) what the system must do. Now we worry about how to do it.
Even small projects typically separate the upper and lower level design into different phases. The first phase, preliminary design, is concerned with the overall system architecture. Software subsystems tend to use object oriented principles. Thus we need to determine:
- What objects compose each subsystem.
- How objects interact with each other to carry out transactions.
Thus we concentrate on class and sequence diagrams during preliminary design.
This is our opportunity to set the whole tone of the system, too. In the preliminary sub-phase, we have the opportunity to re-arrange objects and associated responsibilities to impact how easy (or difficult) it will be to add new functions, repair defective functions, or remove unwanted functions from the system over time. So it's not enough to have a design: we need a good design to help us evolve the system over time.
And remember: the better our design, the more people want to use the system. The more people use the system, the more they want to change it. And the more they change it, the more successful the system is!
Process Activities
In our requirements analysis sub-phase, we resolved conflicts among the requirements themselves. We decomposed the system into subsystems, determined data flows among subsystems, and generated use cases (or transaction scenarios). After establishing the top-level interfaces and responsbilities, we can assign functions to objects and analyze transactions:
Develop Class Diagrams: In an object oriented design, attributes (or data) and methods (or functions) are assigned to classes which become objects. We need to diagram the relation of classes to each other and identify their roles and responsibilities.
Draw Sequence Diagrams: Use case transactions are at the system level, perhaps among subsystems. But we implement transactions by calling object methods and passing parameter data. We use sequence diagrams to evaluate the dependencies, events, and interfaces of our system's transactions.
Build Project Trace Matrix: Since requirements answer the "what" question and design answers the "how" question, we need to document which design elements correspond to which transactions. For each design element, we need to document its associated requirement identifier.
Exercise
We mentioned earlier incorrect or missing requirements cause 50% of all system errors. We will start to see ripple effects of these latent (unseen) errors as we engage in design. Pay particular attention to the assignment tasks. Do the work requested well, but do not perform extra, needless work.
For demonstration purposes, here is sample design document. Some, but not all, parts are examples of preliminary design activities:
Study Guides
Use the following study guides to focus concepts from the readings:
Lecture Slides
Here are copies of the lecture slides presented during class:
Readings
As before, each of the listed links will open in a new browser window:
| Concept |
Notes |
Links |
| Definitions |
Here are some basic articles about object oriented analysis, OO design, and traceability. These concepts are fundamental to this unit. |
Object Oriented Analysis: A Wikipedia article.
Object Oriented Design: A Wikipedia article.
Traceability: A Wikipedia article. |
| Good Design |
Here are several suggested readings that try to answer the question, "What is good software design?" |
Quality With a Name: James Shore. Anecdotal paper starts with early devlopment environments that hampered proper design. The paper then goes on to define both good AND great design.
The Top 10 Elements of Good Design: Hacknot. Like David Letterman, this starts with element number ten and counts down to element number one.
|
| Bad Design |
Sometimes we can learn more about a topic by studying its complete opposite: |
Most Software Stinks: Charles Connell. The author says we would never buy houses built as poorly as most software. He then explains what is missing in many software designs.
Design For People At Work: Sarah Kuhn. The article starts with three case histories of software projects gone wrong. The premise is we must design software that takes into account how people work. Failure to do so results in failure.
|
| Class Diagrams |
The cornerstone of object oriented design, these diagrams are static representations of the classes that compose a system, their assigned attributes and methods, and the relation between classes. |
Class diagram: A Wikipedia article.
Class Diagrams: Braun, Sivils, Shapiro, Versteegh, Kennesaw State University. A basic tutorial on how to draw a class diagram.
Class Diagrams: James Martin. Part 1 of a UML Tutorial from Object Mentor.
Class Diagrams: Lee Copeland. This tutorial presents several questions to ask about a class diagram's quality.
|
| Sequence Diagrams |
While class diagrams are static, sequence diagrams are dynamic: they illustrate how a transaction engages several objects over time. |
Sequence diagram: A Wikipedia article.
Interaction Diagrams: Braun, Sivils, Shapiro, Versteegh, Kennesaw State University. Technically speaking, there are two types of interaction diagrams in UML: sequence diagrams and collaboration diagrams. We worry about the later during detailed design.
Sequence Diagrams: James Martin. Another of a UML Tutorial from Object Mentor.
Seqeunce Diagrams: Lee Copeland. A similar tutorial, this time on sequence diagrams.
|
| Trace Matrix |
A trace matrix is nothing more then a specialized use of a table. Here are some definitions and an example. |
Traceability matrix: A Wikipedia article.
Requirements Traceability Matrix: Jet Propulsion Laboratory.An example matrix that maps requirements to design and testing.
|
| Tools |
It can be difficult to draw UML diagrams by hand. Here are free tools to help. |
Dia: Free software from the same people who developed the Gnome interface for Linux.
Violet: Cay Horstmann's free diagram editor. Written in Java. Runs on anything: Linux, Mac, Windows.
UMLet: Another Java based UML diagram tool.
UML Sequence Diagram Generator: Steve Hanov's addicting, web-based diagramming tool. No software installation! This rocks!
|
Systems Home |
Introduction |
Needs Assessment |
Requirements Specification |
Requirements Analysis |
Preliminary Design |
Detailed Design |
Implementation |
Testing
|