Man is a tool-using animal. ... Without tools he
is nothing, with tools he is all.
Thomas Carlyle, Sartor Resartus, Book I,
Chapter 4

A.1 THE BACKGROUND OF AUTOMATED TOOLS
An automated tool can be defined as
anything that replaces manual work on the part of the
computer programmer, the systems analyst, or even the
end user who must somehow communicate his or her requirements
to a systems development team. Thus, there are many
things that could be regarded as tools:
-
High-level programming languages,
ranging from COBOL and Pascal, to the current fourth
generation languages that allow the programmer to
use high-level, English-like statements that are
automatically translated into the low-level, primitive
instructions that the computer understands.
-
Cross-reference listings,
“pretty-print” programs, and other utility
programs that provide the programmer with ancillary,
static information about his or her program.
-
Testing tools, debugging
tools, simulators, and the like, that provide
the programmer with information about the dynamic
behavior of his or her program as it is running.
Testing tools help the programmer create a wide
variety of test cases to ensure that a program is
well-tested. Debugging tools help the programmer
track down errors once he or she knows that something
has gone wrong. Simulators provide the programmer
with a more visual, graphic representation of the
execution of the program, for example, by showing
the program as a flowchart on a computer display
screen, and simulating the behavior of the program
as it executes by showing the flow of control through
the flowchart.
-
Desktop PCs and mainframes,
which replace “dumb” terminals and batch
development enviroments. This battle was fought
and won years ago in most software organizations,
but it is important to realize that the time-sharing
terminal is a tool. Prior to the 1980s, programmers
in most organizations had to write their programs,
manually, on large coding pads; the program statements
were then keypunched on cards and then fed into
the computer in the middle of the night. If something
was wrong (e.g., because the programmer wrote a
syntactically incorrect statement)an error report
would be waiting for the programmer the next morning.
And the cycle would begin anew. This practice has
long since disappeared in most organizations: a
programmer now types his or her program directly
into a desktop workstation, which often shares project-related
information with hundreds of other programmers and/or
end users. The program can be checked for syntactic
correctness on the spot, and the programmer can
test and debug his program on the spot. Today, it
is hard to imagine any other environment.
-
Source code control packages
that prevent the programmer from making unauthorized
changes to official versions of a program in the
middle of the night. In a large programming project,
one of the difficulties is configuration management:
making sure that there is a firm control over the
various pieces of the final system. Each programmer
works on her or his own piece and may need dozens
of revisions to that piece before it is finished.
But that piece interacts with similar pieces being
worked on by a dozen other programmers. Unless everyone
knows which version of which piece is to be considered
the official version, anarchy prevails. A source
code control package is like an automated librarian:
it prevents unauthorized withdrawal of or tampering
with official documents.
-
Systems analysis and design
workbenches. The tools described above are
concerned primarily with the job of writing programs
(i.e., deciding what COBOL statements are required
to solve a well-defined problem). But that is not
where we have the major difficulty in building a
software system. The real problem is in the early
stages of systems analysis (figuring out what the
system should do) and design (figuring out what
the overall architecture of the system should be).
Now we are beginning to see tools that provide assistance
to the systems analysts and systems designers.
Most of the tools described above have
been available for the past 10 to 15 years and many
are widely used in IT organizations. The analyst/designer
workbenches, on the other hand, are newer and less widely
deployed. It is these tools, in my opinion, that have
the potential of helping to dramatically improve the
quality and effectiveness of the structured analysis
concepts described in this book.
As we have seen throughout this book, successful systems
analysis relies heavily on models of a system that is
to be computerized. The analyst/designer workbench tools
are primarily concerned with the effective development
of those models, for example, they help the systems
analyst construct graphical diagrams that enable the
end user to understand what the system will do for him.
The workbenches also help the analyst and designer ensure
that the model is complete, accurate, and consistent,
so the errors discovered downstream in the programming
phase will be only programming errors, and not a reflection
of an ongoing misunderstanding between the end user
and the systems analyst. [1] And, finally,
the workbenches may assist the programmer in translating
the model into a working program. In the future, we
may expect the workbenches to completely automate this
process.
Analyst/designer tools began to appear late 1970s and
early 1980s, but most organizations ignored them, for
they were not very powerful, not by the mainframe standards
by which they judged computer power. A sufficiently
high-power workstation capable of helping the analyst/designer
with his or her software engineering models would have
cost $50,000 to $100,000 in the early 1980s, and that
was simply out of the question for most IT organizations.
Only a very few organizations with enormous projects
and enormous budgets could even consider such an expenditure;
and then the most one could hope for was one workstation
for an entire department of hundreds of people. Some
early workstations were developed in aerospace companies,
defense contractors, and manufacturers of sophisticated
computer graphics workstations, but the mainstream IT
community studiously ignored the concept.
By the mid-1980s, things had begun to change. Powerful
personal computers, with high-resolution graphics and
adequate storage capacity, had dropped below a magical
price barrier of $10,000. [2] Some
of these were engineering-oriented workstations made
by aggressive new computer companies like Apollo Computer
and Sun Computer; but most were customized configurations
of IBM’s immensely popular personal computer.
By providing an open architecture, IBM made it possible
for anyone to build a special-purpose configuration
to suit his or her own needs. Thus, the software tool
industry could construct a powerful workstation consisting
of an IBM PC chassis, a graphics board from vendor A,
additional memory from vendor B, and a high-resolution
display screen from vendor C.
This ability to construct a powerful workstation that
says IBM on the front was crucially important in the
marketplace. The political reality is that in business
organizations — banks, insurance agencies, and
the nonmilitary government agencies — the personal
computer must say IBM on the front panel; this is, unfortunately,
more important than technological superiority of the
hardware. Engineering and scientific organizations don’t
care as much whose computer they use (though many of
them would prefer that any personal computer they buy
look like a DEC VAX computer), and defense contractors
don’t care what kind of computer they use, as
long as its cost can be included in the government contract.
There are now numerous companies in the United States
and Europe building automated development tools —
often known as CASE tools, for Computer-Aided Software
Engineering — to assist the systems analyst and
designer. Most of the products run on IBM PCs, though
a few of the vendors have chosen the Apple Macintosh
or UNIX-based workstations. Virtually all the products
provide the user with a palette of icons (shapes that
can be used to create drawings) and a “mouse”
with which to select the icons. This may be familiar
to you if you have used such graphics programs as Visio
on IBM PCs. However, the analyst workstation products
are far more; they understand the subject matter of
the drawings. And, as we will see below, they have many
features not found on simple drawing programs.
A.2 IMPORTANT FEATURES IN AUTOMATED
TOOLS
It is easy to think of automated workbenches for systems
analysts and designers as nothing more than “electronic
etch-a-sketch” products. It is certainly true
that the graphics capability of these products is the
most visible and the most “sexy,” but it
is only one of the important features. The workbenches
must provide the following features to be of significant
use in the development of a complex system:
- Graphics support for multiple types of models
- Error-checking features to ensure model accuracy
- Cross-checking of different models
- Additional software engineering support
A.2.1 Graphics Support
As we have seen throughout this book, structured analysis
models rely on various forms of information: text, data
dictionaries, and graphical diagrams. Text and data
dictionaries can be automated using word-processing
systems and conventional mainframe computers; it is
the graphics support that has always been lacking. The
systems analyst needs a workstation that will allow
him to compose, revise, and store the following kinds
of diagrams:
- Dataflow diagrams (DFD)
- Structure charts (SC)
- Flowcharts (FC)
- Entity-relationship diagrams (ERD)
- State-transition diagrams (STD)
Thus, an analyst workbench might allow the systems
analyst to compose the DFD shown in Figure A.1(a).

