From: rmartin@thor.Rational.COM (Bob Martin)
Subject: Re: How About Using Bootch for Analysis?
Organization: Rational
Date: Fri, 29 Jan 1993 00:14:36 GMT

mmaccorm@fox.nstn.ns.ca (Mike Mac Cormack) writes:

>1) Can you use Bootch for both analysis and design?  The first 3 steps of 
>his method are almost identical to Coad/Yourdon's OOA.

The Booch notation and method are extremely well suited to OOA and OOD
both.  However, the important thing is to understand what OOA and OOD
are.

Analysis (Structured or OO) is the practice of converting a
requirements document into a functional specification.  A requirements
document is a list of behaviors required of the software product.
Such a document is necessarily incomplete and even contradictory.  A
functional specification is a detailed, precise and unambiguous
statement of the behaviors of the software product.  (At least that's
what it's supposed to be! :-)

OOA is the exploration of the *behavior* of the software product.
(Which objects send what messages to which other objects and when)  OOD
is the exploration of the static structure of the system (Who inherits
from who, who contains who, who uses who) and how that static
structure can be inserted into a physical environment (Multiple
processors, operating systems, etc.)

Both of these tasks take place concurrently.  Although we start out
doing mostly analysis type activities, we very rapidly begin doing
some design like activities.  As the development progresses we slowly
transition the ratio of analysis like activity to design like
activity.  Thus, although OOA and OOD are different, there is no clear
dividing line between them.  Instead there is a continuum between
them.  It's like a spectrum, although Red is different from Orange,
there is no clear dividing line between them.

The Booch notation is peculiarly adept at both the analysis parts and
the design parts of this activity.  This is becuase it put equal
weight on the dynamic and static modeling techniques.  Interestingly
enough, many of the so-called OOA notations do not support *any*
dynamic modeling, and so are not analysis tools at all.  They are more
design like.

In the Booch notation, object diagrams are used to map out the flow of
messages between objects.  This is a very important analysis activity.
It is one of the best ways to identify what objects are in the model,
and how they interact with each other.  Objects can't evolve in a
vacuum.  They most evolve based on their association with other
objects.  Thus, using the dynamic modelling provided by Booch's
object diagrams turns out to be an excellent way to model and evolve
objects.

Static modeling is also very important.  The static model describes
the structure and relationships of your classes.  This is the
progenitor of code.  Static structure cannot be developed in the
absence of a dynamic model.  You have to know who your objects talk to
in order to design the relationships between your classes.  

Booch's class diagrams are probably the most expressive notation
(aside from code itself) for capturing the details of static
structure.  They can start out abstract and incomplete.  As time goes
on they can be fleshed out with many many adornments to capture design
details at both the high and low levels.

While static structure is driven by the behavioral model, it also has
a profound effect upon it.  Often you will alter your static model to
deal with one requirment, and this will force you to change your
dynamic model in another part of the design.  

When you are done, you wind up with a static model which supports a
dynamic model.  The dynamic model is a set of behaviors which
implements the behaviors from the requirements document.  So you have
a clear path from the requirments document to the static structure.
And it is the static structure that drives the most important aspects
of the code.  

>3) How about using Coad/Yourdon for analysis and Bootch for design?  

One of the most significant disadvantages to Structured analysis and
design is that they use different notations.  This forces a
translation between analysis and design.  This keeps analysis and
design separate.  And they belong together.

I strongly recommend that you use the same notation for analysis and
design, and that you not separate your project into analysis and
design phases.  Keep the analysis and design together, and even
sprinkle a little coding in for good measure.  Do not manage your
project in phases (Analysis, Design, Code, Test) etc.  Instead manage
the project by slicing the project vertically in to the completion of
several features or behaviors of the project.  Each vertical slice
will require its own analysis, design, implementation and testing.
When each vertical slice is done, you can use the knowledge gained
about schedule and technology to help manage and complete the next
one.

--
Robert Martin       | Design Consulting    | Training courses offered:
R. C. M. Consulting | rmartin@rational.com |  Object Oriented Analysis
2080 Cranbrook Rd.  | Tel: (708) 918-1004  |  Object Oriented Design
Green Oaks, Il 60048| Fax: (708) 918-1023  |  C++