The management of software engineering, Part I: Principles of software engineering
H. D. Mills
IBM Systems Journal
Sofnmre engineering may be defined as ;he sysiemaric desig n and de\·elopment of sofnmre products and 1he management of th e software p rocess . S oftware engineering has as one of its p rimary objectives the p roduction of programs thar meet specifications, and are demonstrably accurate, produced on time, and within budget. This pap er in fi ve parts discusses the principles and practices used by th e IBM Federal Systems Di\·ision fo r the design , development , and manag em ent of software .
... he general principles of software engineering are set forth in Part I, in which the author relates software engineering to the whole field of the system development process -system engineering, hardware engineering , software engineering, and system integration . Presented briefly are overviews of the major aspects of software engineering -design, development, and management. Part II, on the software engineering program, deals with the architecture of the new discipline. Discussed is the underlying concept of the software development life cycle . Based upon this foundation are a series of formally documented practices that set forth the specifics of software design, development, and management methods, which are presented in this paper. Also presented is an educational program whereby this discipline with its principles and practices has been made teachable. Part Ill, on software engineering design practices , deals with activities bounded by requirements definition on one side and program implementation on the other. Three levels of design practices are defined, dealing with construction and verification of software sy stems, modules within systems, and individual programs. At each stage , a new level of mathematical rigor and precision for creating and evaluating software designs is introduced. Part IV, on software engineering development practices, discusses a methodology for translating designs into software products . The subject is treated under two main headings, cude management and integration engineering . These are rigorous methods for building the parts and integrating them into the whole software product that meets the design specifications . In the past 20 years, the Federal Systems Division of the IBM Corporation has been involved with some of the nation's most complex and ~demanding software developments. These include the ground support software for the NASA Manned Space Series of the Mercury , Gemini, Apollo, and Skylab Programs (reaching the moon with Apollo), and both the ground and space software for the NASA Space Shuttle Program. FSD has also developed software for the Safeguard Anti-Ballistic Missile System , for the Enroute Traffic Control System for the FAA, and many other major civil and defense systems. Software engineering began to emerge in FSD some ten years ago in a continuing evolution that is still underway. Ten years ago general management expected the worst from software projectscost overruns, late deliveries, unreliable and incomplete software. Today, management has learned to expect on-time, withinbudget deliveries of high-quality software. A Navy helicopter/ ship system , called LAMPS, provides a recent example. LAMPS software was a four-year project of over 200 person-years of effort, developing over three million and integrating over seven million words of program and data for eight different processors distributed between a helicopter and a ship, in 45 incremental deliveries. Every one of those deliveries was on time and under budget. A more extended example can be found in the NASA space program, where in the past ten years, FSD has managed some 7000 person-years of software development, developing and integrating over a hundred million bytes of program and data for ground and space processors in over a dozen projects. There were few late or overrun deliveries in that decade , and none at all in the past four years. There have been two evolutions in FSD: first, an evolution in ideas, leading to a growing discipline in both the management and technical sides of software engineering , and second, an evolution in the number and skill of people using the discipline. This evolution has not been without pain and attrition . Software is a new subject of human endeavor. Just as programming has evolved from a cut and try individual activity to a precision design process in structured programming, software engineering has evolved from an undependable group activity to an orderly and manageable activity for meeting schedules and budgets with high-quality products. eluded on the first page. The title and abstract may be used without further permission in computer-based and other information-service systems. Permission to republish other excerpts should be obtained from the Editor. IBM SYST J • VOL 19 • NO 4 • 1980 MILLS 415 416 It is one thing to talk about orderly software development, and quite another to achieve it. The basis for this orderly control is mathematical discipline, even though the problem being solved by the software may not be mathematical. The key management standards of software engineering in FSD are based on mathematical theorems about how programs can be structured, documented, and organized into larger systems, because without theorems for bedrock, choices reduce to matters of management style and individual experience. The FSD Software Engineering Education which supports the Program is highly mathematical for both managers and programmers. Set theory, logic, mathematical functions, and state machines play key roles in education, not for the sake of mathematics itself, but because practical experience has shown that that level of precision is required in order to do more than talk about orderly software development. The present state of the FSD Software Engineering Program is described in the accompanying papers. "Software engineering program," by D. O'Neill "Software engineering design practices," by R. C. Linger "Software engineering development practices," by M. Dyer "Software engineering management practices," by R. E. Quinnan What is software? Software began as a synonym for computer programs, but the term has taken on a much more extensive meaning. The effective use of computer hardware requires more than programs. It requires well-informed users and human procedures for computer operations, data entry, and program execution. These requirements call for instructions for humans of no less precision and completeness than programs for the computers. Thus, operators' guides, users' guides, etc. become as important to a system operation as programs. Further, the users must understand well enough what the computers do to correctly interpret their outputs and intelligently prepare their inputs to meet operational objectives. Thus, requirements and specifications of computer programs and systems are of vital importance to the users as well. Although computers began as single units serving a single user at a time, the rapid growth of multi/distributed processing systems to serve multi/distributed users has greatly expanded the role of software. Software is the logical glue that can hold many computers and digital devices of all kinds together in a coherent system, which in turn interacts with many kinds of people-clerical, pro-MILLS IBM SYST J • VOL 19 • NO 4 • 1980 fessional, staff specialists, and management-in the operation of an enterprise. As a result of the pervasive role of software in a multi/distributed processing system, it seems proper to redefine the term software from its usual meaning of single programs to mean logical doctrine for the harmonious cooperation of a system of people and machines-usually many kinds of people and many kinds of machines. In such a system, the agents of action are people and machines, with the blueprints for their action supplied by software. A human procedure is as important to the system as a machine procedure. People have radically different instruction sets than machines, including an operation called "use your common sense," but they have instruction sets just the same. The synchronization of two people or a person and a machine is as important as the synchronization of two machines, but people often supply self-synchronization capabilities. Even "off the shelf machines" have an analog in "people with presently available skills." Thus, software consists of operational requirements for a system, its specifications, design, and programs, all its user manuals and guides, and its maintenance documentation. Further, this whole software complex needs to evolve as a consistent whole as the operation evolves, as new hardware is added, and as new people are added. That is, software is typically a set oflogical blueprints for the operation and use of a multi/distributed processing system by an organization of people in its natural evolution over time.