Figure A.1(a): A typical DFD.
The computer display screen that the systems analyst
looks at while composing such a diagram is shown in
Figure A.1(b).

Figure A.1(b): A typical analyst workstation
screen
I should point out that I composed
this diagram using an “intelligent” drawing
program called Top-Down on the Apple Macintosh computer
that I used to write this book. [3]
It took me 15 minutes to compose the diagram and another
30 seconds to copy it directly into the text of this
chapter. I could have drawn the diagram by hand in 3
minutes, and I could have pasted it into the chapter,
using scissors and tape, in about 30 seconds. The benefit
of graphics support clearly does not come from the initial
drawing of the diagram; it comes instead from the ease
of modification.
In a typical systems development project, a diagram
like Figure A.1 might be modified a dozen times. Indeed,
one systems analyst at Tektronix told me that he and
the end user had modified a DFD like Figure A.1 over
a hundred times before they finally agreed that it was
an accurate model of the user’s requirements.
[4] Nobody in his right mind would
consider redrawing a diagram manually a hundred times;
however, making a small change to a diagram on the computer
display screen usually takes only a minute or so. Some
early results from the Hartford Insurance Group, which
installed overr 600 workstations for their systems developers,
indicate as much as a 40% improvement in productivity
just because of the automated graphics support (see
[Crawford, 1985]).
I should also emphasize that general-purpose graphics
programs like Top-Down or Canvas (on the Macintosh)
or Visio (on the IBM PC) are not really adequate for
the software engineer. To build formal software engineering
models, we must first decide what icons, or graphical
symbols, will be allowed. We must then define rules
that define the properties of the icons and the legal
connections between icons. Figure A.1, for example,
uses the four icons associated with a standard DFD:
a circle, a rectangle, a notation for a data store,
and a line showing the flow of data from one place to
another. Top-Down, however, would have happily allowed
me to include triangles, hexagons, and any other graphic
representation on the diagram.
A.2.2 Error-Checking Features
Though graphics support is clearly necessary, it is
by no means enough to justify the expense of an expensive
“analyst workbench” tool. An analyst workbench
must examine the model created by the systems analyst
or designer to ensure that it is complete and internally
consistent. Figure A.1, for example, could be analyzed
in the following way:
-
Are all the icons connected?
Are there any free-standing data stores or process
bubbles floating around on the diagram, with no
inputs and no outputs?
-
Does each process bubble have
at least one output? If not, it is a suspicious
black hole that gobbles up data but never produces
any output.
-
Are all the dataflows (the named
lines connecting the boxes and bubbles) named? Do
all the names exist in a data dictionary?
-
Do all the processes (the bubbles)
have unique names?
Similar error-checking can be done
on SCs, FCs, ERDs, and STDs. And the error-checking
can be extended to different levels of modeling. Figure
A.1, for example, might be a low-level subsystem represented
by a single bubble (bubble number 1) in a higher-level
accounting system modeled in Figure A.2.

