A view of 20th and 21st century software engineering

George Santayana's statement, "Those who cannot remember the past are condemned to repeat it," is only half true. The past also includes successful histories. If you haven't been made aware of them, you're often condemned not to repeat their successes.In a rapidly expanding field such as software engineering, this happens a lot. Extensive studies of many software projects such as the Standish Reports offer convincing evidence that many projects fail to repeat past successes.This paper tries to identify at least some of the major past software experiences that were well worth repeating, and some that were not. It also tries to identify underlying phenomena influencing the evolution of software engineering practices that have at least helped the author appreciate how our field has gotten to where it has been and where it is.A counterpart Santayana-like statement about the past and future might say, "In an era of rapid change, those who repeat the past are condemned to a bleak future." (Think about the dinosaurs, and think carefully about software engineering maturity models that emphasize repeatability.)This paper also tries to identify some of the major sources of change that will affect software engineering practices in the next couple of decades, and identifies some strategies for assessing and adapting to these sources of change. It also makes some first steps towards distinguishing relatively timeless software engineering principles that are risky not to repeat, and conditions of change under which aging practices will become increasingly risky to repeat.

[1]  Frederick P. Brooks,et al.  No Silver Bullet: Essence and Accidents of Software Engineering , 1987 .

[2]  Barry W. Boehm,et al.  Improving quality through software process improvement in Thailand: initial analysis , 2005, WoSQ@ICSE.

[3]  Barry Boehm,et al.  Balancing Agility and Dis-cipline: A Guide for the Perplexed , 2003 .

[4]  Bertrand Meyer,et al.  Object-Oriented Software Construction, 2nd Edition , 1997 .

[5]  Douglas T. Ross,et al.  Structured Analysis (SA): A Language for Communicating Ideas , 1977, IEEE Transactions on Software Engineering.

[6]  Barry W. Boehm,et al.  Value-based software engineering: reinventing , 2003, SOEN.

[7]  Barry W. Boehm,et al.  A Contextualized Study of COTS-Based E-Service Projects , 2005, ICCBSS.

[8]  Marvin V. Zelkowitz,et al.  Analyzing medium-scale software development , 1978, ICSE '78.

[9]  Maurice H. Halstead,et al.  Elements of software science , 1977 .

[10]  David M. Weiss,et al.  Architecture reviews: practice and experience , 2005, IEEE Software.

[11]  David Lorge Parnas,et al.  Review of David L. Parnas' "Designing Software for Ease of Extension and Contraction" , 2004 .

[12]  Ivar Jacobson,et al.  The Unified Modeling Language User Guide , 1998, J. Database Manag..

[13]  Thomas E. Cheatham,et al.  Software Technology in the 1990's: Using a New Paradigm , 1983, Computer.

[14]  D. Thomas King,et al.  Mind over Machine. , 1978 .

[15]  Barry Boehm,et al.  Spiral Acquisition of Software-Intensive Systems of Systems , 2004 .

[16]  Richard M. Stallman,et al.  Free Software, Free Society: Selected Essays of Richard M. Stallman , 2009 .

[17]  Gerard J. Holzmann,et al.  The SPIN Model Checker , 2003 .

[18]  John V. Guttag,et al.  The specification and application to programming of abstract data types. , 1975 .

[19]  Mack W. Alford,et al.  Software Requirements Engineering Methodology (SREM) at the age of two , 1978, COMPSAC.

[20]  A. Elssamadisy,et al.  Recognizing and responding to "bad smells" in extreme programming , 2002, Proceedings of the 24th International Conference on Software Engineering. ICSE 2002.

[21]  J. Daniel Couger,et al.  System analysis and design: a foundation for the 1980's , 1982, SOEN.

[22]  Glenford J. Myers,et al.  Structured Design , 1974, IBM Syst. J..

[23]  W. W. Royce,et al.  Managing the development of large software systems: concepts and techniques , 1987, ICSE '87.

[24]  P. Kidwell,et al.  Darwin Among the machines: The evolution of global intelligence , 1999, IEEE Annals of the History of Computing.

[25]  D. Murphey,et al.  The World Is Flat: A Brief History of the Twenty-First Century , 2006 .

[26]  B. Randell,et al.  Software Engineering: Report of a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7-11 Oct. 1968, Brussels, Scientific Affairs Division, NATO , 1969 .

