6.2.3. MAINTENANCE
The main contributions that were concerned directly with software maintenance were those of Gillette and Köhler.
Köhler: (from Maintenance and distribution of programs)
»Maintenance and distribution are strongly interdependent: upon being written each program requires a certain amount of testing, the so-called field test. The field test is considered to be successful when the programs that are being tested have been allowed a reasonable number of fault-free machine runs and when it is thus indicated that they will effect the full spectrum of their intended applications. The duration of the field test depends upon quite a number of different factors, such as the amount of machine time allocated to a given program, the frequency of machine runs required, the complexity of the program, etc. Consequently the actual times for the duration of field tests should always be determined by the people actually responsible for the maintenance of a respective program; also great care should be taken to make sure that a given number of runs has been achieved during the test and that any faults recognized by the user have been properly recorded and reported to the interested parties. No one should hesitate to prolong the field test period if — during its course — it should become apparent that the number of existing program faults shows no, or only small, diminishing tendencies. On the other hand, it should not be expected that a complex program, after being given an appropriate field test, is completely free of errors. Owing to the complexity of certain programs, each user of electronic data processing equipment has at times to be prepared to deal with program failures, especially when handling more sophisticated applications.
Thus each maintenance depends upon the proper recording of programming errors by the user and upon the quality of such records. In those cases where the maintenance-center and the distribution-center constitute a single organisational unit, maintenance can operate with great effectiveness and, when distributing their programs to users, can influence all users as regards proper error reporting.«
Gillette: (from Aids in the production of maintainable software)
»The economics of software development are such that the cost of maintenance frequently exceeds that of the original development. Consider, for example, the standard software that many manufacturers provide and deliver with their hardware. This product can include a basic operating system, a machine language macro assembler, an Algol, Fortran, and Cobol compiler, a sort/merge package, a file management facility, and so on. In scope this represents something in the order of more than 250 thousand lines of generated code that must be released to customers whose configurations and requirements vary a good deal, encompassing the spectrum from batch oriented data processing shops, to hybrid time-critical, time sharing and scientific shops. Producing such systems currently requires about a two to three year effort involving perhaps as many as 50 personnel. Maintenance of such systems is an unending process which lasts for the life of the machine; as much perhaps as eight years.
…
Maintenance of a system is required in order to satisfy three basic problems. First, in an effort of the magnitude of that described there will be bugs in the system. These can originate from ambiguous specification and reference documentation, because of design error, or because of programmer and system checkout error. Second, design decisions and code generation cannot always result in ‘good’ performance. In a basic operating system, for example, a code module may get executed on the average of once per 10 milliseconds while the system is operational; it is desirable to make the code as fast as possible. In the hurry to deliver an operable system it is seldom that code can be truly optimized; the emphasis is on correct execution rather than speed. Much effort is expended to improve system performance in order to remain competitive. Third, and finally, in a span of several years, new hardware is developed which must be supported and new customer needs develop which must be met. To support this a system must be extended to include capabilities beyond those that the original designer conceived. In summary, then, the maintenance process involves corrective code, improvement code, and extensive code. «
Babcock: I am concerned about the division of responsibility for maintenance between user and manufacturer. As a user, I think it a manufacturer’s responsibility to generate systems to fit a particular user’s need, but I haven’t been able to convince my account representative of that fact.