Figure A.2: A higher-level DFD.
The analyst workbench should ensure
that the inputs and outputs shown in Figure A.1 match
those shown for bubble 1 in Figure A.2. If they do not
match, the model is inconsistent, and there will be
hell to pay weeks later (or months later) when someone
tries to translate the graphical model into COBOL. The
same kind of balancing can be applied to several other
graphical models that provide a top-down view of a system.
A.2.3 Cross-Checking of Different
Models
The most important feature of an analyst/designer workbench
is its ability to cross-check the consistency of several
different types of models of a system. There are two
aspects of this: cross-checking different models in
one phase of a project and cross-checking different
models at different phases of a project.
In the systems analysis phase of a project, for example,
the primary objective is to determine what the user
wants from the system, with little or no reference to
the particular computer technology that will be used
to implement those requirements. To do this, we need
DFDs to highlight the division of those requirements
into separate functions and the interface between the
functions. We need ERDs to highlight the objects of
stored data in the system and the relationship between
the objects. And we need STDs to highlight the states
in which the system may find itself and the time-dependent
behavior of the system. In addition, we use a data dicary
to maintain a definition of all the data elements in
the system and some form of textual description to define
the formal business policy for each bottom-level function
in the system.
The key point is that all these models must be consistent
with one another. If the DFD refers to a data element
that is not in the data dictionary, something is wrong;
if the data dictionary defines data elements that do
not appear in any other model, something is wrong. If
the DFD shows data stores that are not defined in the
ERD, there is an inconsistency; and if the ERD shows
objects that are not defined in the data dictionary
and not shown in a DFD, there is an inconsistency. As
we discussed in Chapter 14, all this cross-checking
could be done manually, but it is a tedious, error-prone
process at best. My several years of experience with
software engineering in typical IT environments allows
me to say with some confidence (unfortunately) that
it will not be done manually, despite the exhortations
of project managers and the best intentions of the technicians.
In addition to consistency checking between models in
one phase of a project, it is important to compare the
models developed during different phases. For example,
the models developed during the analysis phase should
be compared with the models developed during the design
phase. This comparison should demonstrate a one-to-one
correspondence between the two: every requirement described
in the analysis model (i.e., the DFDs, ERDs, etc.) should
be represented somewhere in the design model (i.e.,
the SCs, etc.), and every feature described in the design
model should correspond to a requirement described somewhere
in the analysis model. The most common problem, of course,
is that a requirement in the analysis model gets dropped
and doesn’t show up anywhere in the design model.
This is particularly common when the systems analysis
model is developed by one group of people, and the design
model (and subsequent coding and testing) is developed
by a separate group. In the extreme case (which often
occurs on government projects), the two groups may work
for different companies. In any case, the two groups
often represent different interests and perspectives,
and they may not communicate well with each other on
any level. Hence a requirement that the analysis team
thought was perfectly clear may not be understandable
to the design team.
Sometimes the problem is just the opposite of the above:
the design team decides to introduce features that were
never requested by the user and never documented in
the analysis model. This may happen innocently, but
it usually occurs when someone on the design team says,
“Even though they didn’t ask for it, I’ll
bet the users will really love this feature.”
Or the veteran, slightly cynical, designer says, “Even
though the users didn’t request feature X today,
I know from past experience that they’ll want
it next week. It’s easier to put it in now than
to wait for them to ask for it.” Whether or not
this is reasonable is beside the point. The important
thing is to get this discussion out in the open, rather
than letting the designer make a unilateral decision.
In the same way, the design model should be compared
against the actual code. Again, there should be a one-to-one
relationship between components of the code (the actual
implementation of the analysis and design models) and
components of the design model.
A.3 ADVANCED FEATURES OF AUTOMATED
TOOLS
The features described above constitute the “basic”
features required to make an analayst/designer tool
useful in a real-world project. On the more advanced,
sophisticated tool, you should expect to find one or
more of the following features:
- Networks for project-wide use
- Customized software engineering methodology support
- Document control
- Project management facilities
- Productivity statistics and software metrics
- Early checking for excessive complexity
- Automated testing and simulation
- Computer-assisted proof of correctness
- Code generation
- AI support of reusable code
- Project team “blackboards”
A.3.1 Networks for Project-Wide
Use
Automated tools are useful even on small, one-person
projects; so is software engineering. But a small project
has the advantage that the work can be done over and
over again until it is right so that the use of formal
models and formal tools does not have much of a sense
of urgency.
Automated tools will be of most use on the large, multiperson,
multiyear, multimillion dollar software development
project. In projects of this kind, there are several
systems analysts (often a dozen or more), several end
users (often in different geographical locations), and
several designers and programmers. In this kind of environment,
it is important not only that the work of each systems
analyst be internally consistent, but also that the
work of analyst A and analyst B be consistent with one
another.
This means that there has to be a level of intelligence
above that of the individual systems analyst or programmer.
Though there are many ways of implementing this, one
of the more attractive architectures is shown in Figure
A.3. Several vendors listed in Table A.1 are working
to provide this kind of architecture, typically using
commercial database packages (e.g., Oracle) to implement
the “project repository” of models and data
definitions.
The project-level server should have enough storage
capacity and enough processing power to carry out project-wide
consistency checking. It should also have enough power
to perform additional functions. It should allow the
programmers to connect directly to the organization’s
mainframe for testing and other normal duties. And it
is the obvious place to put the intelligence associated
with many of the functions described next.