[27]  Fred P. Brooks,et al.  The Mythical Man-Month , 1975, Reliable Software.

[28]  David Lorge Parnas,et al.  On the Design and Development of Program Families , 2001, IEEE Transactions on Software Engineering.

[29]  Joy Bill,et al.  Why the future doesn’t need us , 2003 .

[30]  Reidar Conradi,et al.  Impact of software engineering research on the practice of software configuration management , 2005, ACM Trans. Softw. Eng. Methodol..

[31]  Watts S. Humphrey,et al.  Managing the software process , 1989, The SEI series in software engineering.

[32]  M W Alford,et al.  Software Requirements Engineering Methodology , 2002 .

[33]  Corrado Böhm,et al.  Flow diagrams, turing machines and languages with only two formation rules , 1966, CACM.

[34]  E A Nelson,et al.  MANAGEMENT HANDBOOK FOR THE ESTIMATION OF COMPUTER PROGRAMMING COSTS , 1967 .

[35]  Jay F. Nunamaker,et al.  Lessons from a Dozen Years of Group Support Systems Research: A Discussion of Lab and Field Findings , 1996, J. Manag. Inf. Syst..

[36]  Pelle Ehn,et al.  Work-oriented design of computer artifacts , 1989 .

[37]  K. Beck,et al.  Extreme Programming Explained , 2002 .

[38]  Barry Boehm,et al.  21st Century Processes for Acquiring 21st Century Software-Intensive Systems of Systems , 2006 .

[39]  R. Stallman,et al.  Free Software, Free Society , 2002 .

[40]  Michael Fagan Design and Code Inspections to Reduce Errors in Program Development , 1976, IBM Syst. J..

[41]  S. B. Kiselev,et al.  The capability maturity model: guidelines for improving the software process , 1995 .

[42]  D. L. Parnas,et al.  On the criteria to be used in decomposing systems into modules , 1972, Software Pioneers.

[43]  H. D. Benington,et al.  Production of Large Computer Programs , 1983, Annals of the History of Computing.

[44]  A. Blaxill The future of it , 2003 .

[45]  James M. Neighbors,et al.  The Draco Approach to Constructing Software from Reusable Components , 1984, IEEE Transactions on Software Engineering.

[46]  Y. Matsumoto Evaluation of the Digital Prediction Filter Applied to Control a Class of Servomotor by Microcomputers , 1976, IEEE Transactions on Industrial Electronics and Control Instrumentation.

[47]  Robert Balzer A Gobal View of Automatic Programming , 1973, IJCAI.

[48]  Lawrence H. Putnam,et al.  A General Empirical Solution to the Macro Software Sizing and Estimating Problem , 1978, IEEE Transactions on Software Engineering.

[49]  Michael E. Fagan Design and Code Inspections to Reduce Errors in Program Development , 1976, IBM Syst. J..

[50]  Margaret M. Burnett,et al.  The impact of software engineering research on modern programming languages , 2005, ACM Trans. Softw. Eng. Methodol..

[51]  Professor Dr. Niklaus Wirth,et al.  Programming in Modula-2 , 1982, Springer Berlin Heidelberg.

[52]  Mark W. Maier Architecting Principles for Systems‐of‐Systems , 1996 .

[53]  Robert N. Charette,et al.  Software Engineering Risk Analysis and Management , 1989 .

[54]  Barry W. Boehm,et al.  Software Engineering Economics , 1993, IEEE Transactions on Software Engineering.

[55]  Ivar Jacobson,et al.  Software Reuse: Architecture, Process And Organization For Business Success , 1998, Proceedings. Technology of Object-Oriented Languages. TOOLS 26 (Cat. No.98EX176).

[56]  William E. Riddle,et al.  Software technology maturation , 1985, ICSE '85.

[57]  W. Arthur,et al.  Increasing returns and the new world of business. , 1996, Harvard business review.

[58]  C. A. R. Hoare Assertions: A Personal Perspective , 2002, Software Pioneers.

[59]  Leonard J. Bass,et al.  Developing software for the user interface , 1991, The SEI series in software engineering / Software Engineering Institute.

[60]  Mary Shaw,et al.  Software architecture - perspectives on an emerging discipline , 1996 .

