| |
“Up
to now, the key computer professional was someone
who could learn enough about the needs of organizations
to express them in computer language. In the future,
as our society becomes irrevocably computerized, the
key professional [will be] someone who can learn enough
about computerized systems to express them in human
language. Without that someone, we [will] have lost
control of our society. That someone is the reverse
engineer. Software maintainers are the reverse engineers
of society.”
— Nicholas Zvegintzov, publisher
Software Maintenance News

IN THIS CHAPTER,
YOU WILL LEARN:
-
Why it is important to keep a specification up to
date; and
-
What
kind of changes need to be made to a specification.
For many
systems analysts, the project is over when the structured
specification has been finished and accepted by the
user. At this point, the specification is delivered
to an implementation team of designers and programmers
who will build a system from the specification.
Of course, some systems analysts remain with the project
through the design and implementation phases. Sometimes
the systems analyst serves as a project manager, guiding
and directing the efforts of the implementation team.
Sometimes the systems analyst remains with the project
to continue doing systems analysis, that is, to continue
serving as an intermediary between the user and the
implementation team. And the systems analyst may also
be involved in the development of user manuals, acceptance
test data, installation planning, and a variety of
other complementary activities that can take place
concurrently with the implementation process.
However, almost all systems analysts leave the project
after development has been completed and the new system
is put into operation. Some programmers will remain
to carry out maintenance activities, but when the
development phase finishes, the party is over, and
most of the systems analysts, designers, and programmers
will move on to new projects (and often new companies,
where they can get a larger salary than their current
employer will pay!).
But the work done by the systems analyst (all the
work discussed throughout this book) continues to
be important. Just as the computer programs
must be maintained during the 5, 10, or 20 years of
the operational life of the system, so the specification
must be maintained as well. Or, to put it another
way, various aspects of the implementation
of the system will be changed during the system’s
lifetime, and for each of those changes an appropriate,
corresponding change must be made to the specification.
Though the original systems analyst may not remain
with the project during its operational lifetime,
it is important for him or her to leave behind a legacy
that can be maintained. This chapter discusses the
maintenance of the system specification.