Figure A.3: A project-level analyst/designer
workbench.
The addition of such a storage, together
with associated disk storage, communication channels,
and so on, obviously increases the cost of automated
support. It is a worthwhile investment, but it typically
cannot be funded out of a single year’s operating
budget for a large IT staff; it could easily cost over
a million dollars for an organization with a few hundred
system developers. It must be recognized as part of
a capital investment in the effort to make the staff
more productive and more professional.
A.3.2 Customized Software Engineering
Methodology Support
The automated tool usually supports a specific form
of software engineering notation and procedures. The
diagrams in this appendix, for example, as well as the
earlier ones throughout this book, use the notation
described in several YOURDON Press textbooks. Surprise!
But several CASE products also support other popular
software engineering methodologies, such as the Gane/Sarson
notation as well as the Warnier/Orr notation. Several
of the other automated support tools currently available
also support more than one brand of software engineering
methodology.
But there is something much more important than just
supporting the methodology of vendor A or vendor B:
the automated tool should allow for a customized methodology.
An IT organization will almost always find that any
of the popular software engineering methodologies fails
to provide an adequate notation or adequate set of guidelines
for the peculiar kind of system it is developing. Perhaps,
for example, the IT organization feels strongly that
it wants to use triangles to emphasize inputs and outputs
from Martians and Captain Kirk’s Star Trek explorers
(most of us don’t have to worry about such inputs
and outputs, so it’s never occurred to us to ask
for triangles on our automated tool). And maybe the
IT organization has decided to pass an edict that no
dataflow diagram will have more that 13 (a baker’s
dozen) bubbles on it; another organization may decide
that no system should have more than three levels of
dataflow diagram. And so forth.
Clearly, this kind of customization must be allowed
or the tool will gradually fall into disuse as system
developers find that it does not meet their needs. Most
of the current automated tools do not have this facility;
virtually all second-generation products will have such
a feature or they will disappear from the marketplace.
A.3.3 Document Control
As we have seen, structured analysis relies on a number
of formal graphical models, supported by such textual
materials as data dictionaries and process specifications;
the workstations automate the development and maintenance
of these documents. However, they permit something else:
the control of the documents. While this may seem straightforward,
it is a radical concept for most IT organizations. Many
of them have only recently begun to control the source
code that is produced in the programming phase of the
project. [5]
But just as it is disastrous to allow a programmer to
make a “teeny-weeny” change to an operational
computer program in the middle of the night, so it is
equally disastrous to allow a systems analyst to make
a “teeny-weeny” change to a DFD or ERD in
the middle of the systems analysis phase of a project,
unless that change has been authorized and approved.
To make this work, we must distinguish between the private
libraries that each project member maintains on his
or her stand-alone workstation and the project file
maintained on the project-level minicomputer shown in
Figure A.3. It is the project file that we want to control.
Once a systems analyst or designer has indicated that
he has finished a model (or diagram) and is ready to
submit it to the project file, the analyst is no longer
the unilateral owner of the material.
A.3.4 Project Management
Document control is one aspect of another feature that
can be provided by a project-level server: project management.
The project manager can have his or her own workstation
and can use the facilities of the server to coordinate,
administrate and supervise the activities of the project
team. With appropriate software support, he can make
sure that he knows when analyst A finishes the DFD he
was working on; he can instruct the server to send that
DFD to analyst B for review and comments; he can then
assign another piece of work to analyst A. He can use
all of this material to update his project schedule
and budget; and since the server keeps its own neutral
record of when analyst A began and finished his DFD,
he is likely to get much more accurate, unbiased input
for his project scheduling activities. It may be difficult
to provide a hard estimate of the value of such a facility,
but most project teams will find that it is a feature
that they cannot live without once it is given to them.
A.3.5 Productivity Statistics
and Software Metrics
As mentioned above, the project minicomputer can keep
its own record of the starting date and ending date
of each piece of work (the development of a DFD, the
revision of the DFD, the walkthrough of the DFD, etc.)
that a systems analyst or designer or programmer carries
out. Thus, productivity measures can be generated almost
invisibly, which will hopefully lessen the impact of
the Heisenberg uncertainty principle. [6]
Compare this to the typical software development project
today, where programmers and systems analysts spend
an hour or so each week recording information about
how they spent their time. There is a barely disguised
tendency to fill out the form to make it look the way
the boss wants it to (programmers may be rascals and
charlatans, but they are not entirely out of touch with
reality!). Also, if the recording process takes an hour,
then it is interfering with the work itself; this is
a form of what nuclear physicists call the Heisenberg
uncertainty principle.
Almost any other software metrics that the project team
decides to keep track of can be carried out by the project
level minicomputer. Thus, the project team may decide
that it is important to know how many DFDs are required
for the system, or how many data elements, or how many
functional primitives, or how many revisions were required
of a DFD before it was finally accepted by the user.
This information may be useful for future projects;
it may also be useful for estimates of project size
and cost.
A.3.6 Early Checking for Excessive
Complexity
One of the most useful metrics in the long term is that
of complexity. There are mathematical models of program
complexity that can be used to predict the difficulty
of testing and maintaining a computer program. [7]
If the mathematical models are applied automatically
to every module or program in the system being developed,
then the developers and the project manager will have
an early warning of potentially dangerous portions of
the system; alternative designs can then be explored.
A.3.7 Computer-Assisted Testing
and Simulation
As mentioned earlier in this appendix, there are already
computer-assisted testing packages and animators that
provide the programmer with a graphical representation
of the execution of her or his program. There is no
reason why that intelligence could not be put into the
remote workstation or the project-level minicomputer.
Indeed, almost all the conventional program support
tools listed at the beginning of this appendix could
be incorporated into the automated workbench. As personal
workstations become more powerful, it should be possible
for the programmer to follow up the modeling process
with actual writing of code (if it can’t be generated
automatically), as well as compilation and testing.
Only when the program is finished should the programmer
need to upload it to the project-level minicomputer.
A.3.8 Computer-Assisted Proof
of Correctness
As we discussed in Chapter 23, the field of computer-assisted
proofs of correctness is still not developed to the
point where average programmers and systems analysts
can make use of it. But there is a wide spectrum between
informal consistency checking and formal proofs of correctness.
With automated support tools, we will gradually find
that we move further and further away from informal
consistency checking and closer and closer to complete,
formal proofs of correctness. To accomplish this will
require a higher level of training and sophistication
on the part of the programmer than can be expected today.
Hence, we should not expect to see this feature in most
business-oriented workstations for another 5 years.
A.3.9 Code Generation
A major goal of many tool builders is the automated
generation of COBOL, C, Visual Basic, or Java code by
the workbenches. Thus, nobody would ever have to look
at the code, just as today hardly anyone looks at the
binary 1s and 0s that the computer hardware actually
understands. In this context, we would be dealing with
computable specifications, developed by the end user
and the systems analyst.
We may never be able to achieve this for all systems,
nor will we be able to insist on the necessary level
of formal, rigorous specification from all end users.
But by putting more and more emphasis on the analysis
and design activities, we can easily reduce programming
to a simple clerical activity. Even if we can’t
completely automate it, we can arrange for the majority
of it to be carried out by junior clerks, rather than
Computer Science graduates earning astronomical salaries.
A.3.10 AI Support of Reusable
Code
Far more appealing than the concept of automated code
generation is the concept of reusable code. In the vast
majority of projects (business-oriented and scientific/engineering-oriented)
most of the software we intend to develop has already
been done before. This year’s brand-new system
is, in fact, almost like last year’s system, and
not too different than the one before that. And most
of the bottom-level functional primitives have been
programmed before hundreds of times and exist free as
library routines supplied as part of the vendor’s
operating system. The only thing that distinguishes
this year’s brand-new system as unique is the
particular combination of those previously implemented
functions, or some parameters that can be fed into the
program when it begins running. For example, this year’s
payroll system is basically the same as last year’s,
but the FICA tax rate has changed.
This suggests that the systems analyst (and even more
so the systems designer) should not look upon each new
project as a grand experiment in scientific exploration,
but rather a scavenger hunt to see which existing library
modules, subroutines, and programs can be connected
together to satisfy the user’s needs.
This is where artificial intelligence could come in
handy. By matching the characteristics of a function
identified by the systems analyst (e.g., number of inputs,
nature of outputs, and transformation specifications
or the rules that describe how inputs are turned into
outputs, etc.) with an existing library of implemented
functions, an expert system could suggest to the designer
a number of potential candidates to be used to implement
the system. And it could interact with the systems analyst
to show him that by making a small change to the requirements
(i.e., by compromising the user’s original requirements
a little bit) an existing library function could be
used in situ.
A.3.11 Project Team Blackboards
Some of the leading researchers feel that the real productivity
improvements will come from the synergistic effects
of a project team rather than the individual; this is
because today’s large systems are not built by
individuals, but rather by groups of groups of people
(often in different companies). Most of the concepts
described thus far concern the improved productivity
of an individual worker, but the intelligence of the
project-level server could be used to provide a convenient
project-level view of an entire system as it gradually
takes shape and grows.
More important, we are beginning to see the emergence
of a number of “groupware” tools to support
collaboration among knowledge workers of all kinds.
Some of these tools are outgrowths of popular e-mail
packages like Lotus Notes; others are based on more
of a free-form document- and idea-sharing approach using
the Internet and World Wide Web; some of the newer ones
support video-conferencing, shared-document markup and
annotation features, etc. To the extent that these tools
can be incorporated into a software engineering environment,
they are almost certain to increase the productivity
of the development team.
A.4 CONCLUSION
My bias and excitement for this aspect of software development
is obvious. Some managers will say that this technology
is too expensive, that no programmer is worth the investment
that would be required. Perhaps not; but since hardware
is getting cheaper all the time, today’s $25,000
hardware investment is tomorrow's $10,000 and next year’s
$5000.
However, a software profession dominated by automated
workstations and CASE tools does raise some interesting
questions: Does it make programmers obsolete? Will it
destroy our creativity? Can we afford the cost? And
does it guarantee that we will make dramatic improvements
in our ability to produce high-quality software more
productively?
There is nothing magical about automated software tools;
anyone with common sense can answer these questions.
Automated tools will certainly not make programmers
obsolete in the short term and will not make maintenance
programmers obsolete for the foreseeable future. In
the meantime, it should help de-emphasize the business
of programming, which will continue a trend that has
been in motion since the first high-level language was
invented in the late 1950s. It does not threaten the
job of any programmer; it simply means that programmers
will spend more time on design and analysis tasks than
low-level coding tasks.
Will an automated workstation destroy the creativity
of software developers? Bah! Humbug! Do CAD/CAM (computer-aided
design) systems destroy the ability of a designer to
design an esthetically beautiful automobile or airplane?
No! A hundred times: No, no, no! Quite the contrary.
The availability of automated support tools helps the
programmer and systems analyst concentrate on the truly
creative part of the job and spend less time worrying
about the mundane parts of the job. Since an analyst
workbench allows the systems analyst to spend more time
inventing more models of the user’s requirements,
it makes him or her more creative.
Can we afford the cost of these workstations? The simple
answer is this: we cannot afford the cost of not using
these workstations! Keep in mind that the cost of a
sophisticated workstation, assuming that we include
the project-level server support, has already dropped
from a price-tag of about $25,000 in the early 1990s
to a figure well below $10,000 in the early part of
the 21st century. Even in the early 1990s, the cost
of automated support tools was no more than the annual
salary of a typical computer programmer with one to
two years of experience. If one includes the overhead
cost (insurance, pension benefits of 100%), that cost
represented about six months of the “fully loaded”
cost of an average software developer. Since we can
easily justify amortizing the cost of the hardware and
associated software over 3 years, the cost was roughly
equal to 15% of an developer’s annual cost. In
other words, if it increased the software developer’s
productivity by 15% each year, it paid for itself. And
now, several years later, the cost of the technology
has decreased, and the average salary of developers
has increased; the economic argument becomes easier
and easier.
But does an automated software development workbench
guarantee to improve productivity by a factor of 10?
Anyone who can seriously ask such a question must still
believe in the Tooth Fairy and the Easter Bunny. Does
going to church every Sunday guarantee that you will
go to heaven? Stupidity, arrogance, laziness, and other
human frailties will always make it possible to fail
despite the best of tools and support; there is no way
that we can preclude this possibility. But if we believe
in the power of information systems and automated support
for society and for business, we should believe in it
for the profession that builds systems for the rest
of the human race. It should not always be true that
the cobbler’s children are the last to wear shoes.