[61]  John F. Wakerly,et al.  The programming language PASCAL , 1979, Microprocessors and microsystems.

[62]  Donald J. Reifer,et al.  Practical software reuse , 1997 .

[63]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[64]  Jr. Frederick P. Brooks,et al.  The mythical man-month (anniversary ed.) , 1995 .

[65]  John A. Zachman,et al.  A Framework for Information Systems Architecture , 1987, IBM Syst. J..

[66]  Ben Shneiderman,et al.  Software psychology: Human factors in computer and information systems (Winthrop computer systems series) , 1980 .

[67]  W. W. Royce,et al.  Managing the development of large software systems , 1970 .

[68]  Andrew P. Sage,et al.  On the Systems Engineering and Management of Systems of Systems and Federations of Systems , 2001, Inf. Knowl. Syst. Manag..

[69]  Maria Heloisa Penedo,et al.  PMDB—a project master database for software engineering environments , 1985, ICSE '85.

[70]  Amr Elssamadisy,et al.  Recognizing and responding to "bad smells" in extreme programming , 2002, ICSE '02.

[71]  Tim Berners-Lee,et al.  The World-Wide Web , 1994, CACM.

[72]  Diane Crawford Editorial pointers , 2003, CACM.

[73]  Paul Clements,et al.  Software Architecture in Practice: Addison-Wesley , 1998 .

[74]  Mary Shaw,et al.  An introduction to the construction and verification of Alphard programs , 1976, ICSE '76.

[75]  Steven Levy,et al.  Hackers: Heroes of the Computer Revolution , 1984 .

[76]  Baity Boehm,et al.  An Early Application Generator and Other Recollections , 1996 .

[77]  Ivar Jacobson,et al.  The Unified Software Development Process , 1999 .

[78]  Edsger Wybe Dijkstra,et al.  Cooperating Sequential Processes, Technical Report EWD-123 , 1965 .

[79]  P. Boehm,et al.  Some Future Trends and Implications for Systems and Software Engineering , 2006 .

[80]  H. Sackman,et al.  An Exploratory Investigation of Programmer Performance Under On-Line and Off-Line Conditions , 1967 .

[81]  Webster's Collegiate Dictionary , 1933, Nature.

[82]  Gerard O’Regan,et al.  The Capability Maturity Model , 2002 .

[83]  P. Krutchen,et al.  The Rational Unified Process: An Introduction , 2000 .

[84]  Bjarne Stroustrup,et al.  C++ Programming Language , 1986, IEEE Softw..

[85]  Gerald M. Weinberg,et al.  Psychology of computer programming , 1971 .

[86]  J. Gray Information Technology Research: Investing in Our Future , 1999 .

[87]  Barry W. Boehm,et al.  An Initial Theory of Value-Based Software Engineering , 2006, Value-Based Software Engineering.

[88]  W. A. Hosier Pitfalls and Safeguards in Real-Time Digital Systems with Emphasis on Programming , 1961, IRE Transactions on Engineering Management.

[89]  Martin L. Shooman,et al.  Probabilistic Models for Software reliability Prediction , 1972, Statistical Computer Performance Evaluation.

[90]  Walker Royce,et al.  Software Project Management: A Unified Framework , 1998 .

[91]  Barry W. Boehm,et al.  A spiral model of software development and enhancement , 1986, Computer.

[92]  Leon J. Osterweil,et al.  Software processes are software too , 1987, ISPW.

[93]  Michael Jackson,et al.  Principles of program design , 1975 .

[94]  Chris Peterson,et al.  Unbounding the Future: The Nanotechnology Revolution , 1991 .

[95]  Geoffrey Clemm,et al.  The workshop system: a practical knowledge-based software environment , 1988, Software Development Environments.

[96]  Raghu Singh ISO/IEC draft international standard 12207, software life-cycle processes , 1994, Methods and Associated Tools for the Information Systems Life Cycle.

[97]  Barry W. Boehm,et al.  Software Technology in the 1990's: Using an Evolutionary Paradigm , 1983, Computer.

[98]  Brian Randell,et al.  Software engineering : report on a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7th to 11th October 1968 , 1969 .

[99]  Edsger W. Dijkstra,et al.  Cooperating sequential processes , 2002 .

[100]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[101]  Edward Yourdon,et al.  Structured design , 1975 .