24.1
WHY IT’S IMPORTANT
At this point, you may be rather puzzled; after all,
you may be thinking, it’s perfectly obvious
that the system specification be kept up to date.
Why would anyone do things differently? Unfortunately,
the history of the systems development field suggests
otherwise: the vast majority, probably more than 80%,
of systems currently in operation do not have an accurate,
up-to-date statement of the user requirements that
the system is carrying out.
This is not a phenomenon unique to the computer field.
How many century-old houses have up-to-date documents
describing the wiring, plumbing, heating, and other
architectural details? The simple truth is that it’s
often a lot easier to make a “quick-and-dirty”
correction, improvement, or change to an existing
system than it is to begin by changing the requirements
document and then propagating that change through
the design document and the implementation itself.
This is especially true if the change needs to be
made to fix an immediate, pressing, urgent problem
[1]. “We’ll
get around to changing the documentation later,”
the maintenance person will say, “but first
we have to fix the problem itself.” Documentation
is the last thing that anyone wants to do, and often
it never gets done at all.
Information systems have an important characteristic
when it comes to maintenance: they last longer than
the developers or the users who were involved in the
original development of the system. This is true of
houses, too; neither the architect nor the end user
of a Victorian townhouse built in the 1880s is available
for consultation today. And it is true of many information
systems, too; after 10 or 20 years, the system is
being used by third-generation users (some of whom
may have no idea why the system was developed in the
first place) and is being maintained by third-generation
maintenance programmers (some of whom may have no
idea why the original developers adopted a particular
design strategy). [2]
This is why Nicholas Zvegintzov describes maintenance
programmers as the “reverse engineers of society.”
There is something else important about information
systems: they tend to be complex from the outset,
and they grow increasingly complex as they undergo
years of maintenance. If a system were simple (e.g.,
250 Visual Basic statements), then it could be maintained
easily even if it had no documentation. But a typical
system has at least 100,000 program statements; many
of the larger systems presently being maintained have
well over 500,000 statements; and some have over one
million statements. No one person can understand the
complexity of such a system, especially if
(1) he or she was not involved in the development
of the original system, and (2) the requirements and
design of the original system were not documented.
And yet that is exactly what we ask most of our maintenance
programmers to do. [3]
There are dozens, if not hundreds, of examples of
organizations with severe maintenance problems of
the sort described above. Virtually every major organization
that began computerizing 20 years ago is now faced
with 20-year-old systems whose implementation is a
mystery and, far worse, whose user requirements are
a mystery.
The only solution to this crisis in the future is
to maintain accurate, up-to-date documentation for
as long as the system itself survives. But how do
we do this?
24.2
NECESSARY PREREQUISITES
We can’t keep a system and its associated documentation
up to date if the documentation isn’t accurate
to begin with. So this is the starting point: we must
ensure that when a new system is put into operation,
all the related documents are complete, consistent,
accurate, and up-to-date.
Throughout this book, we have discussed the characteristics
of an accurate model of user requirements, as well
as guidelines for ensuring that the system model is
complete and internally consistent. In order for ongoing
maintenance to be successful, these guidelines must
be enforced, and an independent person or group must
certify that the documentation is accurate before
the system is put into operation.
In addition to certifying that the documents themselves
are accurate, we must ensure that there is a mechanism
for making ongoing changes to the documents. It will
do us no good if the structured specification has
been permanently enscribed with a stainless steel
stylus on stone tablets as a permanent record for
future generations; the specification must be seen
as a living document, subject to constant, though
controlled, change.
24.3
HOW TO DO IT
The first and most fundamental rule of systems maintenance
is this: any proposed change to the existing operational
system must, in all cases, begin with an examination
of the impact on the system’s specification
of requirements. This must be done in all of the cases
illustrated next, together with any other proposed
system change:
-
The user
decides that she or he would like a new function
added to the current system.
-
The user
is unhappy with the way some current function is
carried out and wants to change it.
-
The user
wants a new output report in addition to those he
already has.
-
The user
wants to modify the format or organization of an
existing output report.
-
The maintenance
programmers wish to recode a module in order to
make it more efficient.
-
The
operations department has announced that they plan
to upgrade the organization’s computer systems
and that certain programming changes will be necessary.
-
The user
complains that the system produces incorrect output
for a certain combination of inputs.
-
The
systems development organization has decided that
Java will be adopted as the new, standard programming
language. Plans are being made to convert all existing
software to Java.
-
The
system is required to send output reports to a new
government agency, one that did not exist when the
system was originally developed.
Any
such change must be illustrated, documented, and verified
with the user by making the appropriate changes on
the system model. This is usually done by filling
out a form known as a system change request. The maintenance
change may involve any or all of the following:
-
New
terminators may need to be added to the context
diagram, or old terminators may need to be eliminated.
Dataflows between the system and the terminators
may need be added, deleted, or changed. Functions
carried out previously by terminators may now be
carried out within the system; conversely, functions
carried out by the system may now be considered
outside the system and within the domain of a terminator.
-
New events
may need to be added to the event list, or existing
events may need to be deleted.
-
If the
change is substantial, the statement of purpose
in the environmental model may need to be changed.
-
The dataflow
models, entity-relationship models, and/or state-transition
models may need to be modified.
-
The process
specifications and the data dictionary may need
to be refined or modified.
-
Various
aspects of the user implementation model, involving
the person-machine interface, the implementation
constraints dealing with response time, and so on,
may need to be changed.
Any
such change will not be free. It is possible that
some changes will be minimal and will require only
a few minutes of work to incorporate — only
a few minutes to make the necessary changes to the
specification and the existing computer programs.
However, the person or group making the change has
an obligation to go through the exercise of writing
an impact statement: a precise and detailed
statement of the changes that will need to be made
to the system specification in order to implement
the proposed change. Along with this, there should
be an economic impact statement: a statement of the
cost of making the change and the estimated benefit
to be derived from the change. This is particularly
important if the maintenance activity will change
the scope of the system.
Of course, there will be some changes that have no
impact on the system specification: a programming
correction to fix a bug, a coding change to enhance
the readability or efficiency of the existing system,
or a change of the existing computer hardware or systems
software (compiler, operating system, database management
system, etc.). However, even in these cases, an economic
impact statement should be generated so that the user
and the systems development organization will understand
the costs and benefits associated with the change.
Any change in the system will typically result in
a change to the software and/or the hardware of the
system; it may also result in a change to the user
manuals, operating procedures, and various other components
of the system. But by far the most important document
to keep up to date is the statement of user requirements!
Without it, future changes and modifications will
become more and more difficult to make; and the change
to an altogether new system will be infinitely more
expensive, time consuming, and painful than it should
be.
No doubt this plea for an up-to-date system specification
would be viewed with a jaundiced eye by a veteran
systems analyst with 20 years experience. After all,
the process of systems analysis has been so difficult
for so many years, and the task of developing an accurate
system specification has been so difficult, that the
notion of keeping it permanently up to date seems
almost ludicrous.
The answer, in the long run, will be automation. Automated
systems analysis workstations of the sort described
in Appendix A are now available at affordable costs,
and they represent a dramatic improvement over the
technology used by most systems analysts today, just
as word processing systems represent a dramatic improvement
over the electric typewriter of the 1960s. More ambitious
plans are underway to develop all-encompassing, integrated
software engineering environments that will serve
as a central repository for all the documents
associated with the development of a system. However,
the backlash from early experiments with automated
tools, together with the intense pressure to develop
new systems more and more quickly, has slowed the
deployment and adoption of this technology throughout
the industry; it could well be another decade before
it is accepted as standard practice.
However, there is much to be done even with the technology
available today. There is simply no excuse for making
a change to an existing system without making the
corresponding change to the system specification.
To make this work, though, requires strong, disciplined
management within the IT organization.
24.4
SUMMARY
There is a growing body of literature on the subject
of software maintenance, as well as at least one professional
society (the Software Maintenance Association) concerned
with issues of maintenance. However, most current
emphasis is on the management and refurbishing of
existing programs; there is also some emphasis on
the use of good design techniques to create maintainable
programs. But the systems development industry is
only now beginning to realize that without maintainable
specifications we will never have maintainable software.