REFERENCES
-
Jack Crawford, speech at Wang
Computer Company, May 6, 1985.
-
James Martin, An Information
Systems Manifesto. Englewood Cliffs, N.J.:
Prentice-Hall, 1984.
-
Paul Ward and Steve Mellor,
Structured Systems Development for Real-Time
Systems, Volumes 1-3. New York: YOURDON Press,
1985.
-
Meilir Page-Jones, The Practical
Guide to Structured Systems Design, 2nd ed.
New York: YOURDON Press, 1988.
-
Steve McMenamin and John Palmer,
Essential Systems Analysis. New York: YOURDON
Press, 1984.
-
Paul Ward, Systems Development
Without Pain. New York: YOURDON Press, 1984.
-
Brian Dickinson, Developing
Structured Systems. New York: YOURDON Press,
1980.
-
Edward Yourdon, Managing
the System Life Cycle, 2nd ed. New York: YOURDON
Press, 1988.
-
Edward Yourdon and Larry Constantine,
Structured Design. Englewood Cliffs, N.J.:
Prentice-Hall, 1979.
-
Tom DeMarco, Structured
Analysis and System Specification. Englewood
Cliffs, N.J.: Prentice-Hall, 1979.
-
Chris Gane and Trish Sarson,
Structured Systems Analysis and Design.
New York: Improved Systems Technologies, 1977.
-
Ken Orr, Structured Systems
Development. New York: YOURDON Press, 1977.

