Design
Experience Report
Group 9
This
document describes the group's experience using the various design techniques
we learned in CS-552. First, we describe how we applied each approach during
the development of our course project, a derivative of the well-known
Battleships game. Then, we discuss our opinions of the technique. Finally, we
analyze what we consider to be the pros and cons of each method.
Noun/Verb Analysis
Usage
At
the start of the project we did an extensive noun/verb analysis. We poured over
the game description and came up with several pages of potential domain
participants. Then, we eliminated the participants that did not seem useful or
we duplicated elsewhere in the analysis. This left us with a very large list of
domain members.
Opinion
This
technique was very helpful in creating a large domain. This gave us a lot of
ideas for our initial domain model. The members that were generated here
ultimately became our classes and objects. This technique shaped our entire
design and it forced the implementation to directly match the game concepts.
Technique Pros/Cons
This
technique is a good starting point to aid in determining what the domain will
be and is very helpful in broadening the domain. It ultimately has a
significant impact on the design direction.
Using
this technique can be a time consuming effort. A large number of the nouns and
verbs from our initial analysis were never used. It does not help to define
some of the internal classes that are needed to make the game work. At this stage,
most of the concepts are still very vague so it is hard to determine the
usefulness of each participant.
CRC Cards
Usage
We
did not use CRC cards in the development of our class project.
Opinion
CRC
Cards appear to be a very useful technique. We just learned about them too late
in the process to make effective use of them.
Technique Pros/Cons
This
technique appears to be very helpful for determining how the domain
participants will interact. It provides a way to communicate a vision of how
each of the use cases will function in practice. It also helps to locate some
domain participants that are more internal to the system, which may have not
been revealed during the noun/verb analysis.
Class Diagrams
Usage
We
made extensive use of class diagrams to develop a model of how our project
would look. We developed an initial class diagram that represented our domain.
Later, the model evolved into an implementation level diagram that was used to
begin developing the game engine. A final class diagram was created to use as
system documentation.
Opinion
Class
diagrams are a very useful technique. They should be considered a required tool
in object-oriented design and analysis. They really assisted us in the process
of coming up with a solid design that could be carried forth into
implementation.
Technique Pros/Cons
The
diagrams do a great job of defining how the components are related. They
provide a framework for how to think about the design. They also help
communicate the design to other designers and developers.
Class
diagrams do not provide much detail related to how the system will actually
work. The notation is a bit cumbersome to learn.
Use Cases
Usage
We
developed use cases at the beginning of the project to use as a guide in the
rest of the design process.
Opinion
The
use cases seemed to help initially determine how the system would work from the
user perspective. Knowing what the user needs was helpful in designing the
system. They we not particularly useful in the actual implementation. However,
they came back into use for the testing phase as a check to verify that the
final system matched the user expectations.
Technique Pros/Cons
Use
cases are a good tool for determining what the user expects from the system.
They are a good communication medium that ensures everyone has the same ideas
about what the system will do. They ultimately provide a good measurement tool
for determining how well the system meets the user's needs.
They
are not suited to determining, in detail, what the system will do in response
to a user interaction. The systems inner working are intentionally left out.
Robustness Analysis
Usage
We
drew up a robustness diagram for each use case.
Opinion
The
purpose of the robustness diagram is to bridge the gaps between class and
sequence diagrams. We have had previous experience with this transition and it
can be challenging. However, in this situation, we would have been more
comfortable going directly to sequence diagrams. We already had a good idea
about how we wanted to approach the system. Therefore, the robustness diagrams
were more of an exercise than a tool. We believe that there are many situations
when these diagrams can be very useful.
Technique Pros/Cons
This
technique is a good intermediate step between class and sequence diagrams. It
is particularly useful for large or complex class diagrams. The rules for
component interaction are useful for approaching the design. They force you to
think about aspects of the system that may not have been considered. These diagrams
are especially useful for determining what internal classes may be needed to
make the design function correctly.
The
notation is not intuitive. For smaller projects, they may not be as useful
because the designs are more straightforward.
Sequence Diagrams
Usage
We
mapped out a large number of processes using sequence diagrams. All of our use
cases and robustness diagrams had associated sequence diagrams.
Opinion
We
consider these diagrams another essential part of good object-oriented design.
They do an excellent job of communicating how objects interact. We found them
to be invaluable for hashing out the way the program would work and sharing
that information with multiple developers. This way everyone has a solid
understanding of how the system will function before beginning coding.
Technique Pros/Cons
Defining
how the objects communicate is an important step that the sequence diagram
handles well. It illustrates important information about how the program will
work. As with other design tools, it provides a good framework for determining
how the system should be set up.
This
is strictly a development tool. The notation is likely too complex for use with
clients. It also does not necessarily describe what each message will need to
do. You need to get to pseudo-code level to get a real idea of what each
message does.
Design Patterns
Usage
We
made use of Design Patterns whenever possible in our application. There are
several instances of the Singleton and Observer patterns.
Opinion
We
found the design patterns to be a very important. Knowing about the available
patterns before undertaking the project helped us incorporate them into our
project when they made sense. Unfortunately, we were only aware of a handful of
patterns and only intimately familiar with two patterns. This meant that there
might have been other opportunities to take advantage of patterns that we did
not consider.
Technique Pros/Cons
Having
a good understanding of the various design patterns helps ensure that you do
not spend time trying to solve problems that have already been solved. They
provide a cookbook of typical solutions that have been applied in many
situations.
The
downfall is that you really need to know about them in advance. The only way to
know about them is study each pattern in some detail. You never know if there
is a perfectly suitable pattern that you either do not know about or cannot
locate.
Last Updated: 05/08/2002 16:46:10 pm