REFERENCES
-
Scott L. Schneberger, Client/Server Software
Maintenance, McGraw-Hill, 1997.
-
Dennis Smith, Designing Maintainable Software,
Springer Verlag 1999.
-
Thomas M. Pigoski, Practical Software Maintenance:
Best Practices for Managing Your Software Investment,
John Wiley & Sons, 1996.
-
1997
International Conference on Software Maintenance,
Icsm ’97, IEEE Press, 1998.
-
1998
International Conference on Software Maintenance
Icsm ’98, IEEE Press, 1998.
-
1999
IEEE International Conference on Software Maintenance
(Icsm’99), IEEE Press, 1999.
-
3rd
European Conference on Software Maintenance and
Reengineering (Csmr ’99), IEEE, March
1999.
-
David Higgins, Data Structured Software Maintenance:
The Warnier/Orr Approach, Dorset House, 1987
-
IEEE
Standard for Software Maintenance, Revised edition,
IEEE Press, 1998.
-
Bennet Lientz and B. Swanson, Software Maintenance
Management. Reading, Mass.: Addison-Wesley,
1980.
-
James Martin and Carma McClure, Software Maintenance:
The Problem and Its Solution. Englewood Cliffs,
N.J.: Prentice-Hall, 1983.
-
Carma McClure, Managing Software Development
and Maintenance. New York: Van Nostrand Reinhold,
1981.
-
Robert Glass and R.A. Noiseux, Software Maintenance
Guidebook. Englewood Cliffs, N.J.: Prentice-Hall,
1981.
-
Ned Chapin, “Software Maintenance with fourth-generation
Languages,” ACM Software Engineering Notes,
Volume 9, Number 1, January 1984, pp. 41-42.
-
R.N. Britcher and J.J. Craig, “Using Modern
Design Practices to Upgrade Aging Software Systems,”
IEEE Software, Volume 3, Number 3, May 1986,
pp. 16-24.
-
Salah Bendifallah and Walt Scacchi, “Understanding
Maintenance Work,” IEEE Transactions on
Software Engineering, Volume SE-13, Number 3,
March 1987.

-
Why
is it necessary to maintain a system specification
even after the system has been fully developed?
-
Why are maintenance programmers tempted to make
changes to an operational system without updating
the associated specification documents?
-
Research
Project: Find out the average age of the systems
currently in operation in your organization. Even
more interesting, find out how much longer they
are expected to continue operating before they are
replaced with new systems.
-
Research Project: Find out how many of the systems
currently in operation have up-to-date specifications.
Are the users and managers in your organization
aware of these statistics?
-
What
difficulties are caused if a system is being used
by users and maintained by programmers who were
not involved in the original system development
?
-
Give six examples of the kind of changes that a
user might want to make to an operational system.
-
Why
is it possible that new terminators might have to
be added to the context diagram during maintenance
of a system?
-
Why is it possible that new events might have to
be added to the event list during maintenance of
a system?
-
Under
what conditions might the statement of purpose for
a system have to be changed during maintenance?
-
What is an impact statement? Why is it important?
-
Why
has it been difficult to keep the systems analysis
documents (the essential model of the system) up
to date in most organizations?
-
What kind of technological development is likely
to be needed in order to ensure that systems analysis
documents will be kept up to date?

FOOTNOTES
-
[1]
A survey in [Lientz and Swanson, 1980] showed that
approximately 9% of all maintenance work consists
of “emergency program fixes.”
-
[2]
A study by the British computer manufacturer ICL
in the 1970s indicated that the typical system was
maintained by seven generations of maintenance programmers
before it was finally scrapped. The situation is
probably not as severe in the early part of the
21st century, because (a) a substantial number of
totally unmaintainable legacy systems were scrapped
and replaced during the massive Y2K remediation
effort carried out by most IT organizations, and
(b) more and more of today’s systems are only
expected to have a lifetime of 3-5 years before
business conditions (and technology!) change so
drastically that they’ll have to be replaced.
But even if it turns out that the average application
is only maintained by three or four generations
of programmers, it may still pose some difficulties
— because the turnover rate is so much higher
in today’s organizations than it was in the
somewhat more stable 1970s. In any case, this phenomenon
suggests that much of what we call maintenance programming
would be more accurately described as archaeology.
-
[3]
One of the more extreme examples of a large, complex
system with ongoing maintenance requirements is
the NASA Space Station project. Its charter: to
colonize and industrialize the nearby solar system.
Its development schedule: 30 years. And it will
need permanent maintenance.
|
|
|
|