[102]  R. Kurzweil The Age of Spiritual Machines , 1999 .

[103]  A. Maslow Motivation and Personality , 1954 .

[104]  Barry W. Boehm,et al.  Managing Software Productivity and Reuse , 1999, Computer.

[105]  Barry Boehm,et al.  Balancing agility and discipline , 2004 .

[106]  K. Eric Drexler,et al.  Engines of Creation , 1986 .

[107]  Judith Scott Clayton,et al.  The Future , 2001, Nature.

[108]  D. Bjorner,et al.  On the use of formal methods in software development , 1987, ICSE '87.

[109]  尚弘 島影 National Institute of Standards and Technologyにおける超伝導研究及び生活 , 2001 .

[110]  Barry W. Boehm,et al.  Anchoring the Software Process , 1996, IEEE Softw..

[111]  Wayne C. Lim Managing Software Reuse , 2004 .

[112]  O. Arshad,et al.  Measuring software reuse , 2002, IEEE Students Conference, ISCON '02. Proceedings..

[113]  Edmund H Conrow Risk Management for Systems of Systems , 2005 .

[114]  Tony Clark,et al.  Model-driven development - Guest editor's introduction , 2003 .

[115]  William G. Vanderbok The World is Flat: A Brief History of the Twenty-First Century , 2005 .

[116]  Douglas C. Schmidt,et al.  Guest Editor's Introduction: Model-Driven Engineering , 2006, Computer.

[117]  Michael A. Cusumano,et al.  The software factory: a historical interpretation , 1989, IEEE Software.

[118]  Kent L. Beck,et al.  Extreme programming explained - embrace change , 1990 .

[119]  George B. Dyson Darwin among the Machines: The Evolution of Global Intelligence , 1997 .

[120]  Barry W. Boehm,et al.  Value-based processes for COTS-based applications , 2005, IEEE Software.

[121]  James Martin,et al.  Rapid Application Development , 1991 .

[122]  Stuart Kent,et al.  Model Driven Engineering , 2002, IFM.

[123]  Craig Larman,et al.  Agile and Iterative Development: A Manager's Guide , 2003 .

[124]  F. T. Baker,et al.  Structured programming in a production programming environment , 1975, IEEE Transactions on Software Engineering.

[125]  Barry W. Boehm,et al.  Theory-W Software Project Management: Principles and Examples , 1989, IEEE Trans. Software Eng..

[126]  B. Randell,et al.  Software Engineering Techniques: Report of a conference sponsored by the NATO Science Committee, Rome, Italy, 27-31 Oct. 1969, Brussels, Scientific Affairs Division, NATO , 1970 .

[127]  Ray Bert,et al.  Book Review: \IThe World Is Flat: A Brief History of the Twenty-First Century\N by Thomas L. Friedman. New York: Farrar, Straus and Giroux, 2005 , 2006 .

[128]  Stephen N. Zilles,et al.  Programming with abstract data types , 1974, SIGPLAN Symposium on Very High Level Languages.

[129]  Barry W. Boehm,et al.  Software Risk Management , 1989, ESEC.

[130]  James A. Highsmith,et al.  Adaptive Software Development: A Collaborative Approach to Managing Complex Systems , 1999 .

[131]  Alexander L. Wolf,et al.  Software architecture , 2001 .

[132]  Alexander L. Wolf,et al.  Acm Sigsoft Software Engineering Notes Vol 17 No 4 Foundations for the Study of Software Architecture , 2022 .

[133]  Steve McConnell,et al.  Rapid Development: Taming Wild Software Schedules , 1996 .

[134]  Peter Newmark,et al.  Editorial , 1994, Current Biology.

[135]  Meir M. Lehman,et al.  Characteristics of Large Systems , 1978 .

[136]  Janis R. Putman,et al.  Architecting with RM-ODP , 2000 .

[137]  Paul Clements,et al.  Software architecture in practice , 1999, SEI series in software engineering.

[138]  David A. Patterson 20th century vs. 21st century C&C: the SPUR manifesto , 2005, CACM.

[139]  Will Tracz Test and analysis of software architectures , 1996, ISSTA '96.

[140]  Bev Littlewood,et al.  A Bayesian Reliability Growth Model for Computer Software , 1973 .

[141]  E. B. Swanson,et al.  Software maintenance management , 1980 .