Click for next page ( 72


The National Academies | 500 Fifth St. N.W. | Washington, D.C. 20001
Copyright © National Academy of Sciences. All rights reserved.
Terms of Use and Privacy Statement



Below are the first 10 and last 10 pages of uncorrected machine-read text (when available) of this chapter, followed by the top 30 algorithmically extracted key phrases from the chapter as a whole.
Intended to provide our own search engines and external engines with highly rich, chapter-representative searchable text on the opening pages of each chapter. Because it is UNCORRECTED material, please consider the following text as a useful but insufficient proxy for the authoritative book pages.

Do not use for reproduction, copying, pasting, or reading; exclusively for search engines.

OCR for page 71
Paper 9 1 SOFTWARE DEVELOPMENT THE PROBLEM The history of software development over the past 30 years has led to the gradual and painful realization that programming a computer is inherently difficult. m at realization is now deeply embedded in the consciousness of computer scientists and is one factor that separates the professional from the amateur programmer. A computer program is one of the most complex artifacts ever created by mankind. Even a simple, several-hundred-line program can contain as astronomical number of control paths; many programs contain hundreds of thousands of lines, each of which must be exactly correct or the program will eventually fail. Experience has demonstrated the enormous difficulty of precisely specifying, designing, implementing, and validating programs, and in managing programming projects. m e problem of efficiently producing reliable software has been recognized for many years by industry, universities, and government funding agencies. ~ ~ ~ Although significant resources have been expended on research in this area, the results--as measured by improved programmer productivity and program reliability--have been disappointing: The productivity of software implementors has been increasing at less than 3 percent per year. Typical software released from the quality control operations of military contractors contains one or two bugs per hundred lines of code and one or two serious bugs per thousand lines of code. RESEAL STY In one important sense, virtually all research in computer science is related to software development. Research results in any area of computing usually imply the ability to produce better software in that area. For example, programmers familiar with research results in data bases or compiler design can implement programs in those areas more rapidly and with fewer errors than someone without that knowledge. Often research results can be encapsulated in software packages, such 71

OCR for page 71
72 as compilers or data base managers, so that even programmers unfamiliar with the results can use them in programs. A strong case can be made that most of the productivity and reliability gains over the past 30 years have come from this source--that is, from advances in the science of programming. Our main concern here, however, is with software tools, programming methodologies, management approaches, software development systems, and computing environments, all of which can also lead to improved productivity of programmers and improved reliability of programs--this time from advances in the art and the engineering of programming. Any attempt to list the concepts of this type that have had major effects on productivity is certain to be controversial, but would undoubtedly yield a short list. One such list is as follows: 1. High-level languages, starting with FORTRAN in the late 1950s, evolving through several generations of new languages, and leading to present languages such as PASCAL and ADA. The resultant productivity increase is due to the fact that while a programmer can generate the same number of lines of debugged code a day in a high-level language as in a lower level one, one line of code in the higher level language is equivalent to many lines in the lower level language. 2. Interactive computing environments, starting with time sharing in the early 1960s, and leading to video editors and text processing in the 1970s, with the promise of widespread use of personal computer work stations, and integrated development environments in the 1980s. The productivity increase is due to faster and easier interaction between the programmer and the computer. 3. Programming methodologies such as top-down design and structured programming, large portions of which have become part of the programming culture and are often used without much thought as to their origin. The productivity increase is due to increased discipline in the design and coding process. 4. Management methodologies such as the use of written require- ments, specifications, designs, and test plans. The productivity increase is due to increased discipline in the programming project and increased control by the project manager. Several lessons can be inferred from this brief history: 1. Important research in software development has been done in both universities and industry. (FORTRAN was developed in industry, PASCAL at a university, time sharing at universities, and the personal computer work station in industry.) 2. The major research results have been obtained by groups who were living through real problems in development software. Time sharing was developed by universities who needed an environment for student programming; management methodologies were developed by industrial groups who were having difficulties in managing large software projects. 3. Major portions of the research in this area-are experimental in nature and require the availability of experimental state-of-the-art

OCR for page 71
73 hardware, which may appear at the time to be uneconomical. (Initially, time sharing was thought to be a wasteful use of resources, the original work on personal computer work stations was done when such work stations were too expensive to be routinely supplied to all programmers.) CONCLUSIONS Al CONNATIONS Research in software development has been disappointingly slow in yielding results that significantly improve programmer productivity and program reliability. Nor is there any reason to expect that imminent breakthroughs will significantly increase the historic 3 percent annual productivity improvement. Nevertheless, research in this area is of utmost importance to the national economy. Andres Grove, president of Intel, has estimated that to program all the microprocessor applications that will exist in 1990 would require over a million programmers, if we were forced to use today's programming technology. It is crucial that research be conducted with the goal of making important advances in that technology. The best use of funding resources in the 1980s may be for the following: 1. Increased exposure of both academic and industrial computer science researchers to real-world problems of software development. 2. Continued revitalization of experimental computing facilities both in industry and in universities. 3. Support of significant experiments with promising software productivity tools as these emerge. Important results are most likely to come from researchers who understand the real-world problems and have the experimental facilities necessary to solve them. History suggests that advances in software development naturally occur in certain kinds of environments sites that face pressing problems in constructing software that they require and that have the resources (both in computational ability and in personnel) to devote to the problem. Rather than mounting major formal research projects to solve the "software problems we would be better advised to seek out these kinds of environments, provide them with the needed resources, and allow natural processes to take over.

OCR for page 71