FOONOTES
-
[1] This is
important, because we know that roughly 50% of the
errors in a typical systems development project
today are due to misunderstandings between the end
user and the systems analyst; and 75% of the cost
of error removal in an operational system is associated
with errors that originated in the systems analysis
phase of the project.
-
[2] $10,000
is magical because it is the level at which higher
levels of authorization are required before spending
corporate funds. A project manager can often
see the practical benefits of a software engineering
workstation and can often provide realistic cost-benefit
figures. But if the decision involves $20,000,
it will escalate up to the level of an assistant
vice-president who has spent weeks trying to stay
awake long enough to do something useful in the
organization. Now he can organize a committee,
develop standards, survey the industry, and write
memos to dozens of other equally sleepy assistant
vice-presidents. While all this high-level decision
making is taking place, the project manager shrugs
his shoulders, tries to forget that he ever submitted
the requisition in the first place, and goes back
to using his tried-and-true Stone Age techniques
for building systems. As you can tell, I am
entirely objective and have absolutely no emotional
feelings about this subject.
-
[3] Most software
developers use CASE products that run on IBM PC
computers, but the diagrams in this book are not
from such products. To use them, I would
have had to figure out how to merge the diagrams
the text file for this book, which I am writing
on a Macintosh.
-
[4] It was obviously
a more complicated diagram than the one shown in
Figure A.1. Indeed, most real-world dataflow
diagrams are; they have seven or eight bubbles,
three or four data stores, a dozen or more dataflows,
and several external terminators.
-
[5] Interestingly,
the enormous effort required to review the enterprise
portfolio of software for Y2K compliance emphasized
the need for source code control. Many organizations
found that they had lost the source code for some
of their mission-critical legacy systems; others
found that they had six different, incompatible
versions of the source code — none of which
matched the object code that was actually running
in production.
-
[6] Though the
Heisenberg uncertainty principle is usually associated
with the field of nuclear physics, it applies here
as well: very simply, the principle says that you
can’t measure a phenomenon without changing
the phenomenon. If a worker has to spend 10%
of his time measuring his own work, then his productivity
goes down by at least 10% and the fact that he knows
that he is being measured (by virtue of measurements
that he captures himself) is likely to alter his
behavior.
-
[7] As we discussed
in Chapter 23, one of the more popular models is
the McCabe cyclomatic complexity measure. For more
about this and other models, see Tom DeMarco’s
Controlling Software Projects (New York:
YOURDON Press, 1982).
|