CHAPTER 24: Maintaining the Specification

 

“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:

  1. Why it is important to keep a specification up to date; and
  2. 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

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

QUESTIONS AND EXERCISES

  1. Why is it necessary to maintain a system specification even after the system has been fully developed?
  2. Why are maintenance programmers tempted to make changes to an operational system without updating the associated specification documents?
  3. 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.
  4. 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?
  5. 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 ?
  6. Give six examples of the kind of changes that a user might want to make to an operational system.
  7. Why is it possible that new terminators might have to be added to the context diagram during maintenance of a system?
  8. Why is it possible that new events might have to be added to the event list during maintenance of a system?
  9. Under what conditions might the statement of purpose for a system have to be changed during maintenance?
  10. What is an impact statement? Why is it important?
  11. Why has it been difficult to keep the systems analysis documents (the essential model of the system) up to date in most organizations?
  12. 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. [1] A survey in [Lientz and Swanson, 1980] showed that approximately 9% of all maintenance work consists of “emergency program fixes.”
  2. [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. [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.